Docker:Harbor私服搭建和使用

摘要:DockerHarbor

Harbor简介

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署企业内部的私有环境Registry是非常必要的,Harbor和docker中央仓库的关系,就类似于nexus和Maven中央仓库的关系,Harbor除了存储和分发镜像外还具有用户管理项目管理配置管理和日志查询高可用部署等主要功能


Harbor搭建

在本地搭建一个Harbor服务,其他在同一局域网的机器可以使用Harbor进行镜像提交和拉取,搭建前需要本地安装docker服务和docker-compose,docker-compose可以直接使用pip安装

pip install docker-compose

下载Harbor离线安装包harbor-offline-installer-v2.1.0.tgz,在github官网https://github.com/goharbor/harbor/releases
或者其他资源链接下载,下载后解压

tar -zxvf harbor-offline-installer-v2.1.0.tgz

解压完成后在当前目录生成harbor目录,复制和修改harbor目录下的harbor.yml

cp harbor.yml.tmpl harbor.yml

注释掉https的配置内容,配置http相关的参数,主要是hostnameport,其他都可以不用动

# vim harbor.yml
hostname: 10.3.10.55

# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 8081

进行本地安装

bash prepare
bash install.sh

安装完成后在本地生成docker-compose.yml文件,此时可以启动harbor服务

docker-compose up -d

打开在harbor.yml中噢诶之的host和port,10.3.10.55:8081


初始的默认用户是admin,密码是Harbor12345,登录成功

下一步使用docker login到私服,需要将私服的http地址配置到docker的不安全register中

# vim /etc/docker/daemon.json
{
      "insecure-registries": ["10.3.10.55:8081"]
}

重启docker服务后可以正常login进docker私服

systemctl daemon-reload && systemctl restart docker
docker login 10.3.10.55:8081
user:admin
password:
Login Succeeded

Harbor Web客户端基础使用

左侧功能栏分为三大块,项目日志系统管理

(1)修改admin登录密码

修改admin登录密码,点击右上角用户名->修改密码

(2)新增用户

点击左侧系统管理->用户管理->创建用户

可以进一步设置为管理员


(3)新增项目和设置项目成员权限

镜像都需要根据项目名做分类索引进行存放,新建一个项目,点击项目->新建项目

将项目设置为公开,所有用户都可以读取,如果设置了私有项目,只有登陆了相关用户才可以操作,默认是私有项目


点击进行新建的项目,创建项目成员


添加用户xiaogp,角色是开发者,管理员对项目拥有所有操作权限,push/pull/delete/复制策略等操作开发人员只能push/pull访客只能pull

添加完成后项目拥有两个项目成员,分别是管理员admin和开发者xiaogp,可以点击其他操作修改成员的权限或者移除成员


Harbor上传和拉取镜像

上传镜像需要在docker主机进行操作,对于私有项目必须登录Harbor私服才能进行pull和push操作,push到Harbor的镜像的命名必须按照如下规则

{Harbor地址}:{端口}/{Harbor项目名}/{自定义镜像名}:{自定义tag}

由于harbor采用的是http服务,而docker仓库默认采用https,如果对私服采用docker login、pull、push等命令操作非https的docker regsitry的时就会报错,所以需要在docker的配置文件中将harbor私服地址配置到insecure-registry作为不安全的地址运行访问

# touch /etc/docker/daemon.json
# vim /etc/docker/daemon.json
{
    "insecure-registries": ["192.168.1.28:80"]
}

重启docker,查看docker info是否配置私服地址成功

systemctl daemon-reload && systemctl restart docker
# docker info
 Insecure Registries:
  192.168.1.28:80  # 已经配置成功
  127.0.0.0/8

下一步测试登录私服,登录成功

root@ubuntu:~# docker login 192.168.1.28:80 -u xiaogp
Password: 
WARNING! Your password will be stored unencrypted in /home/xiaogp/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

下一步将docker本机的镜像上传push到harbor,先使用docker tag创建一个新的镜像并且重命名为harbor指定的ip:host/项目名格式,然后直接push

root@ubuntu:~# docker tag xiaogp/my_image_test:v1 192.168.1.28:80/test_public/my_image_test:v1
root@ubuntu:~# docker push 192.168.1.28:80/test_public/my_image_test:v1
The push refers to repository [192.168.1.28:80/test_public/my_image_test]
bc6c5868a244: Pushed 
52cec1fdc1f3: Pushed 
6b24a3d04a66: Pushed 
d5f992479e0c: Pushed 
5adaa6cddd5f: Pushed 
9f5b4cdea532: Pushed 
cd702377e4e5: Pushed 
aa7af8a465c6: Pushed 
ef9a7b8862f4: Pushed 
a1f2f42922b1: Pushed 
4762552ad7d8: Pushed 
v1: digest: sha256:567000120e42943f598efe5084006ffa5f307f4ffbd8871003602351876aba1b size: 2640

在harbot web客户端查看镜像,在test_public下已经可以查看到镜像



近一步点进去可以查看镜像的标签信息,点击操作可以对镜像进行添加标签,删除等操作,当前界面是以xiaogp用户(开发者)进行登录的,因此没有删除权限,也没有左侧的系统管理栏


在harbor的主机的/data/registry/docker/registry/v2/目录下可以查到到镜像的存储位置

root@ubuntu:/data/registry/docker/registry/v2/repositories# ll
total 12
drwxr-xr-x 3 10000 10000 4096 7月  17 17:25 ./
drwxr-xr-x 4 10000 10000 4096 7月  17 17:25 ../
drwxr-xr-x 3 10000 10000 4096 7月  17 17:25 test_public/

下一步在另一台docker机器从私服拉去镜像,确保这台机器和私服ip互通,并且将私服地址添加到docker的不安全仓库地址配置文件中,直接使用docker pull命令拉取私服镜像

root@cloudera01:~# docker pull 192.168.1.28:80/test_public/my_image_test:v1

对于公开项目不需要login就可以被能够访问到私服的用户拉取和上传,但是对于私有项目需要login才能进行操作,先创建一个私有仓库test_private


然后进行tag和push,报错未授权访问存储库

root@ubuntu:~# docker tag xiaogp/my_image_test:v1 192.168.1.28:80/test_private/my_image_test:v1
root@aubuntu:~# docker push 192.168.1.28:80/test_private/my_image_test:v1
The push refers to repository [192.168.1.28:80/test_private/my_image_test]
bc6c5868a244: Preparing 
52cec1fdc1f3: Preparing 
6b24a3d04a66: Preparing 
d5f992479e0c: Preparing 
5adaa6cddd5f: Preparing 
9f5b4cdea532: Waiting 
cd702377e4e5: Waiting 
aa7af8a465c6: Waiting 
ef9a7b8862f4: Waiting 
a1f2f42922b1: Waiting 
4762552ad7d8: Waiting 
unauthorized: unauthorized to access repository: test_private/my_image_test, action: push: unauthorized to access repository: test_private/my_image_test, action: push

测试使用admin项目管理员权限登录私服在上传,成功

root@ubuntu:~# docker login 192.168.1.28:80 -uadmin
Password: 
WARNING! Your password will be stored unencrypted in /home/xiaogp/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
root@ubuntu:~# docker push 192.168.1.28:80/test_private/my_image_test:v1
The push refers to repository [192.168.1.28:80/test_private/my_image_test]
bc6c5868a244: Pushed 
52cec1fdc1f3: Pushed 
6b24a3d04a66: Pushed 
d5f992479e0c: Pushed 
5adaa6cddd5f: Pushed 
9f5b4cdea532: Pushed 
cd702377e4e5: Pushed 
aa7af8a465c6: Pushed 
ef9a7b8862f4: Pushed 
a1f2f42922b1: Pushed 
4762552ad7d8: Pushed 
v1: digest: sha256:567000120e42943f598efe5084006ffa5f307f4ffbd8871003602351876aba1b size: 2640

如果以普通账号(xiaogo访客权限)登录,报错未授权访问存储库,访客权限不能push镜像

root@ubuntu:~# docker login 192.168.1.28:80 -uxiaogp
Password: 
WARNING! Your password will be stored unencrypted in /home/xiaogp/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
root@ubuntu:~# docker push 192.168.1.28:80/test_private/my_image_test:v1
The push refers to repository [192.168.1.28:80/test_private/my_image_test]
bc6c5868a244: Layer already exists 
52cec1fdc1f3: Layer already exists 
6b24a3d04a66: Layer already exists 
d5f992479e0c: Layer already exists 
5adaa6cddd5f: Layer already exists 
9f5b4cdea532: Layer already exists 
cd702377e4e5: Layer already exists 
aa7af8a465c6: Layer already exists 
ef9a7b8862f4: Layer already exists 
a1f2f42922b1: Layer already exists 
4762552ad7d8: Layer already exists 
unauthorized: unauthorized to access repository: test_private/my_image_test, action: push: unauthorized to access repository: test_private/my_image_test, action: push

对于已经在harbor上存在的镜像,如果修改了原镜像层,指定同样的tag再次上传,则会用新上传的镜像更新旧的到最新,以最新上传的镜像作为指定的tag,之前的镜像依旧存在但是tag置位空


可以在垃圾清理栏中勾选回收无tag的镜像进行清理删除


执行完毕后在test_private下已经没有旧的被更新的镜像,在删除日志中也可以查到删除的镜像名


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容