我是靠谱客的博主 懵懂外套,这篇文章主要介绍【Docker】4.Docker私库Registry及Harbor搭建,现在分享给大家,希望可以做个参考。

1. 获取Registry镜像

复制代码
1
2
$ sudo docker pull registry

2. 启动Registry

复制代码
1
2
$ sudo docker run -d -p 8100:5000 -v /opt/registry:/var/lib/registry --restart=always --name registry registry:latest

[wxt@localhost ~]$ sudo docker run -d -p 8100:8100 -v /opt/registry:/var/lib/registry --restart=always --name registry registry:latest
/usr/bin/docker-current: Error response from daemon: Conflict. The container name “/registry” is already in use by container 7d56c5eae33db32c1236c15c34160d404123e07154fea02881cd592a17b37a51. You have to remove (or rename) that container to be able to reuse that name…
See ‘/usr/bin/docker-current run --help’.
此时看到是错误的,不能启动容器,此时我们查看已停止的容器,并将停止的容器删除。
[wxt@localhost ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d56c5eae33d registry:latest “/entrypoint.sh /e…” About an hour ago Exited (2) 2 minutes ago registry
d605c070f7aa jdk-8u201:1.0 “/bin/bash” 19 hours ago Exited (137) 17 minutes ago fervent_kilby

查看是否启动成功

复制代码
1
2
3
4
[wxt@localhost ~]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7d56c5eae33d registry:latest "/entrypoint.sh /e..." 15 seconds ago Up 14 seconds 0.0.0.0:8100->5000/tcp registry

通过命令查看到现在Registry私库没有镜像文件

复制代码
1
2
3
[wxt@localhost ~]$ curl http://10.168.xx.xx:8100/v2/_catalog {"repositories":[]}

下面我们就将镜像上传到我们的私库。

复制代码
1
2
3
4
5
6
7
8
9
#在本地host上面,给jdk-8u201添加新的tag [wxt@localhost ~]$ sudo docker tag f1ee62462c0d 10.168.14.40:8100/jdk_8u201 [wxt@localhost ~]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE 10.168.xx.xx:8100/jdk_8u201 latest f1ee62462c0d 23 hours ago 598 MB jdk-8u201 1.0 f1ee62462c0d 23 hours ago 598 MB docker.io/registry latest d0eed8dad114 3 weeks ago 25.8 MB docker.io/centos 7 1e1148e4cc2c 2 months ago 202 MB

3. 将镜像上传到私库中

复制代码
1
2
3
#docker push <registry_ip>:<registry_port>/<image_name>:<image_tag> sudo docker push 10.168.xx.xx:8100/jdk_8u201

若出现如下错误:
[wxt@localhost ~]$ sudo docker push 10.168.xx.xx:8100/jdk_8u201
The push refers to a repository [10.168.xx.xx:8100/jdk_8u201]
Get https://10.168.xx.xx:8100/v1/_ping: http: server gave HTTP response to HTTPS client
修改文件/usr/lib/systemd/system/docker.service,在ExecStart=/usr/bin/dockerd后面添加–insecure-registry 10.168.xx.xx:8100,然后重启docker服务

此时我们在查看Registry私库就可以看到我们上传的镜像文件。

复制代码
1
2
3
[wxt@localhost ~]$ curl http://10.168.xx.xx:8100/v2/_catalog {"repositories":["jdk_8u201"]}

4. 从私库拉取镜像

复制代码
1
2
3
# docker pull <registry_ip>:<registry_port>/<image_name>:<image_tag> sudo docker pull 10.168.xx.xx:8100/jdk_8u201

5.停止及删除Registry容器

复制代码
1
2
$ sudo docker container stop registry && docker container rm -v registry

Harbor私库搭建
Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。

Docker的镜像的管理,出于各种考虑,很多企业会搭建自己的私有仓库。而为企业提供私有仓库的搭建,从商业的到开源的Harbor都不是第一个。Docker的V2也能方便的提供类似功能,但是原生态的V2给人感觉更接近于原始态,当然这个只是其将用户引导到收费的dockerhub上的工具,自然可以理解。而Vmware给出的开源的企业级Registry的解决方案,让人觉得使用起来更加方便。并且这似乎是vmware中国团队提供的功能,无形之中又有了更多的亲切感,看到越来越多的中国团队出现在开源的前沿,实在是很开心的一件事情

在实际生产运维的中,往往需要把镜像发布到几十或上百台集群节点上。这时,单个Registry已经无法满足大量节点的下载需求,因此要配置多个Registry实例做负载均衡。手工维护多个Registry实例上的镜像,将是十分繁琐的事情。Harbor可以支持一主多从的镜像发布模式,可以解决大规模镜像发布的难题。

优势详细说明
提供分层传输机制,优化网络传输Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象
提供WEB界面,优化用户体验只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像
镜像复制在实例之间复制镜像
审计所有访问Registry服务的操作均被记录,便于日后审计。
安全性对于不同的职位人员,分配不同的权限,具有更好的安全性

1.下载Harbor安装包
在这里插入图片描述

harbor 最新版1.7.1在安装后无法登陆到harbor ui,而1.6.0版本安装后删除镜像后重新上传镜像提示已存在,并且harbor ui显示的镜像大小为0,经过验证harbor 1.5.0版本较为稳定。

安装有两种方式,一种是offline ,一种是online,即离线和在线安装。

复制代码
1
2
3
4
$ tar -zxvf harbor-online-installer-v1.5.0.tgz $ cd harbor $ vi harbor.cfg

将hostname配置为服务器对应IP

复制代码
1
2
hostname = 10.168.xx.xx
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo ./prepare Generated and saved secret to file: /data/secretkey Generated configuration file: ./common/config/nginx/nginx.conf Generated configuration file: ./common/config/adminserver/env Generated configuration file: ./common/config/core/env Generated configuration file: ./common/config/registry/config.yml Generated configuration file: ./common/config/db/env Generated configuration file: ./common/config/jobservice/env Generated configuration file: ./common/config/jobservice/config.yml Generated configuration file: ./common/config/log/logrotate.conf Generated configuration file: ./common/config/registryctl/env Generated configuration file: ./common/config/core/app.conf Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt The configuration files are ready, please use docker-compose to start the service.

执行安装

复制代码
1
2
3
4
5
6
7
[wxt@localhost harbor]$ sudo ./install.sh [Step 0]: checking installation environment ... Note: docker version: 1.13.1 ✖ Need to install docker-compose(1.7.1+) by yourself first and run this script again.

需要换成另外一种安装方法docker-compose up -d

此提示需要我们安装docker-compose

复制代码
1
2
3
4
5
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ docker-compose --version docker-compose version 1.23.2, build 1110ad01

安装完成docker-compose后我们执行docker-compose up -d此时提示:

复制代码
1
2
3
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running? If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

原因在于当前用户没有docker的使用权限,需要使用sudo,我们修改docker权限。

复制代码
1
2
$ sudo chmod 666 /var/run/docker.sock

现在就可以在非root用户下运行docker了,此时我们可以看到正在下载harbor相关文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
[wxt@localhost harbor]$ docker-compose up -d Creating network "harbor_harbor" with the default driver Pulling log (goharbor/harbor-log:v1.5.0)... Trying to pull repository docker.io/goharbor/harbor-log ... sha256:27f9e24f28393a6052b71c93b1571f2269e1d3c489f4081996a099ac88ff56ff: Pulling from docker.io/goharbor/harbor-log 51be32cd3c9d: Downloading [==================================> ] 34.06 MB/49.28 MB fd9cdcfcef45: Download complete 4167b797c339: Download complete b22d11b0e478: Download complete d5aad3df7cee: Download complete bd43de1bbd44: Download complete 7494eff3da48: Download complete

修改harbor默认端口80为8101

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ vi docker-compose.yml proxy: image: goharbor/nginx-photon:v1.5.0 container_name: nginx restart: always volumes: - ./common/config/nginx:/etc/nginx:z networks: - harbor ports: - 8101:80 - 443:443 - 4443:4443 depends_on: - postgresql - registry - ui - log
复制代码
1
2
3
4
5
6
7
8
$ vi common/templates/registry/config.yml auth: token: issuer: harbor-token-issuer realm: $public_url:8101/service/token rootcertbundle: /etc/registry/root.crt service: harbor-registry

启动harbor

复制代码
1
2
3
$ docker-compose start $ docker-compose stop

或者
$ docker-compose up -d
$ docker-compose down -v

浏览器访问就可以进入我们的harbor页面
在这里插入图片描述>默认用户名是admin,密码是Harbor12345

3.向Harbor上传镜像
在项目中标记镜像:

复制代码
1
2
3
#docker tag SOURCE_IMAGE[:TAG] 10.168.xx.xx/yrz/IMAGE[:TAG] $ sudo docker tag jdk-8u201:1.0 10.168.xx.xx/yrz/jdk-8u201:1.0

推送镜像到当前项目:

复制代码
1
2
3
# docker push 10.168.xx.xx/yrz/IMAGE[:TAG] $ sudo docker push 10.168.xx.xx:8101/yrz/jdk-8u201:1.0

此时出现如下异常:

复制代码
1
2
3
4
5
The push refers to a repository [10.168.xx.xx:8101/yrz/jdk-8u201] 35b842b71126: Preparing 071d8bd76517: Preparing denied: requested access to the resource is denied

解决方案:
登录harbor即可

复制代码
1
2
3
4
5
$ docker login 10.168.xx.xx:8101 Username: admin Password: Login Succeeded

若出现如下错误:

复制代码
1
2
Get https://10.168.xx.xx:8101/v1/_ping: http: server gave HTTP response to HTTPS client

解决方案:
1.在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:

复制代码
1
2
{ "insecure-registries":["10.168.xx.xx:8101"] }

2.修改文件/usr/lib/systemd/system/docker.service,在ExecStart=/usr/bin/dockerd后面添加–insecure-registry 10.168.xx.xx:8100

复制代码
1
2
3
4
5
6
7
8
9
ExecStart=/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json --insecure-registry 10.168.xx.xx:8101

重启docker,问题解决。
重新推送镜像

复制代码
1
2
$ sudo docker push 10.168.xx.xx:8101/yrz/jdk-8u201:1.0

登录harbor就可以看到我们上传的镜像文件
在这里插入图片描述从harbor拉取镜像

复制代码
1
2
3
4
$ sudo docker login 10.168.14.40:8101 $ sudo docker pull 10.168.14.40:8101/yrz/jdk-8u201:1.0

删除harbor镜像
1.删除harbor镜像时需先在Harbor UI图形界面中删除不需要的镜像。
2.停止Harbor服务,执行垃圾回收命令

复制代码
1
2
3
4
5
6
7
8
9
10
$ sudo docker-compose stop #通过带有–dry-run选项,可以查看到将要删除的镜像文件 $ docker run -it --name gc --rm --volumes-from registry docker.io/vmware/registry-photon:v2.6.2-v1.5.0 garbage-collect --dry-run /etc/registry/config.yml #不带–dry-run选项,直接执行删除 $ docker run -it --name gc --rm --volumes-from registry docker.io/vmware/registry-photon:v2.6.2-v1.5.0 garbage-collect /etc/registry/config.yml $ sudo docker-compose start

docker.io/vmware/registry-photon:v2.6.2-v1.5.0为当前harbor版本镜像。

通过运行sudo docker images可以查看当前镜像

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[wxt@localhost ~]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE 10.168.xx.xx:8101/yrz/centos 7 1e1148e4cc2c 2 months ago 202 MB docker.io/centos 7 1e1148e4cc2c 2 months ago 202 MB docker.io/goharbor/registry-photon v2.6.2-v1.6.0 1ec7d8d4f0fd 5 months ago 201 MB docker.io/vmware/redis-photon v1.5.0 7c03076402d9 9 months ago 207 MB docker.io/vmware/registry-photon v2.6.2-v1.5.0 3059f44f4b9a 9 months ago 198 MB docker.io/vmware/nginx-photon v1.5.0 e100456182fc 9 months ago 135 MB docker.io/vmware/harbor-log v1.5.0 62bb6b8350d9 9 months ago 200 MB docker.io/vmware/harbor-jobservice v1.5.0 aca9fd2e867f 9 months ago 194 MB docker.io/vmware/harbor-ui v1.5.0 1055166068d0 9 months ago 212 MB docker.io/vmware/harbor-adminserver v1.5.0 019bc4544829 9 months ago 183 MB docker.io/vmware/harbor-db v1.5.0 82354dcf564f 9 months ago 526 MB

上一篇:【Docker】3.创建自己的Jdk镜像
下一篇:【Docker】5.Docker构建微服务镜像及持续集成

最后

以上就是懵懂外套最近收集整理的关于【Docker】4.Docker私库Registry及Harbor搭建的全部内容,更多相关【Docker】4内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部