docker镜像推送到自己远程仓库服务器上

先搭建一台私仓库换成公网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

 

你可能感兴趣的:(docker,服务器,运维,git)