前言
Docker仓库分为公共仓库和私有仓库,下文将搭建Registry仓库,并实现镜像的上传和下载。
目录
1.搭建私有仓库的优点
- 节省网络带宽,针对于每个镜像不用去Docker官网仓库下载;
- 下载Docker镜像从本地私有仓库中下载;
- 组件公司内部私有仓库,方便各部门使用,服务器管理更加统一;
- 可以基于GIT或者SVN、Jenkins更新本地Docker私有仓库镜像版本。
2.registry仓库的构建
2.1 下载Docker registry镜像
[root@zfl ~]# docker pull docker.io/registry
Using default tag: latest
latest: Pulling from library/registry
79e9f2f55bf5: Pull complete
0d96da54f60b: Pull complete
5b27040df4a2: Pull complete
e2ead8259a04: Pull complete
3790aef225b9: Pull complete
Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375
Status: Downloaded newer image for registry:latest
2.2 启动私有仓库容器,启动命令如下
[root@zfl ~]# mkdir -p /data/registry/
[root@zfl ~]# docker run -itd -p 5000:5000 -v /data/registry:/var/lib/registry registry:latest
4ef0d3fac6606b7e2d044c759a780d2acf585fc1eb53d364fed825b7a527bfe6
[root@zfl ~]#
/data/registry/ 创建一个镜像仓库的存放位置
/data/registry:/var/lib/registry 通过目录共享,来实现将仓库的文件同步到本地
2.3 上传镜像至本地私有仓库
出现错误,因为上传的位置是官方的仓库 docker.io/library/nginx
所以我们需要上传的是内网服务器上
仍然报错 本地没有叫做172.24.35.161:5000/nginx的这个镜像名称
因此我们需要把上传的镜像名改成172.24.35.161:5000/nginx ip+nginx
2.4 修改tag号
[root@zfl ~]# docker tag 605c77e624dd 172.24.35.161:5000/nginx:latest
[root@zfl ~]# docker images
172.24.35.161:5000/nginx latest 605c77e624dd 15 months ago 141MB
[root@zfl ~]#
2.5 重新上传
出现报错 告诉我们需要认证https 我们要修改非https的形式
cat /etc/docker/daemon.json
{
"insecure-registries":["172.24.35.161:5000"]
}
[root@itzfl ~]#
重启docker,再次上传
刚刚重启 因为registry这个容器已经关机 需要重新开机
[root@zfl ~]# docker ps -a |grep re
4ef0d3fac660 registry:latest "/entrypoint.sh /etc…" 19 minutes ago Exited (2) About a minute ago flamboyant_hofstadter
[root@zfl ~]# docker start 4ef0d3fac660
4ef0d3fac660
[root@zfl ~]#
在次上传
2.6 镜像检查
[root@zfl ~]# cd /data/registry/
[root@zfl registry]# ls
docker
[root@zfl registry]#
重点:172.24.35.161:5000/nginx:latest 这个ip两次意思 一层是名称 一层是ip url
3.在镜像仓库下载镜像
我们发现下载走的是私有仓库 若不指定url 则会从官方仓库下
在另外一台机器下载本地仓库的镜像
我的仓库配置在阿里云的云服务器上面 第二台机器为虚拟机
[root@itzfl ~]# more /etc/docker/daemon.json
{
"insecure-registries":["101.132.242.188:5000"]
}
[root@itzfl ~]#
因此需要写公网的ip地址
在下载镜像的时候需要pull的是公网的ip 外网ip:5000/nginx
[root@itzfl ~]# docker pull 101.132.242.188:5000/nginx:latest
latest: Pulling from nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3
Status: Downloaded newer image for 101.132.242.102:5000/nginx:latest
101.132.242.188:5000/nginx:latest
我们也可以看到是从指定的仓库下载的
4.查询仓库镜像
[root@zfl ~]# curl -XGET http://172.24.35.161:5000/v2/_catalog
{"repositories":["nginx"]}
[root@zfl ~]# curl -XGET http://172.24.35.161:5000/v2/nginx/tags/list
{"name":"nginx","tags":["latest"]}