先搭建一台私仓库换成公网id,就是公有
# 1、拉取私有仓库镜像
docker pull registry
# 2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
# 4、修改daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己仓库服务器真实ip
{"insecure-registries":["服务器ip:5000"]}
# 5、重启docker 服务
systemctl restart docker
docker start registry
远程服务器推送上来
远程服务器修改vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://ip:5000"],
"insecure-registries":["ip:5000"]
}
重新启动ok
systemctl daemon-reload
systemctl restart docker
注意多台机器都需要配置上
{
"registry-mirrors": ["https://ip:5000"],
"insecure-registries":["ip:5000"]
}
拉取远程仓库
docker pull 服务器公网ip:5000/nginx
# 1、标记镜像为仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
docker tag nginx ip:5000/nginx
# 2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
docker push ip:5000/nginx
如果编写每一台都不想配置,需要配置https
{
"registry-mirrors": ["https://ip:5000"],
"insecure-registries":["ip:5000"]
}
配置下面TLS认证前,先配置这个,不然报错,报错。(如果先配置了下面,回头配置这个,下面重新配置一遍)
Get "https://ip:5000/v2/": x509: cannot validate certificate for ip because it doesn't contain any IP SANs
修改cd /etc/pki/tls/openssl.cnf
加
[ v3_ca ]
subjectAltName = IP:IP真实地址
配置https,跟着输入就可以
通过创建证书自带的TLS认证
1、创建文件夹
mkdir -p /opt/docker/registry/certs
2、生成证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /opt/docker/registry/certs/domain.key -x509 -days 365 -out /opt/docker/registry/certs/domain.crt
3、跟着输入
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:shanghai
Locality Name (eg, city) [Default City]:shanghai
Organization Name (eg, company) [Default Company Ltd]:kj
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your server's hostname) []:
Email Address []:
4、查看证书
ll /opt/docker/registry/certs/
可以看到
-rw-r--r-- 1 root root 1944 Aug 20 11:04 domain.crt
-rw-r--r-- 1 root root 3272 Aug 20 11:04 domain.key
5、创建带有TLS认证的registry容器
docker run -d --name registry2 -p 5000:5000 -v /opt/docker-registry/:/var/lib/registry -v /opt/docker/registry/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2
好了,可以https://ip:5000/v2/_catalog访问了
其它服务器pull报错x509: certificate signed by unknown authority
配置后可以无需重启docker
在/etc/docker/certs.d/ 文件夹下,如果没有certs.d文件夹,请创建
在里面创建文件夹docker.dev.com:8443 ,自己访问的域名或ip,如127.0.0.1:5000访问,创建127.0.0.1:5000文件夹,证书放里面就可以了
如果默认是443端口的话,不需要添加端口号,把client.crt放进文件夹里面即可。
注意只拷贝client.crt,如果domain.key一起拷贝进去会报错误
下面的参考
要注意挂载目录是/data/certs,请修改成你证书的路径,只有这样在容器里面才可以找到证书。
端口号443被占用的话,可以使用8443
docker run -d \
--restart=always \
--name registry8443 \
-v /data/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/docker.dev.com.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/docker.dev.com.key \
-p 8443:443 \
registry:2.6.2
然后docker logs registry8443 看看是否启动正常
然后使用docker pull docker.dev.com:8443里面的镜像或者push镜像到仓库的话会提示证书问题。
接下来就是证书信任配置了,配置后可以无需重启docker
把docker.dev.com.crt 拷贝重命名成client.crt
然后在/etc/docker/certs.d/ 文件夹下,如果没有certs.d文件夹,请创建
在里面创建文件夹docker.dev.com:8443 ,自己访问的域名或ip,如127.0.0.1:5000访问,创建127.0.0.1:5000文件夹,证书放里面就可以了
如果默认是443端口的话,不需要添加端口号,把client.crt放进文件夹里面即可。
注意只拷贝client.crt,如果domain.key一起拷贝进去会报错误
创建文件夹mkdir
复制cp