因为 Docker官方仓库 在国内访问速度非常慢的,并且只允许有一个私有库,所以对于企业开发来说,考虑安全性和速度的因素,都需要自己搭建一个私有仓库来存放企业项目的各个版本的镜像,以下操作过程都基于官方 Registry 2.5.0 版本镜像。
搭建步骤
- 在Ubuntu 14.04服务器上创建目录
mkdir /home/freeman/docker-registry
用于存储镜像文件。 - 启动容器
sudo docker run -d -p 5000:5000 -v /home/freeman/docker-registry:/var/lib/registry registry:2.5.0
注意2.5.0版本的registry内部images存储的目录为:/var/lib/registry
,不再是老版本的/tmp/register
,-v
使用数据卷,这样就将registry中的所有镜像持久化到宿主服务器上,无论你以后关闭或是该registry容器,镜像始终存在服务器上。 - 在nginx服务器上设置https反向代理指向:
127.0.0.1:5000
,此处使用hub.domain.com
作为演示域名,因为考虑到安全问题,请使用SSL,免费SSL证书可以在 StartComSsl 或 Letsencrypt 上获取。
server {
listen 443;
server_name hub.domain.com;
ssl on;
ssl_certificate /home/freeman/ssl/hub.domain.com.crt;
ssl_certificate_key /home/freeman/ssl/hub.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
client_max_body_size 0;
chunked_transfer_encoding on;
location / {
proxy_pass http://127.0.0.1:5000;
}
}
- 使用 registry 2.0 api 访问仓库。
$ curl https://hub.domain.com/v2/_catalog # 获取所有repositories
$ {"repositories":["dotnet","hello-world","yuehuapi"]}
$ curl https://hub.domain.com/v2/yuehuapi/tags/list # 获取一个镜像的所有标签
$ {"name":"yuehuapi","tags":["v1.0.3"]}
使用私有仓库
- 使用
docker tag hub.domain.com/yuehuapi:v1.0.0 image-id
将镜像打上私有仓库标签 - 使用
docker push hub.domain.com/yuehuapi:v1.0.0
将镜像推送到私有仓库 - 使用
docker run hub.domain.com/yuehuapi:v1.0.0
运行来自私有仓库的容器