写在最前面
官网文档
关于docker如何开启远程连接,以及如何使用“内置的 HTTPS 加密套接字”来安全连接,docker官网上有非常详细的英文介绍,本文关于这部分的内容也大致上是官网文档的翻译。
参见:
Docker Engine 客户端与服务端之间的通信
我们知道 Docker Engine 是一个客户端-服务器型的应用程序。dockerd作为一个守护进程在后台长时间运行(所以有时候也说是docker daemon)是docker的服务端。docker daemon不提供任何操作界面(CLI命令行或者图形界面),可供用户直接使用的操作界面由客户端(Docker CLI、各种docker的图形操作界面、idea的docker插件等等)提供。
docker demon提供了一套与之通信的api,并且支持unix域套接字、tcp和fd(Systemd socket activation)这三种套接字通信模式,通过dockerd的-H 选项来开启套接字支持,例如:
- UNIX套接字:
dockerd -H unix:///var/run/docker.sock
- fd:
dockerd -H fd://
危险的操作
By default, Docker runs through a non-networked UNIX socket. It can also optionally communicate using SSH or a TLS (HTTPS) socket.
——摘自docker官网
docker daemon默认是只开放UNIX域套接字来通信的,UNIX域套接字只能与本地的进程进行通信。也就是说默认情况下只能利用本地 Docker Engine 提供的docker CLI,使用docker命令来与docker daemon通信。如果要使用idea的docker插件来远程通信的话,就需要开启tcp:
例如:
dockerd -H tcp://0.0.0.0:2375
注意,上面的命令是非常危险的
,应为它允许任意IP的2375端口与docker daemon直接进行通信,并且不需要任何身份认证。如果你的docker daemon主机处于外网环境,这样做会直接让你的docker daemon裸奔在互联网,任意ip都可以连上你的docker daemon来搞事情。
之前买的云服务器,按照百度来的做法,这样搞了。后来直接被ip在荷兰的黑客黑去挖矿了,血淋淋的教训啊
国内现状,大伙懂得都懂,一抄十、十抄百,没几个去真正研究的。即使是这种非常危险的操作,也没有任何说明(因为都是抄的,自己也没弄明白怎么回事儿)。所以,即使官网的英文文档写的很详细的了,我觉得也有必要再写篇博客来好好捋一捋docker如何开启使用TLS保护的安全远程连接,不至于让你的docker daemon裸奔在互联网。
idea的docker插件
idea有个docker插件,使用这个插件来操作docker非常方便。
在使用前需要在插件里配置docker,