把自己的镜像上传到公共仓库有很大风险,速度有时候也慢,搭建自己的仓库调试起来速度也快很多。
有harbor和registry两个方案,由于本人非正规化流程化大规模使用,所以用的是registry,harbor方式不做介绍。
一、本地单机仓库
拉取镜像
docker pull registry
修改地址,如果没有daemon.json文件,创建个新的
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["http://192.168.1.81:5000"]
}
重启docker
systemctl daemon-reload
systemctl restart docker
打开5000端口
firewall-cmd --zone=public --add-port=5000/tcp --permanent
firewall-cmd --reload
启动镜像本地/home/server/docker_repo目录挂载到虚拟目录/var/lib/registry
docker run -d -v /home/server/docker_repo:/var/lib/registry -p 5000:5000 --name myregistry registry:latest
修改tag
docker tag sapp 192.168.1.81:5000/sapp
上传
docker push 192.168.1.81:5000/sapp
下载
docker pull 192.168.1.81:5000/sapp
二、局域网及外网仓库
1、环境
1.1、2台物理机,仓库搭建在81上
仓库 | IP | 简称 | 系统 |
---|---|---|---|
是 | 192.168.1.81 | 81 | centos7.5 |
否 | 192.168.1.91 | 91 | centos7.5 |
1.2、二级域名一个
如果不需要外网访问,可以不用二级域名。
由于笔者使用的是TP-LINK的路由器,所以直接申请的是tpddns的二级域名,当然也可以使用花生壳。测试环境准备好的域名是,lucien.tpddns.cn
1.3、测试环境
已经搭建过swarm集群环境,其中81作为master
2、搭建
以下操作均在81上进行,如果在91上进行会添加说明。
2.1、认证
创建证书,其中Common Name填写自己的二级域名:lucien.tpddns.cn
mkdir -p certs && openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/tpddns.key \
-x509 -days 99999 -out certs/tpddns.crt
创建认证目录
mkdir auth
创建账号user91和密码password91
docker run --entrypoint htpasswd registry:latest -Bbn user91 password91 > auth/htpasswd
把tpddns.crt证书copy到81、91的/home目录
在所有的集群物理机上(包括81和91)创建证书存放目录
mkdir -p /etc/docker/certs.d/lucien.tpddns.cn:5000
在81和91上拷贝证书到docker的认证目录
cp /home/tpddns.crt /etc/docker/certs.d/lucien.tpddns.cn\:5000/
在81和91上修改地址,如果没有daemon.json文件,创建个新的
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["http://lucien.tpddns.cn:5000"]
}
2.2、端口和路由转发
打开81的5000端口
firewall-cmd --zone=public --add-port=5000/tcp --permanent
firewall-cmd --reload
2.2.1、外网配置
在路由器里映射端口,把外网的5000端口映射到本地局域网内的81物理机上。操作路径:
应用管理——>虚拟服务器——>添加

2.2.2、内网配置
如果没有二级域名或者路由器等条件,可以自行修改各自主机的host配置,添加一个本地的虚拟域名映射到81的IP上,具体操作这里不再介绍。
2.3、建立仓库
启动registry,注意自己的auth目录、certs证书目录、仓库存放目录挂载地址。
docker run -d -p 5000:5000 --restart=always --name myregistry \
-v /home/server/docker_repo/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v /home/server/docker_repo/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/tpddns.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/tpddns.key \
-v /home/server/docker_repo:/var/lib/registry \
registry:latest
在81、91上登录,输入刚才创建的账号密码user91,password91
docker login lucien.tpddns.cn:5000
3、测试
创建nginx的副本镜像,并且修改tag
docker tag nginx:latest lucien.tpddns.cn:5000/sapp:v2
上传到私有仓库
docker push lucien.tpddns.cn:5000/sapp:v2
编写swarm环境的配置文件sapp-compose.yml
version: "3.7"
services:
sapp: #服务名,自定义
image: lucien.tpddns.cn:5000/sapp:v2 #镜像名,自己build或者改tag
ports:
- 18080:80 #映射物理机的18080端口
networks:
- sapp_overlay_network #使用网络名称
deploy:
mode: replicated
replicas: 5 #启动5个container
networks:
sapp_overlay_network:
部署,注意加上--with-registry-auth参数,否则91上无法下载image
docker stack deploy -c sapp-compose.yml sapp --with-registry-auth
反部署
docker stack down sapp
网友评论