您的位置:首页 > 运维架构 > Docker

搭建 Docker 私有仓库 Registry-v2

2016-12-21 16:13 1081 查看

搭建 Docker 私有仓库 Registry-v2

从 docker v1.12 开始,docker 就不支持从 HTTP 仓库下载镜像,建立私有仓库必须走 HTTPs 加密协议。本文收集了网上中文、官方资料,总算搞定了自己签名证书的私有仓库。

背景

官方资料说 dockerd 加参数
--insecure-registry
可使用 HTTP 协议,其实新版本根本不支持(localhost 例外),而自己签名又写的很简略1。官方的部署简要指南,就是 localhost 的使用,或使用受信机构签名证书2。搭建Docker私有仓库Registry-v23 基本正确,但一些细节需要进一步说明。

1、复制一个 Docker Registry 虚拟机

使用 VirtualBox 复制一台安装了 Docker 的虚拟机(选修改网卡mac

配置网络和主机名, 例如:
192.168.56.51
myregistrydomain.com


2、安装配置 Registry 机器

1、编辑 /etc/hosts , 添加 registry 域名。例如
myregistrydomain.com


127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.51 myregistrydomain.com


2、创建证书(不受信任,仅测试用)

$ mkdir -p certs
$ mkdir -p certs && openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 365 -out certs/domain.crt


输入正确的 [CN] com

3、让客户端信任你的证书

$ mkdir /etc/docker/certs.d/myregistrydomain.com:5000/ -p
$ cp certs/domain.crt /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
$ service docker restart


4、下载启动 registry

$ mkdir data
$ docker run -d -p 5000:5000 --restart=always --name registry \
-v `pwd`/certs:/certs \
-v `pwd`/data:/var/lib/registry \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2


5、 本地测试

$ docker tag hello-world myregistrydomain.com:5000/hello-world
$ docker push myregistrydomain.com:5000/hello-world
$ docker pull myregistrydomain.com:5000/hello-world


6、远程浏览器测试

https://192.168.56.51:5000/v2/
返回 {} https://192.168.56.51:5000/v2/_catalog 返回 {"repositories":["hello-world"]}


3、客户机配置

1、拷贝客户端证书

$ mkdir certs
$ scp root@192.168.56.51:certs/domain.crt certs


2、让客户端 docker 信任你的证书

$ mkdir /etc/docker/certs.d/myregistrydomain.com:5000/ -p
$ cp certs/domain.crt /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
$ service docker restart


3、加入主机名到 /etc/hosts

192.168.56.51 myregistrydomain.com


4、测试

例如,你的机器上有一个镜像 nginx

docker pull myregistrydomain.com:5000/hello-world
docker tag nginx  myregistrydomain.com:5000/nginx
docker push  myregistrydomain.com:5000/nginx
docker pull  myregistrydomain.com:5000/nginx


小结

搭建私有 Registry 镜像服务最好有自己的域名和守信的CA证书,这样就可以按官方手册安装。使用自己的签名比较繁琐,要点包括:

每台机器需要修改 /etc/host

生成自己的签名

让 docker 客户端信任自己签名

总算在多台机器之间可以交换镜像了!!!

【参考】

Using self-signed certificates https://docs.docker.com/registry/insecure/
a80b

Deploying a registry server https://docs.docker.com/registry/deploying/
搭建Docker私有仓库Registry-v2 http://ju.outofmemory.cn/entry/228928
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker registry