📜  从 CLI 访问远程 Docker 主机 (1)

📅  最后修改于: 2023-12-03 15:21:52.172000             🧑  作者: Mango

从 CLI 访问远程 Docker 主机

Docker 是一种容器化技术,它允许开发者在不同的操作系统之间轻松移动应用程序并在容器化的环境中运行。Docker 容器通过使用镜像来构建,这些镜像可以很容易地在 Docker Hub 上找到或自己构建。在这种环境中,有时需要在远程主机上运行 Docker,这就需要能够从本地 CLI 访问远程 Docker 主机。本文将介绍如何通过 CLI 访问远程 Docker 主机。

要求

在继续之前,请确保满足以下要求:

  • 远程 Docker 主机已安装 Docker 并在运行。
  • 本地 CLI 已安装 Docker。
  • 本地 CLI 和远程 Docker 主机均能够互相访问。
SSH 访问

使用 SSH 访问来连接远程 Docker 主机是最常用的方法之一。这种方法可以确保安全性和可扩展性。为了连接到远程 Docker 主机,您需要使用 SSH 协议建立连接并执行 docker 命令。以下是如何连接到远程 Docker 主机的步骤:

  1. 使用 SSH 命令将您的本地 CLI 连接到远程 Docker 主机,例如:
ssh user@remote-docker-host.com
  1. 在远程 Docker 主机上执行以下命令来启动 Docker 容器:
sudo docker run --name test-container -d busybox top
  1. 在本地 CLI 上执行以下命令来检查 Docker 容器是否在运行:
docker ps
REST API 访问

还可以通过开放远程 Docker 主机 REST API 的方式进行访问。通过 REST API,您可以轻松地在远程 Docker 主机上管理容器和镜像。以下是如何连接到远程 Docker 主机的步骤:

  1. 在远程 Docker 主机上启动 Docker 守护进程并将其暴露给 TCP 网络接口。这需要修改 Docker 的配置文件 /etc/docker/daemon.json
{
    "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"]
}
  1. 在远程 Docker 主机上重启 Docker 服务以使配置生效:
sudo systemctl restart docker
  1. 确保远程 Docker 主机的防火墙已配置允许对 TCP 端口 2376 的入站访问。

  2. 在本地 CLI 上设置 DOCKER_HOST 环境变量以指向远程 Docker 主机:

export DOCKER_HOST=tcp://remote-docker-host.com:2376
  1. 现在可以在本地 CLI 上执行 Docker 命令进行远程 Docker 主机操作了:
docker ps
SSH + TLS 访问

由于 REST API 访问通信是明文传输,因此可能存在安全问题。因此,可以使用 SSH + TLS 访问来保护通信。以下是如何连接到远程 Docker 主机的步骤:

  1. 使用 SSH 命令将您的本地 CLI 连接到远程 Docker 主机,例如:
ssh user@remote-docker-host.com
  1. 在远程 Docker 主机上为 TLS 创建证书:
sudo mkdir /etc/docker/tls
curl https://raw.githubusercontent.com/docker/docker/master/contrib/ssl/docker.cnf | sudo tee /etc/docker/tls/docker.cnf > /dev/null
openssl genrsa -out /etc/docker/tls/server.key 4096
openssl req -new -key /etc/docker/tls/server.key -out /etc/docker/tls/server.csr -config /etc/docker/tls/docker.cnf
openssl x509 -req -days 365 -in /etc/docker/tls/server.csr -signkey /etc/docker/tls/server.key -out /etc/docker/tls/server.crt
  1. 在远程 Docker 主机上创建用户和密码:
sudo touch /etc/docker/htpasswd
sudo htpasswd -b /etc/docker/htpasswd user password
  1. 在远程 Docker 主机上重启 Docker 服务以使服务加载 TLS 证书:
sudo systemctl restart docker
  1. 在本地 CLI 上设置 DOCKER_HOST 环境变量并指向远程 Docker 主机的 TLS 证书:
export DOCKER_HOST=ssh://user@remote-docker-host.com DOCKER_TLS_VERIFY=1 DOCKER_CERT_PATH=/path/to/docker/tls
  1. 现在可以在本地 CLI 上执行 Docker 命令进行远程 Docker 主机 TLS 访问操作了:
docker ps
结论

通过本文中介绍的方法,您可以轻松地从 CLI 访问远程 Docker 主机。当然,需要根据实际情况选择不同的访问方法。如果您的容器需要以安全方式连接远程主机,则应该使用 SSH + TLS 访问;否则,使用 SSH 或 REST API 访问即可。