Docker镜像仓库(Repository)负责镜像文件的存储和分发的工作,也被称为registry;是Docker客户端执行pull和push操作时,都是和Docker进行仓库进行交互,而实现从仓库获取和保持镜像的交互过程。Docker的官方镜像仓库就是我们经常提到的Docker的Hub官网。 在Docker客户端,执行docker info命令,就可以查询到我们的docker客户端里配置的镜像仓库的地址;
如图中所显示的,Registry: https://index.docker.io/v1/ 这个实际上对应的就是Docker的官方仓库;在我们的实际使用docker的过程中,只是从官方的docker仓库里获取或者保存镜像文件可能不能满足我们的需求;或者是本身我们的镜像只是私有使用的;在这样的场景里,我们就需要建立自己的私有仓库。
今天的这个文章,咱们要讲的就是部署私有镜像仓库的实战过程;
在目前的docker镜像仓库的产品里,有几个主流产品,包括Docker registry(Distribution), Harbor和Nexus。 今天我们这里主要介绍其中的Docker Registry和Nexus这两个产品。
Docker registry
Docker registry(Distribution)是Docker公司自带的产品,完全支持Registry的API;最初版本的registry由python实现,该版本在0.9之后停止了开发, 由新的项目distribution(新docker register(也被称为Distribution,在Docker的开源项目组里可以找到该项目);Distribution项目由Golang实现。
可以通过docker registry的镜像文件,来部署Docker registry作为我们的私有仓库;
1. 下载docker registry的镜像文件
[root@XNode01 ~]# docker pull registry
2. 准备权限配置文件
[root@XNode01 ~]# mkdir -p /data/registry/auth
3. 安装httpd-tools并产生密码文件
- [root@XNode01 ~]# yum install -y httpd-tools
- [root@XNode01 ~]# htpasswd -Bbn admin 123456 > /data/registry/auth/htpasswd
4. 启动registry
- [root@XNode01 ~]# docker container run -p 5000:5000 --restart=always \
- --name registry \
- -v /data/registry/auth/:/auth \
- -e "REGISTRY_AUTH=htpasswd" \
- -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
- -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
5. 通过浏览器验证
访问http://ip:5000/v2/_catalog地址
输入admin和123456; 刚才的htpasswd文件就是记录的这个用户和密码
目前没有镜像文件,返回的是空的内容
备注: 特别注意:由于咱们现在启动的registry是不支持https访问的,默认情况下。docker客户端在和镜像仓库进行交互是使用https协议的。 我们可以设置docker的daemon设置,让其也可以通过http和镜像仓库进行访问。
修改/etc/docker/daemon.json文件,如果没有此文件,可以创建; 加入以下内容
"insecure-registries": ["192.168.56.102:5000"]
6 通过Docker客户Push命令进行验证
- [root@XNode01 ~]# docker login 192.168.56.102:5000
- Username: admin
- Password:
在交互环境里,输入admin和123456; 登录成功
用registry这个镜像来做push的测试; 先要修改tag
- [root@XNode01 ~]# docker image tag registry 192.168.56.102:5000/registry
- [root@XNode01 ~]# docker image ls
推送修改后的tag
[root@XNode01 ~]# docker image push 192.168.56.102:5000/registry
再次访问http://ip:5000/v2/_catalog地址; 进行验证
新push上去的镜像已经展示到这个地方了。
7. 测试pull功能,从私有仓库192.168.56.102:5000里下载镜像
先删除掉docker机器上已经有的原镜像
[root@XNode01 ~]# docker image rm 192.168.56.102:5000/registry
测试下载命令
- [root@XNode01 ~]# docker image pull 192.168.56.102:5000/registry
- Using default tag: latest
- latest: Pulling from registry
- Digest: sha256:6f86956ed3802764cf98f5f20ed549a649ffd1f24fb273aef48748da5531b576
- Status: Downloaded newer image for 192
至此,使用Docker registry部署私有的镜像仓库成功完成。
这篇文章,记录了有关使用Docker Registry进行私有Docker仓库的安装实战过程; 并进行了Pull和push的测试。 在下一个文章里,我们会介绍另一个使用非常广泛的另一个Registry产品Nexus, Nexus不仅支持全面的Docker Registry V1.0和V2.0接口标准;还拥有简单而方便的操作界面,和更强大的管理支持。 敬请各位朋友下一期关注。