如果要为企业创建自定义Docker映像,则在托管Docker映像的位置有两个选择:
- Docker中心 –此托管的注册表服务是免费的,由Docker Inc.提供。它们还具有多种企业级功能,您可以在其中为组织创建多个帐户,设置自动构建等。
- 自托管Docker注册表–您可以在组织内设置将托管您自己的Docker映像的Docker注册表。
本教程说明了如何设置安全的自托管Docker注册表。
1.设置TLS证书和密钥
将您现有的crt和密钥文件复制到〜/ docker-certs目录
# mkdir /root/docker-certs # cd /root/docker-certs # ls -1 thegeekstuff.crt thegeekstuff.key intermediateCA.pem
在这个例子中,我’m使用thegeekstuff.crt证书文件和为我的Apache Web服务器生成的thegeekstuff.key文件。
有关如何创建自己的证书和密钥文件的详细信息,请参考以下内容: 如何生成SSL密钥,CSR和自签名证书
2.管理中级证书文件
在这种情况下,我还获得了来自证书颁发机构的中级证书。
对于docker Registry,您应该将证书和中间证书都合并到同一证书文件中。
即,将中间证书捆绑包的内容添加到证书文件中,如下所示。
cd /root/docker-certs cat intermediateCA.pem >> thegeekstuff.crt
3.启动您的安全Docker注册表
现在,如下所示启动您的安全Docker注册表。
docker run -d -p 5000:5000 --restart=always --name 注册表 \ -v /root/docker-certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/root/docker-certs/thegeekstuff.crt \ -e REGISTRY_HTTP_TLS_KEY=/root/docker-certs/thegeekstuff.key \ 注册表:2
在上面的命令中:
- Docker注册表在端口5000上开始使用
- 该Docker容器的名称为“registry”
- 包含证书/ root / docker-certs的本地目录在docker Registry容器内被映射为/ certs
- REGISTRY_HTTP_TLS_CERTIFICATE变量指向具有完整路径的证书文件名
- REGISTRY_HTTP_TLS_KEY变量指向具有完整路径的密钥文件名
启动Docker注册表后,您将’现在将看到注册表容器正在运行,如下所示:
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fe9c78c51ec1 注册表:2 "/entrypoint.sh /etc/" 30 seconds ago Up 2 seconds 0.0.0.0:5000->5000/tcp 注册表
4.访问您的安全Docker注册表
设置安全的Docker注册表后,您可以从网络内部(或网络外部)的其他服务器访问它,并在其上使用所有标准docker命令。
例如,您可以如下所示将映像推入或拉出到此安全的docker注册表。
docker pull thegeekstuff.com:5000/mongodb docker push thegeekstuff.com:5000/mongodb
5.设置InSecure Docker注册表
注意:如果您在使用安全Docker注册表时遇到麻烦,出于调试目的,请在不使用证书的情况下启动注册表,并查看其工作方式,如下所示:
docker run -d -p 5000:5000 --restart=always --name 注册表 注册表:2
当您尝试从Docker注册表中拉取映像(或执行任何其他操作)时,您可能会获得以下内容“收到的超大记录长度” error message.
例如,当我在远程服务器上(而不是在安装了Docker注册表的服务器上)执行以下命令时,出现以下错误消息:
# docker pull 192.168.101.1:5000/mongodb Using default tag: latest Error response from daemon: Get //192.168.101.1:5000/v1/_ping: tls: 收到的超大记录长度 20527
在这种情况下,192.168.101.1是运行不安全的Docker注册表的服务器(即没有安全证书)。
在这种情况下,应在远程服务器上允许不安全的注册表操作。为此,您必须通过“–insecure-registry”DOCKER_OPTS环境变量的参数。
在远程服务器上,修改此文件并添加以下行:
vi /etc/default/docker DOCKER_OPTS="--insecure-registry 192.168.101.1:5000"
现在,在远程服务器上重新启动泊坞窗。
systemctl daemon-reload systemctl stop docker systemctl start docker
现在,由于设置了不安全的注册表选项,因此docker pull(或其他docker命令)将可以正常工作。
docker pull 192.168.101.1:5000/mongodb
如果您喜欢这篇文章,您可能还会喜欢..
![]() |
![]() |
![]() |
![]() |