前言
通常我们需要连接到远程服务器上的Docker服务,以管理远程服务器上的容器。并且Idea也支持连接远程的Docker服务,方便我们通过Docker管理和部署应用。
需要注意的是服务器上我们可以还通过开放2375端口,来连接远程的Docker服务, 但是这个端口是开放式的,没有任何加密可言,黑客通常会利用这个端口来攻击我们的服务器。
所以,在连接远程服务器上的Docker服务时,我们应当使用带TLS的连接,也就是配置https连接,通过证书访问Docker服务,确保我们的服务器安全。
开放端口
首先我们需要服务器开放2376端口,来连接远程的Docker服务。
1 2 3 4 5 6
| firewall-cmd --zone=public --add-port=2376/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
|
创建证书文件
然后是我们需要创建TLS证书文件
创建证书存放目录
1 2
| mkdir -p /etc/docker/tls cd /etc/docker/tls
|
一键生成证书脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| export SERVER_PUBLIC_IP="你的服务器公网IP"
openssl genrsa -out ca-key.pem 4096 openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem -subj "/CN=docker-ca"
openssl genrsa -out server-key.pem 4096 openssl req -subj "/CN=$SERVER_PUBLIC_IP" -sha256 -new -key server-key.pem -out server.csr echo subjectAltName = IP:$SERVER_PUBLIC_IP,IP:127.0.0.1 > extfile.cnf openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
openssl genrsa -out key.pem 4096 openssl req -subj '/CN=client' -new -key key.pem -out client.csr echo extendedKeyUsage = clientAuth > extfile-client.cnf openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
chmod 600 ca-key.pem server-key.pem key.pem chmod 644 ca.pem server-cert.pem cert.pem
|
修改 docker daemon.json
1
| vi /etc/docker/daemon.json
|
写入配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| { "hosts": [ "unix:///var/run/docker.sock", "tcp://0.0.0.0:2376" ], "tls": true, "tlsverify": true, "tlscacert": "/etc/docker/tls/ca.pem", "tlscert": "/etc/docker/tls/server-cert.pem", "tlskey": "/etc/docker/tls/server-key.pem", "log-driver": "json-file", "log-opts": { "max-size": "10m" } }
|
修改docker.service
Docker 官方文档明确说明:**systemd 模式下,如果 docker.service 启动命令带 -H参数,daemon.json 不能写hosts 字段,两者冲突,dockerd 直接启动失败**
所以我们需要修改 docker.service 启动命令,不带 -H 参数
1
| vi /etc/systemd/system/docker.service
|
找到ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
将其修改为ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
1
| ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
|
重启docker服务
1
| systemctl restart docker
|
显示Docker重启成功就说明服务端配置已完成
下载证书
我们需要在本地电脑上下载证书,才能连接远程的Docker服务
新建一个文件夹用于存放你的证书文件,并进入该文件夹,将服务端生成的证书ca.pem,cert.pem,key.pem下载到本地
1 2
| scp root@你的服务器公网IP:/etc/docker/tls/{ca.pem,cert.pem,key.pem} ./
|
Idea 连接远程Docker服务
Idea左下角点击 服务 -> Docker
点击 添加 按钮,填写连接信息,选择TCP连接

TCP处填写https://你的服务器公网IP:2376
证书文件夹处选择你存放下载的证书的目录即可,MAC上选择可能有bug,选完文件夹还会让你选这时候点取消即可。
填写完以及证书配置好以后底下显示连接成功即表明你已经成功了。