在推送镜像中出现错误,因为client与Registry交互默认将采用https访问,但我们在install Registry时并未配置指定任何tls相关的key和crt文件,https将无法访问。因此, 我们需要配置客户端的Insecure Registry选项(另一种解决方案需要配置Registry的证书)。
2.3 配置客户端Insecure Registry在客户端中的/etc/sysconfig/docker中修改如下选项:
# 配置Docker执行参数 other_args="--insecure-registry 192.168.202.14:5000" # 重启Docker服务 service docker restart再次执行PUSH镜像操作:
# 推到Registry服务器中 [root@localhost ~]# docker push 192.168.202.14:5000/centos The push refers to a repository [192.168.202.14:5000/centos] (len: 1) 65e4158d9625: Pushed 5506dda26018: Pushed latest: digest: sha256:800f2d4558acd67f52262fbe170c9fc2e67efaa6f230a74b41b555e6fcca2892 size: 2739这时, 推送镜像成功。
2.4 配置Docker Registry管理界面Docker官方只提供了REST API,并没有给我们一个界面。 可以使用Portus来管理私有仓库, 同时可以使用简单的UI管理工具, Docker提供私有库“hyper/docker-registry-web”, 下载该镜像就可以使用了。
docker run -d \ -p 8080:8080 \ --name registry-web \ --link registry-srv \ -e REGISTRY_URL=http://registry-srv:5000/v2 \ -e REGISTRY_NAME=localhost:5000 \ hyper/docker-registry-web详情请参照:Docker hub
2.5 配置Docker Registry签名证书在Docker Registry主机中生成OpenSSL的自签名证书:
cat << EOF > ssl.conf [ req ] prompt = no distinguished_name = req_subj x509_extensions = x509_ext [ req_subj ] CN = Localhost [ x509_ext ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer basicConstraints = CA:true subjectAltName = @alternate_names [ alternate_names ] DNS.1 = localhost IP.1 = 192.168.202.14 EOF sudo mkdir /certs # 生成证书文件 sudo sh -c "openssl req -config ssl.conf \ -new -x509 -nodes -sha256 -days 365 -newkey rsa:4096 \ -keyout /certs/server-key.pem -out /certs/server-crt.pem"生成cert文件后,用以下命令来启动Docker Registry私有仓库。
docker rm -f registry docker run -d \ -p 5000:5000 \ --name registry \ --restart=always \ -v /var/lib/registry:/var/lib/registry \ -v /certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2.3.0
证书生成好了,客户端现在就不需要 --insecure-registry 了,但是由于这是自签名证书,客户端还需要把证书文件复制过去并配置证书文件:
Docker Registry所在本机操作
sudo mkdir -p /etc/docker/certs.d/192.168.202.14:5000 sudo cp /certs/server-crt.pem /etc/docker/certs.d/192.168.202.14:5000/ca.crt sudo service docker restartDocker客户端操作
sudo mkdir -p /etc/docker/certs.d/192.168.202.14:5000 sudo scp root@192.168.202.14:/certs/server-crt.pem /etc/docker/certs.d/192.168.202.14:5000/ca.crt sudo service docker restart 2.6 配置Docker Registry认证