如何快速搭建并使用一个Docker私有化本地仓库发布应用
Contents
- 1 一 背景说明
- 2 二 配置流程
- 2.1 1 DMZ主机安装启动docker
- 2.2 2 DMZ主机创建仓库存放image路径
- 2.3 3 修改DMZ主机/etc/docker/daemon.json
- 2.4 4 DMZ主机重启docker服务
- 2.5 5 启动container
- 2.6 6 DMZ主机从公网私有仓库pull images
- 2.7 7 生成打tag的脚本
- 2.8 8 给image打成新的tag
- 2.9 9 push到本地私有仓库
- 2.10 10 应用服务器修改/etc/docker/daemon.json
- 2.11 11 应用服务器重启docker
- 2.12 12 应用服务器从DMZ主机私有仓库pull image
- 2.13 13 应用服务器启动应用
- 3 三小结
- 4 四 参考
一 背景说明
有些要求私有化部署应用系统的客户,不允许应用服务器直接访问公网,只有部分DMZ(Demilitarized Zone)区域的机器可以访问外网。
而我们的应用系统的docker image通常都是放在互联网上的私有仓库里,这样,我们不能在应用服务器上直接pull image并run container。
于是,有了”曲线救国”的线路来部署应用系统:
- DMZ机器上部署docker 私有仓库;
- 在DMZ机器上从我们的互联网私有仓库上pull image;
- 给pull下来的image打成私有仓库地址格式的image;
- push image到私有仓库地址;
- 应用服务器从DMZ机器上的docker 私有仓库pull image;
- 最后再在应用服务器上启动docker容器应用。
二 配置流程
1 DMZ主机安装启动docker
yum install docker
systemctl start docker
systemctl enable docker
2 DMZ主机创建仓库存放image路径
该路径在DMZ机器上,挂载到下一步创建的docker container里,用于存放本地私有仓库images。
mkdir -p /data/registry
3 修改DMZ主机/etc/docker/daemon.json
修改/etc/docker/daemon.json为下述内容,因为默认情况下,docker 私有仓库不允许HTTP协议push和pull images。
这里的IP地址为,DMZ机器的实际IP地址。
{
"insecure-registries": [
"10.248.4.8:5000"
]
}
4 DMZ主机重启docker服务
systemctl restart docker
5 启动container
这里docker官方提供了一个image,registry用于启动1个container,用作私有仓库。
docker run -d --restart=always -p 5000:5000 -v /data/registry:/var/lib/registry registry
6 DMZ主机从公网私有仓库pull images
docker pull registry.cn-hangzhou.aliyuncs.com/xxx/onlyou-common-service:2022-1-26_1
通常有很多个docker images,我们可以先全部pull下来。
7 生成打tag的脚本
docker images|grep registry.cn|awk '{print "docker tag " $1 "\:" $2 " 10.248.4.8:5000/" $1 "\:" $2 }'
输出结果类似于下述:
docker tag registry.cn-hangzhou.aliyuncs.com/xxx/onlyou-common-service:2022-1-26_1 10.248.4.8:5000/registry.cn-hangzhou.aliyuncs.com/onlyou/onlyou-common-service:2022-1-26_1
然后,把上述输出脚本,再进行加工一下,类似于下述:
docker tag registry.cn-hangzhou.aliyuncs.com/xxx/onlyou-common-service:2022-1-26_1 10.248.4.8:5000/onlyou-common-service:2022-1-26_1
8 给image打成新的tag
执行上述脚本的结果即可。
9 push到本地私有仓库
[root@iZ2zeffxqi2pnlas58gadrZ ~]# docker push 10.248.4.8:5000/onlyou-common-service:2022-1-26_1
The push refers to a repository [10.248.4.8:5000/onlyou-common-service]
7195d293c349: Pushed
e5262db88ace: Pushed
571ae0d6961a: Pushed
518c9e7eb326: Pushed
c3ebb2aa7787: Pushed
9c2e8b91bfa8: Pushed
c477b6c8ca45: Pushed
fa0c3f992cbd: Pushed
ce6466f43b11: Pushed
719d45669b35: Pushed
3b10514a95be: Pushed
2022-1-26_1: digest: sha256:96a21daa0b4c54e2c0db50f162c3d73fc4313bbca776d3311d4a2f603f8e1830 size: 2630
[root@iZ2zeffxqi2pnlas58gadrZ ~]#
10 应用服务器修改/etc/docker/daemon.json
内容为跟第3步骤的内容一样,原因是,告诉docker我这个私有仓库是安全的,可以直接用HTTP协议来pull images。
11 应用服务器重启docker
systemctl restart docker
12 应用服务器从DMZ主机私有仓库pull image
重启docker之后,可以直接执行docker pull 10.248.4.8:5000/onlyou-common-service:2022-1-26_1
13 应用服务器启动应用
三小结
这里是一个简单快速的思路,注意,由于在私有化环境部署,网络不畅通的情况下,一种变通的方式,快速pull images。
待处理的问题是私有仓库没有配置HTTPS验证,留作后续再研究测试。
四 参考
https://cloud.tencent.com/developer/article/1639614
https://yeasy.gitbook.io/docker_practice/repository/registry_auth