目录
介绍
大多数IT公司都不会向生产系统提供互联网设施,但Docker hub需要互联网,而且安全性较低(所有人都可以使用)。为了保护我们的Docker镜像,我们必须在私有Docker注册表中本地化保存图像。
当我们的环境中有大量的docker主机时,在内部网络中创建我们自己的私有Docker 注册表有助于我们从私有服务器管理映像,而无需为docker客户端提供Internet访问。
必要条件
- Docker注册表主机:k8s-master.com
- 客户:k8s-client.com
- 操作系统:CentOS
- Docker版本:18.06
- Internet:需要在注册表服务器上从Docker hub中提取映像
注意:对于Docker私有注册表,Docker注册表和客户机都必须安装Docker。
私有Docker注册表设置
1、如果您没有TTL证书,请创建一个目录并将TTL证书放在该目录中,创建SSL证书以保护我们的Docker私有注册表:
mkdir -p /data/certs
cp domain.crt domain.key /data/certs/
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout /data/certs/domain.key \
-x509 -days 365 -out /data/certs/domain.crt (if you don't have original TTL Certificates).
2、创建一个存储Docker镜像的目录:
mkdir -p /data/images
3、在docker主机中运行Docker注册表容器:
docker run -d -p 6000:5000 \
-v /data/images:/var/lib/registry \
-v /data/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
--restart on-failure \
--name registry \
docker.io/registry
4、检查主机上的Docker注册表容器状态和linux中的侦听端口:
docker ps
netstat -tulpn | grep 6000
5、从Docker hub中提取图像并将其推送到私有Docker hub:
docker pull nginx
docker tag nginx localhost:6000/nginx
6、验证Docker镜像是否已推送到私有注册表:
ll data/images/docker/registry/v2/repositories/
7、将TTL证书从主机复制到客户端计算机:
scp -r /data/certs/* <IP-Addr-Clent>:/root/
客户机上需要的操作
1、Docker客户端使用我们的TTL / SSL证书。
mkdir -p /etc/docker/certs.d/k8s-master.com:6000/
cp -rf /root/tcsmkrishi.crt /etc/docker/certs.d/k8s-master.com:6000/
2、从docker私有注册表中提取图像并使用它。
docker pull k8s-master.com:6000/nginx
docker push k8s-master.com:6000/nginx
原文地址:https://www.codeproject.com/Tips/1277381/Docker-Private-Registry-on-CentOS