简介
用于配置docker镜像的脚本,启用ssl保证安全性,兼容有无域名、兼容局域网或Internet网部署等情况。
服务端配置
安装docker和docker-compose
https://docs.docker.com/engine/install/ubuntu/
https://docs.docker.com/compose/install/
克隆项目
1 | git clone https://github.com/siaimes/docker-cache.git |
生成证书
生成证书,其中第二个参数为1表示生成域名证书,其他值会生成IP证书,以自己条件确定:
1 | cd ssl |
如果端口有开放互联网访问,可以申请Let's Encrypt证书,或者配合Nginx部署更多的服务,这里就不展开了。
启动服务
1 | nano docker-compose |
其中,修改your_server_ip_or_domain
为你的服务器IP或域名,修改0.0.0.0:5000:5000
中第一个5000
为你宿主机可用端口。
1 | chmod +x *.sh |
如果你镜像的不是dockerhub,例如gcr.io,那么将 1
- PROXY_REMOTE_URL=https://registry-1.docker.io
改为 1
- PROXY_REMOTE_URL=https://gcr.io
客户端配置
克隆项目
1 | git clone https://github.com/siaimes/docker-cache.git |
获取证书
如果是可信的证书,例如Let's Encrypt签发的证书,那么无需这一步。
1 | sudo ./get_docker_cache_ssl.sh your_server_ip_or_domain port username /path/to/ssl |
如果服务器限制密码登录,用脚本拷贝证书到客户端可能会遇到问题。
我们可以自己参考get_docker_cache_ssl.sh
配置客户端:
这里如果port是443可以省略,后面也是如此。
- 创建文件夹
1 | sudo mkdir -p /etc/docker/certs.d/your_server_ip_or_domain:port/ |
- 输出服务端的证书并拷贝到剪切板
1 | cat ./ssl/your_server_ip_or_domain.crt |
- 在客户端创建证书文件并粘贴服务端证书内容
1 | sudo nano /etc/docker/certs.d/your_server_ip_or_domain:port/your_server_ip_or_domain.crt |
测试服务
如果镜像的是dockerhub,可以用下述命令测试:
1 | sudo docker pull your_server_ip_or_domain:port/library/ubuntu |
注意到拉取官方镜像的时候需要加上library
,否则Error response from daemon: manifest for ubuntu:latest not found
。
如果镜像的是gcr.io,可以用下述命令测试:
1 | sudo docker pull your_server_ip_or_domain:port/google-containers/kube-apiserver:v1.15.11 |
固化配置
如果是镜像dockerhub才可以做这一步,如果镜像的是其它仓库,请忽略。
1 | sudo nano /etc/docker/daemon.json |
添加以下内容
1 | {"registry-mirrors": ["https://your_server_ip_or_domain:port"]} |
1 | sudo systemctl restart docker |
测试结果
1 | sudo docker rmi your_server_ip_or_domain:port/library/ubuntu |
参考连接
x509: cannot validate certificate for 10.30.0.163 because it doesn't contain any IP SANs