目前Docker Registry版本是2.2,也是当前最新的版本. Registry2.2的特性有,目前是用go语言去写的,性能提升比v1能高2-3倍,安全和性能上有很多的提升,那么v1有哪些安全隐患呢? v1版本,镜像的id是随机生成的,所以每次构建一个层都会随机生成一个新ID,即使是层的内容相同.这样会有一个风险就是层的内容文件会被串改,因为最终验证的是id,而不是里面的内容. v2版本,镜像ID是通过sha256做hash得出来的,这样一来同样的内容就会得到的是一样的ID.镜像id这点能保证了,但还是有其他的问题.细心的同学会发现运行 docker pull 镜像下载完后,会看到 Digest 字段,看起来docker像是想用此字符来取代 tag .只是猜测不知道后续会发展成什么一样.
说明:
reg2.youyuan.cn
这是docker registry2服务器的域名也就是你的公司docker私有服务器的主机地址,假定ip是192.168.68.17
;因为https的SSL证书不能用IP地址,我就随便起了个名字。
registry:2.2
服务器作为上游服务器处理docker镜像的最终上传和下载,用的是官方的镜像。
docker pull registry:2.2
reg2.youyuan.cn
创建目录:mkdir /opt/registry2
cd /opt/registry2
mkdir certs
cd certs
openssl req -x509 -days 3650 -subj '/CN=reg2.youyuan.cn/' -nodes -newkey rsa:2048 -keyout registry2.key -out registry2.crt
cd ..
mkdir auth
docker run --rm --entrypoint htpasswd registry:2.2 -Bbn docker docker > auth/htpasswd
用户:docker 密码:docker 可随便填写自己想填写的.
docker run --restart=always -d \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM=Registry2_Realm \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry2.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry2.key \
-v /opt/registry2/auth:/auth \
-v /opt/registry2/certs:/certs \
-v /opt/registry2/registry:/var/lib/registry \
-p 5000:5000 \
--name=registry2 registry:2.2
确认Registry2 Server是 UP 状态,
docker ps -a | grep registry2
mkdir -p /etc/docker/certs.d/reg2.youyuan.cn:5000
cp /opt/registry2/certs/registry2.crt /etc/docker/certs.d/reg2.youyuan.cn:5000
echo "192.168.68.17 reg2.youyuan.cn" >> /etc/hosts
mkdir -p /etc/docker/certs.d/reg2.youyuan.cn:5000
echo "192.168.68.17 reg2.youyuan.cn" >> /etc/hosts
scp -r root@reg2.youyuan.cn:/opt/registry2/certs/registry2.crt /etc/docker/certs.d/reg2.youyuan.cn:5000
docker login reg2.youyuan.cn:5000
docker
,密码docker
以及邮箱docker@gmail.com
或者: docker login -u docker -p docker -e "docker@gmail.com" https://reg2.youyuan.cn:5000
docker tag busybox reg2.youyuan.cn:5000/busybox:1.0
docker push reg2.youyuan.cn:5000/busybox:1.0