我们日常使用的docker命令实际上是个客户端,真正的服务端为dockerd守护进程,客户端和服务端之间可以通过http协议进行交互。为了跑持续集成,需要通过远程命令来发布docker容器。
环境
docker: 19.03.x
系统:centos 7 / ubuntu 16
操作步骤
生成ssl证书过程略,请参考文末的官方文档
systemctl edit docker
按i键进入编辑模式,粘贴以下内容:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/certs/ca.pem --tlscert=/certs/cert.pem --tlskey=/certs/key.pem -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
按Esc退出编辑,然后输入:wq保存退出,然后重启docker服务
systemctl daemon-reload
systemctl restart docker
测试端口是否开启成功
netstat -lanp | grep 2375
开启防火墙端口
firewall-cmd --add-port=2375/tcp --permanent
firewall-cmd --reload
持续集成客户端远程访问
mkdir -p ~/.docker
# 然后把ca.pem,cert.pem,key.pem复制到上面的文件夹里面
export DOCKER_HOST=tcp://$STACK_HOST:2375
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
# 测试以下
docker images
安全问题
我有一朋友在阿里云ECS安装了docker,然后没有使用TLS就开放了端口,几小时后服务器就被挂了挖矿病毒,所以还是要注意安全。最好把端口限制到只能内网访问,例如:
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/16" port protocol="tcp" port="2375" accept"