安全地远程调用Docker API
发布网友
发布时间:2024-09-30 08:47
我来回答
共1个回答
热心网友
时间:2024-10-20 13:43
引言
面对不同机器间的远程Docker操作需求,本文将指导你如何安全地开启Docker API远程调用功能,包括如何使用HTTP API或Java SDK操作另一台机器上的Docker,以及确保Docker API免受非授权调用的策略。
开启Docker API远程调用(简单,不鉴权,快速体验)
默认情况下,Docker仅允许本地机器通过`docker`命令进行操作。为实现跨机操作,我们将开启HTTP API调用,使其他机器能够通过HTTP请求远程控制Docker。
注意:此方法未对调用者权限进行校验,任何网络用户均能控制你的Docker。短期使用时,建议使用TLS进行身份验证,详细方法请见下文。
编辑`/lib/systemd/system/docker.service`,在`ExecStart=`后的末尾添加`-H=tcp://0.0.0.0:2375`。此配置使Docker在2375端口监听HTTP请求。请确保开放对应的安全组或防火墙设置。
重启Docker服务,你将能通过HTTP请求远程操控Docker,如使用`curl http://ip:2375/images/json`获取镜像列表。其他编程语言的SDK亦可发起请求,详情请查阅官方文档。
接下来,我们通过Java SDK进行实例演示。
使用Java SDK远程调用Docker API
使用GitHub上广受欢迎的SDK:`github.com/docker-java/...
以下Maven依赖适用于最新版本,不同版本可能引发错误。
假设你有一台安装了Docker的Ubuntu服务器,下面的代码将初始化`dockerClient`,并通过远程调用获取Docker的镜像列表。
开启鉴权,防止Docker API被他人调用
掌握了基本的远程调用方法后,接下来我们将通过TLS自签证书为Docker API添加鉴权功能,确保仅持有配对证书的客户端和服务端能够通信,防止非授权调用。
服务端
选择一个目录存放证书文件,例如`/root/docker/cert/`。
在该目录中,生成并存储证书文件(确保目录结构包含`ca.pem`、`server-cert.pem`、`server-key.pem`等)。其中,`ca.pem`、`server-cert.pem`、`server-key.pem`用于服务端,而`ca.pem`、`cert.pem`、`key.pem`用于客户端。
编辑`/lib/systemd/system/docker.service`文件,修改`ExecStart=`配置以使用TLS,并指定相应的证书文件路径。将`-H tcp://0.0.0.0:2375`替换为`-H tcp://0.0.0.0:2376`,并追加参数以启用SSL和证书文件。
提供服务端所需的证书文件,并配置监听2376端口接收远程调用,允许所有IP来源(但客户端必须持有配对证书)。
客户端
将`ca.pem`、`cert.pem`、`key.pem`文件从服务端复制到客户端目录中。修改客户端代码以指定证书文件并发起远程请求。
成功获取服务端的Docker镜像列表,即实现了安全远程调用Docker API。
结论
本文详细介绍了开启Docker API远程调用的方法,包括使用HTTP API或Java SDK远程控制另一台机器上的Docker,以及通过TLS自签证书确保Docker API免受非授权访问的策略。
参考资料
官方文档:`docs.docker.com/engine/...`
视频教程:`*.com/watch?...`