一、适用范围
Docker的远程访问主要用于Python,Java等调用远程api进行管理,例如适用Python编写一个Dcoker管理器。
二、实现方法
在了解实现方法之前,先简单了解一下Dcoekr的基本概念。
Docker 架构
Docker使用了C/S体系架构,Docker客户端与Docker守护进程通信,Docker守护进程负责构建,运行和分发Docker容器。Docker客户端和守护进程可以在同一个系统上运行,也可以将Docker客户端连接到远程Docker守护进程。
Docker客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。所以说,Docker原生是支持使用客户端进行访问的,类似MySQL。
三、演示
3.1、系统信息
理论较新的Linux发行版的配置方法都一样
root@ubuntu20:~# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
3.2、配置Docker远程访问
3.2.1、查看默认配置参数
想要开启远程访问,就需要修改下面这个配置文件
/usr/lib/systemd/system/docker.service
首先查看默认配置参数并筛选关键信息“ExecStart”
root@ubuntu20:~# cat /usr/lib/systemd/system/docker.service | grep ExecStart
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
3.2.2、添加远程访问参数
需要添加的参数如下:
远程访问参数
-H tcp://0.0.0.0:2375
或者直接使用下面的替换命令直接添加
添加远程访问参数
sed -i 's#ExecStart=.*#ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock#' /usr/lib/systemd/system/docker.service
修改效果如下:
root@ubuntu20:~# cat /usr/lib/systemd/system/docker.service | grep ExecStart
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
修改配置之后,需要手动重新加载配置,命令如下
systemctl daemon-reload&&systemctl restart docker
3.2.3、验证
首先在本地使用-H参数进行操作
docker -H 1.1.1.11:2375 images
然后使用另一台虚拟机访问
接着反过来使用-H参数访问未开启远程访问的虚拟机
总结:
虽然通过修改参数实现类似MySQL那样的访问模式(Docker貌似不支持设置账户密码,只能设置白名单IP),但是使用这种方法去管理其他主机的Docker的时候,必须要求本身安装有这个Docker客户端,这是一个缺点,所以想要真正的实现远程管理Docker还是得学习API接口的调用