Docker私有仓库部署
目录
前言
Docker官方镜像仓库时一个管理公共镜像的地方,用户可以在上面找到自己想要的镜像,也可以把自己的镜像推送上去。但是,有时候服务器无法访问互联网,用户不希望将自己的镜像放到互联网上,就需要用到Docker Registry私有仓库,它用来存储和管理用户自己的镜像。
为什么需要搭建私有仓库?
(1)我们从公共仓库上下载拉取和上传镜像速度受网络影响,有时甚至官网页面都打不开。
(2)从自己搭建的私有仓库里下载和上次镜像,稳点迅速,不受互联网等因素的影响。
实验环境
(1)注册服务器: Linux ,Docker(已安装),提供的镜像 ;
(2)客户端:Linux ,Docker(已安装),从注册服务器上拉取镜像,或将本地镜像推送到注册服务器上。
(3)注册服务器配置如下:
主机名被设置为registry-server , IP地址设置为:192.168.182.12 , 与互联网连接正常:
(4)Docker主机配置如下:
主机名被设置为docker-server, IP地址被设置为192.168.182.13, 未连接互联网:
vi /etc/resolv.conf # 修改 resolv.conf ,注释# nameserver 192.168.182.2,断开互联网连接
(5)2台Linux(都安装有docker),一台可以连接互联网,另一台只能访问局域网,两台Linux可以ping通。
步骤一:拉取镜像 registry
docker pull registry # 拉取registry镜像(内置了搭建私有仓库运行程序)
步骤二:修改配置文件 daemon.json
(1)配置daemon.json,去掉dockers默认的https的访问
vim /etc/docker/daemon.json # 里面是一个json对象,添加insecure-registries,修改为主机registry-server的IP
# registry-mirrors 为设置为国内阿里镜像源
# Insecure Registries:表示私有仓库地址,本次案例配置的私有仓库地址为 192.168.182.12:5000
(2)修改文件完成后,重新载入配置,重启docker:
systemctl daemon-reload # 重新载入配置
systemctl restart docker # 重启docker服务
步骤三:启动registry容器
在注册服务器 registry-server 主机上从公共仓库拉取一个名为registry1的镜像,利用镜像运行容器,且在运行容器时,将宿主机的端口5000映射到容器内开放的端口5000,将宿主机/opt/data/registry 目录。
[root@registry-server ~]# docker run -itd -p 5000:5000 -v /opt/data/registry/:/var/lib/registry --restart=always registry:latest
#(1)--restart=always 表示当docker服务启动时候,registry容器会自动运行
#(2)主机:容器 映射,挂载(主机没有会自动创建文件)
步骤四:测试是否启动容器
如果返回{“repositories”:[]}, 代表启动成功了。
[root@registry-server ~]# curl http://192.168.182.12:5000/v2/_catalog # 由于仓库内没有任何镜像存储,所以当前仓库内的内容是空的
步骤五:测试上传到我们自己的私有仓库registry
在注册服务器 registry-server主机上,已拉取了若干用于测试结果的镜像,现在将这两个镜像的标签修改如下(注意修改后的镜像名和标签的设置)
(1) 将nginx这个镜像重命名tag
[root@registry-server ~]# docker tag nginx:1.16 192.168.97.200:5000/nginx:01
docker images 查看结果:
(2)将测试镜像推送到仓库
这里需要注意的是重命名的tag必须带有建立192.168.182.100:5000/这个前缀,后面的nginx:01是新的镜像口。然后开始进行push到我们建立的私有registry
[root@registry-server ~]# docker push 192.168.182.12:5000/nginx:01
再次运行:如果返回{“repositories”:[]},说明已经push到了自己registry
[root@registry-server ~]# curl http://192.168.182.12:5000/v2/_catalog
步骤六:在其他物理机docker主机pull这个镜像
(1)修改配置
同样需要在安装docker,然后再/etc/docker/daemon.json这个文件中添加insecure-registries
# IP地址需要更改: 格式:{“insecure-registries”:[“ip地址:端口号”]}
{
“insecure-registries”:[“192.168.182.12:5000”]
}
(2)然后重启docker,执行
[root@docker-server ~]# systemctl daemon-reload # 重新载入配置
[root@docker-server ~]# systemctl restart docker # 重启docker
(3)拉取镜像
[root@docker-server ~]# docker pull 192.168.182.12:5000/nginx:01
结果如下:
至此,一个简单的本地私有仓库即配置完成。