MacOS启动Docker Remote API
Docker操作分为以下三种方式:
- 桌面版 Docker 提供可视化操作;
- 服务器 Docker 提供命令行操作;
- 针对以上2种还提供 Remote API 远程调用,使用 HTTP 接口。
1.启用 API
Docker 的 Remote API 服务默认监听 TCP 2375
端口,为了保证安全,Docker 安装后默认不会启用远程 API 服务,因为 Remote API 服务默认不做安全认证。
如果防火墙或者安全组允许 2375 端口访问,同时开启 Docker 默认 Remote API 服务,容易收到恶意攻击,比如:挖矿。
推荐启用环境:
- 内网环境:保证安全;
- 外网环境:建议做好 iptables 安全加固或用完即焚或使用 TLS 安全认证等。
下面针对不同系统分别说明 CentOS 以及 MacOS 如何开启 Remote API 服务:
1.1.CentOS
CentOS 开启方法比较简单,首先修改配置:
vim /usr/lib/systemd/system/docker.service
搜索 ExecStart 配置项,默认如下:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
在 ExecStart 后面追加 -H tcp://0.0.0.0:2375
,如下:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
其中 0.0.0.0
代表 IP,2375
代表端口,可任意修改。
但是这样只是替换了 Docker 访问方式,无法继续使用命令行操作 Docker,还需要追加 sock
选项:-H unix:///var/run/docker.sock
以启用两者,最终为:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
修改完配置需要重启 Docker 守护进程及服务:
# 重新加载 Docker 守护进程
systemctl daemon-reload
# 重启 Docker 服务
systemctl restart docker
重启后,通过 netstat 命令查看 2375
端口是否监听来确认是否修改成功:
netstat -nutlp | grep 2375
> tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 29342/dockerd
1.2.MacOS
在 MacOS 下无法直接修改配置文件来开启 Remote API 服务,通过运行 socat
容器,将 unix socket
上 Docker API 转发到 MacOS 指定的端口:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:2375:2375 bobrik/socat TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock
1.3.测试
通过 info
,version
等简单命令进行测试,可以使用浏览器访问或者curl
等方式进行请求:
# 使用 curl 方式进行测试
curl -X GET http://127.0.0.1:2375/info
curl -X GET http://127.0.0.1:2375/version
本机以 version
命令进行测试,如下:
# 后面 | python -m json.tool 命令为了可视化 json
[liwiki@macbook /Users/liwiki]# curl -X GET http://127.0.0.1:2375/version | python -m json.tool
> % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 831 0 831 0 0 12590 0 --:--:-- --:--:-- --:--:-- 12590
{
"ApiVersion": "1.41",
"Arch": "amd64",
"BuildTime": "2022-03-10T14:06:05.000000000+00:00",
"Components": [
{
"Details": {
"ApiVersion": "1.41",
"Arch": "amd64",
"BuildTime": "2022-03-10T14:06:05.000000000+00:00",
"Experimental": "false",
"GitCommit": "906f57f",
"GoVersion": "go1.16.15",
"KernelVersion": "5.10.104-linuxkit",
"MinAPIVersion": "1.12",
"Os": "linux"
},
"Name": "Engine",
"Version": "20.10.13"
},
{
"Details": {
"GitCommit": "2a1d4dbdb2a1030dc5b01e96fb110a9d9f150ecc"
},
"Name": "containerd",
"Version": "1.5.10"
},
{
"Details": {
"GitCommit": "v1.0.3-0-gf46b6ba"
},
"Name": "runc",
"Version": "1.0.3"
},
{
"Details": {
"GitCommit": "de40ad0"
},
"Name": "docker-init",
"Version": "0.19.0"
}
],
"GitCommit": "906f57f",
"GoVersion": "go1.16.15",
"KernelVersion": "5.10.104-linuxkit",
"MinAPIVersion": "1.12",
"Os": "linux",
"Platform": {
"Name": "Docker Desktop 4.6.1 (76265)"
},
"Version": "20.10.13"
}
2. Docker API
Docker 看作一种资源,Docker API 遵循 REST 风格,通过 HTTP 操作。
Docker Engine API v1.41 提供 三类 API 操作:
- Docker Registry API
- Docker Hub API
Docker Remote API
官方建议不再使用 API v1.12之前的版本,建议使用v1.24 or 更高的版本
- Docker Registry API
镜像仓库 API,实现自由的自动化、程序化的管理镜像仓库。 - Docker Hub API
用户管理操作 API,Docker Hub使用校验和公共namespaces
的方式来存储账户信息、认证账户、账户授权等。API 同时也允许操作相关的用户仓库和 library 仓库。 - Docker Remote API
控制 Docker 服务端 API,等价于 Docker 命令行,实现远程操作 Docker 容器,通过程序实现自动化运维 Docker 进程。
3. Docker Remote API 介绍
3.1 查看所有镜像
curl -X GET http://127.0.0.1:2375/images/json
3.2 查看所有容器
curl -X GET http://127.0.0.1:2375/containers/json
3.3 创建容器
curl -X POST -H "Content-Type: application/json" -d '{
"Image": "hello-world"
}' http://127.0.0.1:2375/containers/create
3.4 容器操作(start|stop|restart)
curl -X POST http://127.0.0.1:2375/containers/{id}/start
curl -X POST http://127.0.0.1:2375/containers/{id}/stop
curl -X POST http://127.0.0.1:2375/containers/{id}/restart
4. Docker SDK 介绍
References:
[1] https://docs.docker.com/engine/api/v1.41/
该页面评论已关闭