Docker 仓库之单机 Docker Registry
-
Docker Registry 作为 Docker 的核心组件之一负责镜像内容的存储与分发,客户端的 docker pull 以及 push 命令都将直接与 registry 进行交互,最初版本的 registry 由Python实现,由于设计初期在安全性,性能以及API的设计上有着诸多的缺陷,该版本在 0.9 之后停止了开发,由新的项目 distribution(新的 docker register 被称为 Distribution)来重新设计并开发下一代 registry,新的项目由 go 语言开发,所有的 API,底层存储方式,系统架构都进行了全面的重新设计已解决上一代 registry 中存在的问题,2016 年 4 月份 rgistry 2.0 正式发布,docker 1.6 版本开始支持 registry 2.0,而八月份随着 docker 1.8 发布,docker hub 正式启用 2.1 版本 registry 全面替代之前版本 registry,新版 registry 对镜像存储格式进行了重新设计并和旧版不兼容,docker 1.5 和之前的版本无法读取 2.0 的镜像,另外,Registry 2.4 版本之后支持了回收站机制,也就是可以删除镜像了,在 2.4 版本之前是无法支持删除镜像的,所以如果你要使用最好是大于 Registry 2.4 版本的,目前最新版本为 2.7.x。
-
官方 github 地址:https://github.com/docker/distribution
-
本部分将介绍通过官方提供的 docker registry 镜像来简单搭建一套本地私有仓库环境。
下载docker registry镜像
搭建单机仓库
创建授权使用目录
//创建一个授权使用目录
mkdir -pv /docker/auth
创建用户
//确定工作目录
pwd
/docker
//创建一个用户并生成密码
docker run --entrypoint htpasswd registry -Bbn jack 123456 > auth/htpasswd
验证用户密码
//验证密码
cat auth/htpasswd
jack:$2y$05$L3CrA2dTPKEaMBwVZg9YP.WcZhaLswy.TUo434e0EycEWe5dlQzSO
启动docker registry
//启动
docker run -d -p 5000:5000 --restart=always --name registry1 -v /docker/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
验证端口和容器
测试登录仓库
报错如下
解决方法
- 编辑各 docker 服务器/lib/systemd/system/docker.service 配置文件如下
//确定工作目录
pwd
/lib/systemd/system/docker.service
//编辑修改
vim /lib/systemd/system/docker.service
...省略...
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.26.207:5000
...省略...
//重启docker
systemctl daemon-reload
systemctl restart docker
验证个docker服务器登录
- server1
- server2
在Server1登陆后上传镜像
镜像打tag
- docker tag centos-base:v1 192.168.26.207:5000/jack/centos-base:test
上传镜像
- docker push 192.168.26.207:5000/jack/centos-base:test
在Server2下载镜像并启动容器
登录并从docker registry下载镜像
- docker pull 192.168.26.207:5000/jack/centos-base:test
验证镜像下载成功
- docker images
从下载的镜像启动容器
- docker run -d --name docker-registry -p 80:80 192.168.26.207:5000/jack/centos-base:test bash
验证容器启动
- docker ps