MacOS启动Docker Remote API

liwiki 2022年05月11日 •  Mac Docker 884 •  0

Docker操作分为以下三种方式:

  1. 桌面版 Docker 提供可视化操作;
  2. 服务器 Docker 提供命令行操作;
  3. 针对以上2种还提供 Remote API 远程调用,使用 HTTP 接口。

1.启用 API

Docker 的 Remote API 服务默认监听 TCP 2375 端口,为了保证安全,Docker 安装后默认不会启用远程 API 服务,因为 Remote API 服务默认不做安全认证。

如果防火墙或者安全组允许 2375 端口访问,同时开启 Docker 默认 Remote API 服务,容易收到恶意攻击,比如:挖矿。

推荐启用环境:

  1. 内网环境:保证安全;
  2. 外网环境:建议做好 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.测试

通过 infoversion等简单命令进行测试,可以使用浏览器访问或者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 更高的版本
  1. Docker Registry API
    镜像仓库 API,实现自由的自动化、程序化的管理镜像仓库。
  2. Docker Hub API
    用户管理操作 API,Docker Hub使用校验和公共 namespaces 的方式来存储账户信息、认证账户、账户授权等。API 同时也允许操作相关的用户仓库和 library 仓库。
  3. 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/
Tags:DockerMac

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
原文作者:liwiki
原文标题:MacOS启动Docker Remote API
原文链接:https://blog.dicuu.com/mac/329.html

上一篇
打赏
下一篇

该页面评论已关闭