以下内容有可能需要科学上网才能做到。
开始
我这里使用的环境是阿里云ecs,系统是Ubuntu 20.04 64位
docker 安装
如果系统是第一次安装docker,简单来说只需要执行两条命令
1.sudo apt-get update
2.sudo apt-get install docker-ce docker-ce-cli containerd.io
安装教程地址
docker 官网文档
在安装完成之后输入docker info
查看docker信息
在 Windows10 系统中,可以下载 Docker Desktop on Windows
官方地址注意,在安装docker之前,需要先安装并开启WSL(Windows中的Linux子系统)
官方地址
Portainer 安装
1.docker volume create portainer_data
2.docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
安装完成后可以在浏览器输入http://localhost:9000
来访问。在第一次进入时需要设定密码。
可以通过添加 Endpoints 来管理远程的 Docker 容器
点击菜单中的 Endpoints,选择 Environment type 中的 Docker ,随便输入一个以后你能认出来的 Name ,然后填入 Endpoint URL ,这个 URL 就是你要管理的远程服务器的地址或者域名。正常情况下,如果你的服务器没有开启 TLS 认证的话,就可以点击 Add endpoint 按钮了。
但是绝大多是情况下是必须要确保 docker 端口的安全的。否则将很容易就被攻击。
当开启 TLS 后,会有四个选项,我们选择第一个方式,需要上传三个证书。下一节我们会讲到如何生成这三个证书。
docker 开启远程访问
在开启docker远程访问之前,请留意你所在的服务器提供商,如阿里云中的 ECS 中网络安全组是否开启相应端口(本例中的 2376 、2375)的入网访问权限。官方文档地址
- 输入命令
sudo systemctl edit docker.service
来编辑docker.service
文件 添加或修改内容为(Ctrl+X,Y 保存修改)
1.[Service] 2.ExecStart= 3.ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
- 输入
sudo systemctl daemon-reload
,重新加载配置文件 - 输入
sudo systemctl restart docker.service
重启 docker 服务 - 输入
sudo netstat -lntp | grep dockerd
检查 docker 是否已经在监听相应的端口。
现在,我们已经开启docker的远程访问端口了。接下来要加入TLS安全访问。会稍微复杂一点。官方文档地址
- 请将 $HOST 替换为docker 主机域名(2处), 若需要添加 IP 地址访问,请在第 5 条命令时修改或添加 IP 地址
依次输入(有时候是需要输入 密码 和公司等相关信息,按照提示输入即可)
1. openssl genrsa -aes256 -out ca-key.pem 4096 2. openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem 3. openssl genrsa -out server-key.pem 4096 4. openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr 5. echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf 6. echo extendedKeyUsage = serverAuth >> extfile.cnf 7. openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile 3. etfile.cnf 8. openssl genrsa -out key.pem 4096 9. openssl req -subj '/CN=client' -new -key key.pem -out client.csr 10. echo extendedKeyUsage = clientAuth > extfile-client.cnf 11. openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf 12. rm -v client.csr server.csr extfile.cnf extfile-client.cnf 13. chmod -v 0400 ca-key.pem key.pem server-key.pem 14. chmod -v 0444 ca.pem server-cert.pem cert.pem
以上完成之后,输入以下命令 启动 docker,并开启 TLS 监听端口 2376(临时测试)
dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:2376
若 docker 正在运行,需要先停止 docker
使用 lrzsz 软件将 证书 下载到本地sz ca.pem sz cert.pem sz key.pem
本地输入以下命令查看远程docker 版本(先将工作目录切换至证书所在文件夹)
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$HOST:2376 version
接下来我们停止服务器上的 docker ,
sudo systemctl edit docker.service
修改docker.service
文件1.[Service] 2.ExecStart= 3.ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/root/ca.pem --tlscert=/root/server-cert.pem --tlskey=/root/server-key.pem
- 输入
sudo systemctl daemon-reload
,重新加载配置文件 - 输入
sudo systemctl restart docker.service
重启 docker 服务 - 输入
sudo netstat -lntp | grep dockerd
检查 docker 是否已经在监听相应的端口。
最后,我们就可以将下载后的 ca.pem cert.pem key.pem
证书用来上传至 Portainer 中来添加远程 Endpoints
本文转自网络,版权归原作者所有,原文链接:https://segmentfault.com/a/1190000039891438