为Docker启用远程访问及设置tls支持

环境说明

操作系统:    centos7
docker:    Docker version 17.09.0

启用远程连接-非安全连接

1
2
3
vi /lib/systemd/system/docker.service
#修改ExecStart=/usr/bin/dockerd所在行为
ExecStart=/usr/bin/dockerd -H=tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

启用远程连接-安全连接

需要准备tls证书文件,并放置在/opt/docker(该目录自定义),包含服务端证书及客户端证书

1
2
3
vi /lib/systemd/system/docker.service
#修改ExecStart=/usr/bin/dockerd所在行为
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/opt/docker/ca-cert.pem --tlscert=/opt/docker/server-cert.pem --tlskey=/opt/docker/server-key.pem -H=tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

重载配置并重启服务

1
2
systemctl daemon-reload
systemctl restart docker

使用客户端测试连通性

1
2
#更改[host]为实际的地址(tls证书中允许访问的CN,DNS等)
docker --tlsverify --tlscacert=/opt/docker/ca-cert.pem --tlscert=/opt/docker/client-cert.pem --tlskey=/opt/docker/client-key.pem -H=[host]:2376 version

可能输出结果

Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:41:23 2017
OS/Arch: linux/amd64

Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:42:49 2017
OS/Arch: linux/amd64
Experimental: false

额外说明

可以在将客户端证书放置在~/.docker目录下

1
2
#该命令仅作原理
cp -cv /opt/docker/{ca-cert,client-cert,client-key}.pem ~/.docker/{ca,cert,key}.pem

现在通过–tlsverify就能连接到开启远端访问的Docker实例
1
2
#更改[host]为实际的地址(tls证书中允许访问的CN,DNS等)
docker --tlsverify -H tcp://[host]:2376 version

它会自动使用~/.docker下的证书来验证连接