部署私有Docker Registry
安装部署一个私有的Docker Registry是引入、学习和使用Docker这门技术的必经之路之一。尤其是当Docker被所在组织接受,更多人、项目和产品开始接触和使用Docker时,存储和分发自制的Docker image便成了刚需。
Docker的开发者也一直在致力于改善Registry安装和使用的体验,通过提供官方Registry Image以及Docker Compose工具等来简化Registry的配置。不过在本文中,我们只是利用Docker以及Registry的官方Image来部署Registry,这样更便于全面了解Registry的部署配置细节。
一、环境
这里还是复用以往文章中的Docker环境:
组件名 | Ip | 版本 |
|
| docker1.13.1 |
|
| Docker version 19.03.11, build 42e35e61f3 |
本次Registry使用当前最新stable版本:Registry 2.3.0。
二、registry
搭建
本以为Docker Registry的搭建是何其简单的,甚至简单到通过一行命令就可以完成的。比如我们在Registry Server上执行:
$sudo docker run -d -p 5000:5000 --restart=always --name registry registry:latest
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
22b4515859fb docker.mirrors.ustc.edu.cn/library/registry:latest "/entrypoint.sh /e..." 2 hours ago Up 2 hours 0.0.0.0:5000->5000/tcp
Registry container已经跑起来了,其启动日志可以通过:docker logs registry查看。
检出nginx 示例容器
docker pull nginx:alpine
就能下载到基于 alpine 的最新版本的 nginx 服务器镜像, 然后再输入:
docker run \
--detach \
--name nginx \
--publish 80:80 \
--restart unless-stopped \
nginx:alpine
我们在192.168.1.212
本地给nginx:alpine打一个tag,并尝试将新tag下的image push到Registry中去:
docker tag nginx:alpine 127.0.0.1:5000/nginx:v1
push到Registry中:
现在可以上传这个镜像:
docker push 127.0.0.1:5000/nginx:v1
现在来浏览 http://127.0.0.1:5000/v2/_catalog , 将会看到这样的结果:
{"repositories":["nginx"]}
表示已经有了 nginx 这个镜像, 如果要看这个镜像有什么版本, 需要输入地址 http://127.0.0.1:5000/v2/nginx/tags/list , 结果如下:
{"name":"nginx","tags":["v1"]}
三、docker 配置
如果要在其它装了 docker 的电脑上获取这个镜像, 或者下载局域网其它 registry 服务器上的镜像,新版本的docker,由于安全策略, 有两个选择:
- 配置 HTTPS 证书, 因为是内网分发, 没有必要去折腾证书。
- docker 的 /etc/docker/daemon.json 文件, 配置 insecure-registries 选项。
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors":["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"],
"insecure-registries":["192.168.1.212:5000"]
}
EOF
检出镜像
docker pull 192.168.1.212:5000/nginx:v1
使用镜像启动
docker run --detach --name nginx --publish 80:80 --restart unless-stopped 192.168.1.212:5000/nginx:v1