仓库分为2个类型,跟游戏一样,分为官方的以及非官方的,比较官方的名称是叫docker hub以及私有仓库。docker hub在之前的文章有介绍过,在此省过。而私有仓库的搭建方法主要有docker-registry以及harbor。

docker-registry

docker-registry 是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。

 

安装

docker-registry其实就是一个镜像,直接docker run即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~]# docker run -d -p 5000:5000 --restart=always --name registry registry
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
[DEPRECATION NOTICE] registry v2 schema1 support will be removed in an upcoming release. Please contact admins of the docker.io registry NOW to avoid future disruption.
c87736221ed0: Pull complete
1cc8e0bb44df: Pull complete
54d33bcb37f5: Pull complete
e8afc091c171: Pull complete
b4541f6d3db6: Pull complete
Digest: sha256:db8e07b1da92e1774458798a018512d71d869887d80b13cf126acda20122e41e
Status: Downloaded newer image for registry:latest
8f964fb3ede031f22a3113c8c668a3703d09801e2d904812e16d7389a477ce8d
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
8f964fb3ede0        registry            "/entrypoint.sh /etc??   14 minutes ago      Up 2 minutes        0.0.0.0:5000->5000/tcp   registry

推送镜像

安装完成之后,就可以推送了,但由于docker push时默认是上传到https://index.docker.io/v1/,需要先修改一下tag才可以推送至本机的私有仓库

1
2
3
4
5
6
7
root@localhost ~]# docker tag busybox:latest localhost:5000/busybox
[root@localhost ~]# docker push localhost:5000/busybox
The push refers to repository [localhost:5000/busybox]
6c0ea40aef9d: Pushed
latest: digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808 size: 527
[root@localhost ~]# curl 127.0.0.1:5000/v2/_catalog
{"repositories":["busybox"]}

使用curl就可以查看仓库中的镜像。这里可以看到 {"repositories":["busybox"]},表明镜像已经被成功上传了。

网络共享

如果你不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 192.168.137.66:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。如下:

1
2
3
4
[root@localhost ~]# docker tag alpine:latest 192.168.137.66:5000/alpine
[root@localhost ~]# docker push 192.168.137.66:5000/alpine
The push refers to repository [192.168.137.66:5000/alpine]
Get https://192.168.137.66:5000/v2/: http: server gave HTTP response to HTTPS client

报错信息已经提示了,默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的insecure-registries配置选项来取消这个限制。

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["http://f1361db2.m.daocloud.io"],
  "insecure-registries": ["192.168.137.66:5000"]
}
[root@localhost ~]# systemctl restart docker.service
[root@localhost ~]# docker push 192.168.137.66:5000/alpine
The push refers to repository [192.168.137.66:5000/alpine]
03901b4a2ea8: Pushed
latest: digest: sha256:acd3ca9941a85e8ed16515bfc5328e4e2f8c128caa72959a58a127b7801ee01f size: 528

私有仓库也是支持https的,配置方法:https://yeasy.gitbooks.io/docker_practice/content/repository/registry_auth.html

harbor

官方的docker-registry由于没有比较完善的可视化界面,在生产环境下如果要搭建私有仓库,这时就需要harbor了。

简介

VMware公司开源了企业级Registry项目Harbor,其的目标是帮助用户迅速搭建一个企业级的Docker registry 服务。它以Docker公司开源的registry 为基础,提供了管理UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文,对广大中国用户是一个好消息。

Harbor核心组件解释如下:

  • Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
  • db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
  • UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
  • jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
  • Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
  • Registry:镜像仓库,负责存储镜像文件。
  • Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

部署

目前harbor已经开源在 github 上,在 https://github.com/goharbor/harbor/releases 下载最新的release版本,目前最新版本是 v1.9.0 。harbor提供了在线和离线两种安装方式,由于离线版本有500多M,对于国内网速就是龟速了,如果机器能通外网,还是选择在线安装版,在安装时,会自动下载很多镜像,但我们有经常加速了,所以就不需要担心速度的事情。

在安装之前,建议先阅读: Installation & Configuration Guide 官方文档。

下载好 harbor离线包 之后,直接解压,修改harbor.yml。主要修改了hostname以及harbor_admin_password,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@localhost ~]# cat harbor/harbor.yml |grep -v "#" |grep -v '^$'
hostname: 192.168.137.66
http:
  port: 80
harbor_admin_password: xxx
database:
  password: root123
  max_idle_conns: 50
  max_open_conns: 100
data_volume: /data
clair:
  updaters_interval: 12
jobservice:
  max_job_workers: 10
notification:
  webhook_job_max_retry: 10
chart:
  absolute_url: disabled
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor
_version: 1.9.0
proxy:
  http_proxy:
  https_proxy:
  no_proxy: 127.0.0.1,localhost,.local,.internal,log,db,redis,nginx,core,portal,postgresql,jobservice,registry,registryctl,clair
  components:
    - core
    - jobservice
    - clair

修改完成之后,直接 sh install.sh ,稍等10分钟左右,就可以部署完成,这其中的时间,基本上都是去下载镜像。如下,会运行10个镜像。

1
2
3
4
5
6
7
8
9
10
11
[root@localhost harbor]# docker ps
CONTAINER ID        IMAGE                                               COMMAND                  CREATED             STATUS                 PORTS                       NAMES
5eaf82738f20        goharbor/nginx-photon:v1.9.0                        "nginx -g 'daemon of??   4 hours ago         Up 4 hours (healthy)   0.0.0.0:80->8080/tcp        nginx
8962976e71b3        goharbor/harbor-jobservice:v1.9.0                   "/harbor/harbor_jobs??   4 hours ago         Up 4 hours (healthy)                               harbor-jobservice
9472d8e20131        goharbor/harbor-core:v1.9.0                         "/harbor/harbor_core"    4 hours ago         Up 4 hours (healthy)                               harbor-core
cb8b2d091029        goharbor/harbor-registryctl:v1.9.0                  "/harbor/start.sh"       4 hours ago         Up 4 hours (healthy)                               registryctl
2f372e044673        goharbor/harbor-portal:v1.9.0                       "nginx -g 'daemon of??   4 hours ago         Up 4 hours (healthy)   8080/tcp                    harbor-portal
f9ff9cfc58cf        goharbor/redis-photon:v1.9.0                        "redis-server /etc/r??   4 hours ago         Up 4 hours (healthy)   6379/tcp                    redis
fcc76b84ff2b        goharbor/harbor-db:v1.9.0                           "/docker-entrypoint.??   4 hours ago         Up 4 hours (healthy)   5432/tcp                    harbor-db
ee76006a58dc        goharbor/registry-photon:v2.7.1-patch-2819-v1.9.0   "/entrypoint.sh /etc??   4 hours ago         Up 4 hours (healthy)   5000/tcp                    registry
8821283e41f4        goharbor/harbor-log:v1.9.0                          "/bin/sh -c /usr/loc??   4 hours ago         Up 4 hours (healthy)   127.0.0.1:1514->10514/tcp   harbor-log

直接访问 http://192.168.137.66 即可以访问了,再进行登陆,账号为admin,密码为上面设置的harbor_admin_password

这样就完成了搭建,很简单吧~

推送镜像

与docker-registry一样,需要设置insecure-registries参数,设置的方法请参考上文。同样,也需要修改tag,但由于使用了密码,所以需要先登陆才能推送。如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# docker tag busybox:latest 192.168.137.66/library/busybox:latest
[root@localhost ~]#
[root@localhost ~]# docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
192.168.137.66/library/busybox   latest              19485c79a9bb        4 weeks ago         1.22MB
busybox                          latest              19485c79a9bb        4 weeks ago         1.22MB

[root@localhost ~]# docker login 192.168.137.66 -u admin -p admin123
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.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@localhost ~]# docker push 192.168.137.66/library/busybox:latest
The push refers to repository [192.168.137.66/library/busybox]
6c0ea40aef9d: Pushed
latest: digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808 size: 527

这样在harbor也是可以看到这个镜像了。

参考链接

CentOS部署Harbor镜像仓库

使用registry搭建Docker私有仓库

夜河资源网提供的所有内容仅供学习与交流。通过使用本站内容随之而来的风险以及法律责任与本站无关,所承担的法律责任由使用者承担。
一、如果您发现本站侵害了相关版权,请附上本站侵权链接和您的版权证明一并发送至邮箱:yehes#qq.com(#替换为@)我们将会在五天内处理并断开该文章下载地址。
二、本站所有资源来自互联网整理收集,全部内容采用撰写共用版权协议,要求署名、非商业用途和相同方式共享,如转载请也遵循撰写共用协议。
三、根据署名-非商业性使用-相同方式共享 (by-nc-sa) 许可协议规定,只要他人在以原作品为基础创作的新作品上适用同一类型的许可协议,并且在新作品发布的显著位置,注明原作者的姓名、来源及其采用的知识共享协议,与该作品在本网站的原发地址建立链接,他人就可基于非商业目的对原作品重新编排、修改、节选或者本人的作品为基础进行创作和发布。
四、基于原作品创作的所有新作品都要适用同一类型的许可协议,因此适用该项协议, 对任何以他人原作为基础创作的作品自然同样都不得商业性用途。
五、根据二〇〇二年一月一日《计算机软件保护条例》规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可不经软件著作权人许可,无需向其支付报酬!
六、鉴此,也望大家按此说明转载和分享资源!本站提供的所有信息、教程、软件版权归原公司所有,仅供日常使用,不得用于任何商业用途,下载试用后请24小时内删除,因下载本站资源造成的损失,全部由使用者本人承担!