首页 > 其他分享 >不重启Docker能添加自签SSL证书镜像仓库吗?

不重启Docker能添加自签SSL证书镜像仓库吗?

时间:2023-08-16 17:12:47浏览次数:42  
标签:自签 cn 仓库 openssl SSL 镜像 docker com Docker

应用背景

在企业应用Docker规划初期配置非安全镜像仓库时,有时会遗漏一些仓库没配置,但此时应用程序已经在Docker平台上部署起来了,体量越大就越不会让人去直接重启Docker。

那么,不重启Docker能添加自签SSL证书镜像仓库吗?

可以,在文中会找到答案。

实现思路

实现思路来自Docker官网(https://docs.docker.com/registry/insecure/),大意是通过复制镜像仓库的自签证书到操作系统目录,或者到docker的配置目录中。这样就可实现不重启使用该仓库了。

这里有个问题是:“某些情况下,例如镜像仓库不是我们搭建的 或 拿不到证书,这时候怎么办?”

基于命令是可以拿得到的

实现方式

命令行

通过openssl输出X.509证书到docker证书目录中实现需求。

# 创建镜像仓库证书目录,xxx.com.cn需替换为镜像仓库域名,如端口非443则需要追加:port
mkdir -p /etc/docker/certs.d/xxx.com.cn

# 使用openssl获取镜像仓库的X.509证书,写入刚创建目录下文件中,如端口非443则需替换
echo -n | openssl s_client -connect xxx.com.cn:443 2>/dev/null | openssl x509 > /etc/docker/certs.d/xxx.com.cn/ca.crt

# 测试登录、拉取等操作
docker login xxx.com.cn
docker pull xxx.com.cn/somepath/nginx:latest

示例:

mkdir -p /etc/docker/certs.d/harbor.test.com.cn:5000

echo -n | openssl s_client -connect harbor.test.com.cn:5000 2>/dev/null | openssl x509 > /etc/docker/certs.d/harbor.test.com.cn:5000/ca.crt

docker login harbor.test.com.cn:5000

Shell脚本

cat > add-insecure-repo.sh <<EOF
#/bin/bash
if [ "\$1x" == "x" ]; then
	echo "请输入镜像仓库地址";
	exit;
fi

REPO=\$1
HAS443="false"
#包含:443需去除
if [[ "\$1" =~ ":443" ]]; then
	REPO=\${1%:443*}
	HAS443="true"
fi
#包含https://需去除
if [[ "\$REPO" =~ "https://" ]]; then
	REPO=\${REPO#*https://}
fi

mkdir -p /etc/docker/certs.d/\$REPO
if [[ "\$HAS443" == "true" ]]; then
	echo -n | openssl s_client -connect \$REPO:443 2>/dev/null | openssl x509 > /etc/docker/certs.d/\$REPO/ca.crt
else
	echo -n | openssl s_client -connect \$REPO 2>/dev/null | openssl x509 > /etc/docker/certs.d/\$REPO/ca.crt
fi
EOF

# 执行示例
sh add-insecure-repo.sh harbor.test.com.cn:5000

写作不易,如果有用就点个赞再走呗!~

参考:

标签:自签,cn,仓库,openssl,SSL,镜像,docker,com,Docker
From: https://www.cnblogs.com/hellxz/p/17635617.html

相关文章

  • 第四:Docker容器的管理
    运行第一个容器:交互式启动(-i):dockercontainerrun-it32 (32为image的ID)守护式启动:(-d) :  dockercontainerrun--name="nginx"-d605c77e624dd  起容器的时候同时设置容器的名称为mysql容器启动后:第一:我想查询下容器的状态   dockercontainerls-a  ......
  • docker创建镜像commit
    为了让Tomcat镜像中的webapp文件能够正常使用,首先进入Tomcat内,使用cp将文件复制到webapps中,如何为了方便下次能够直接使用使用dockercommit命令发布Tomcat02镜像dockercommit-a="zhangzheng" -m="addwebappsapp"f2c270921fa9tomcat02:1.0注:只是提交到了本地 ......
  • Docker 网络和资源控制
    Docker网络保证容器提供服务,确保网络的通信。资源控制确保宿主机不被容器抢占所有资源。目录一、Docker网络实现原理二、Docker的网络模式三、CPU资源控制四、总结     一、Docker网络实现原理1.Docker网络实现原理(1)Docker使用Linux桥接,......
  • openssl 常用命令
    openssl是目前最流行的SSL密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL(Secure Sockets Layer)/TLS(Transport Layer Security)协议的实现官网:https://www.openssl.org/source/#生成RSA私钥(无加密)opensslgenrsa2048>rsa_private.key......
  • docker命令学习
    docker镜像命令:                      退出:exit           退出但是不停止运行:Ctrl+p+q 删除容器:rm容器iddockerimages  查看镜像dockersearch 镜像名称 ......
  • Docker镜像
    测试FROM指定基础镜像所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个nginx镜像的容器,再进行修改一样,基础镜像是必须指定的。而FROM就是指定基础镜像,因此一个Dockerfile中FROM是必备的指令,并且必须是第一条指令。除了选择现有镜像为基......
  • 基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程
    (基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程)1Jenkins是什么?学习官网:Jenkins官网,Jenkins中文官网;Jenkins是一款开源CI&CD软件,用于自动化各种任务,包括构建、测试和部署软件;用Java语言编写的,可在Tomcat、Docker等流行的容器中运行,也可独立运行。......
  • 利用Docker简化机器学习应用程序的部署和可扩展性
    利用Docker的强大功能:简化部署解决方案,确保可扩展性,并简化机器学习模型的持续集成/持续交付(CI/CD)流程。机器学习(ML)近年来取得了爆炸性增长,导致对稳健、可扩展和高效部署方法的需求增加。传统方法往往需要帮助将ML模型操作化,原因包括训练和服务环境之间的差异或扩展的困难。Docker是......
  • 第三:Docker镜像的管理
    查询系统中有哪些镜像: dockerimages[root@dockertest~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEhello-worldlatest9c7a54a9a43c3monthsago13.3kBmysqllatest32......
  • Centos安装Docker和Docker Compose
    本文介绍如何使用Centos服务器部署Docker和DockerCompose.背景信息本文中的命令使用的是root用户登录执行,若不是root用户要注意权限问题.笔者这里使用的是阿里云服务器,Linux版本为Centos7.9,使用SSH远程连接到服务器.安装Dockerdocker对Linux内核版本的最低要求是3.10......