
Docker 仓库类似我们的代码仓库,就是 Docker 存放镜像文件目的地。常用的 Docker 仓库有阿里云镜像仓库、 docker hub ,我们只演示阿里云镜像仓库,另外一种操作类似。在最后一个章节,我们还会展示下如何利用 Docker 官方提供的 Registry 来构建私有仓库。
我通过在 Windows 10 操作系统的虚拟机,安装的 CentOS 7.0 , CentOS 是最小安装版,安装后需要将服务器内核和补丁全部更新一遍。
在 CentOS 安装 Docker 后,可以查看 Docker 版本为 20.10.17 ,截止当前是 Docekr 社区版当中的最新版本。
此处说明都是基于已有 Aliyun 账号的前提下,还没有的话,自行申请。
https://cr.console.aliyun.com/









点击 创建镜像仓库 后,选择 本地仓库 。


此后,我们对照着 操作指南 一步步操作,即可完成
docker login --username=wcngs@qq.com registry.cn-hangzhou.aliyuncs.com

这一步骤应该在拉取镜像之后,因为我这是新建仓库,所有没有镜像可被拉取的,选择直接推一个镜像上去。
docker tag etcd registry.cn-hangzhou.aliyuncs.com/rothschil/local_namespace:v1
docker push registry.cn-hangzhou.aliyuncs.com/rothschil/local_namespace:v1


docker pull registry.cn-hangzhou.aliyuncs.com/rothschil/local_namespace:v1
私有仓库是为了弥补很多场景下,内部安全考虑以及使用外部仓库不便捷的情况下,才考虑使用自行构建私有仓库。构建私有仓库的技术来源于 Docker Registry 。
操作指令如下:
docker run -d -p 5000:5000 --restart=always --name registry -v /data/registry:/var/lib/registry registry:2
registry/var/lib/registry 挂载到宿主机的 /data/registry 目录Docker Registry 的 V2 版本
在推送私有镜像仓库之前,对镜像命名必须符合 IP:Port/repository 格式,我们对需要推送的镜像进行重命名。
docker tag boot_myapp:latest localhost:5000/boot_myapp
docker push localhost:5000/boot_myapp

我上面是推送在虚拟机上,所以在宿主机浏览器中访问虚拟机的端口 http://192.168.147.128:5000/v2/boot_myapp/tags/list。 192.168.147.128 是我虚拟机地址。
http://localhost:port/v2/${images_name}/tags/list

最后一步再查看宿主机的挂载磁盘 /data/registry ,我们的镜像已经发布到本地仓库中了。

上一节我们说到了,我们如何创建一个本地仓库,以及发布一个镜像到我们的本地仓库,这里存在一个问题,就是这个仓库是私有的,却是任何人都可以访问,没有到身份鉴权,所以在实际运用过程中,我们会对私有仓库添加一套身份鉴权操作,保护我们私有仓库的安全。
因为涉及到身份安全,需要一套安全证书,这里使用 openssl 。
mkdir -p /usr/local/registry/certs
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/domain.key -x509 -days 365 -out /usr/local/registry/certs/domain.crt
按照提示录入证书的基本信息即可!

mkdir -p /usr/local/registry/auth
httpd 已安装的则略过本步骤
yum install -y httpd
htpasswd -Bbn root 123456 > /usr/local/registry/auth/htpasswd
此前用 Docker Registry 创建的容器删除,因为此前没有带身份鉴权。
docker rm -f ${CONTAINER ID}
docker run -id --name registry -p 5000:5000 --restart=always \
-v /data/registry:/var/lib/registry \
-v /usr/local/registry/certs:/certs \
-v /usr/local/registry/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry
使用 root/123456 创建的用户名和密码登录即可!
docker login localhost:5000
docker tag redis:4.0.10 localhost:5000/redis:4.0.10
docker push localhost:5000/redis:4.0.10

至此,我们的 Docker 私有化仓库就完成了!