管理远程容器
在容器化应用中,Docker 和 Podman 是两种常见的容器运行时工具。它们提供了非常相似的 CLI 接口,但 Podman 的无守护进程和 rootless 模式使其在某些场景下更加灵活和安全。本文将介绍如何在远程机器上安装 Podman 和 Docker,并通过 SSH 连接到远程的容器服务进行本地管理。
远程机器安装工具
安装 Podman
在不同的 Linux 发行版上,安装 Podman 的方法可能有所不同。以下以 Ubuntu 为例:
# 更新包索引
sudo apt update
# 安装 Podman
sudo apt install -y podman
# 检查 Podman 版本
podman --version如果使用的是 CentOS 或 RHEL,可以通过以下命令安装:
# 添加 Podman 源
sudo dnf install -y epel-release
# 安装 Podman
sudo dnf install -y podman
# 检查 Podman 版本
podman --version安装完成后,可以通过命令 podman info 确认 Podman 是否正确安装。
安装 Docker
Docker 的安装也非常简单。以下是以 Ubuntu 为例的安装步骤:
# 更新包索引
sudo apt update
# 安装依赖包
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 设置稳定版的 Docker 仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 更新包索引
sudo apt update
# 安装 Docker
sudo apt install -y docker-ce
# 启动并设置 Docker 开机自启动
sudo systemctl enable --now docker
# 检查 Docker 版本
docker --version在 CentOS 中,可以使用以下命令安装 Docker:
# 安装依赖包
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker
sudo dnf install -y docker-ce
# 启动并设置 Docker 开机自启动
sudo systemctl enable --now docker
# 检查 Docker 版本
docker --version通过 SSH 连接远程 Socket
需要提前在本地机器配置ssh免密
Podman 远程访问
本地机器上通过 Podman CLI 进行远程连接。
$ podman --url ssh://root@192.168.64.19/run/podman/podman.sock --identity ~/.ssh/id_ed25519 ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES这样,本地的 Podman CLI 将通过 SSH 远程执行所有容器命令。
如果使用的不是默认的 SSH 密钥(例如
~/.ssh/id_rsa),需要手动指定密钥
Docker 远程访问
在本地机器上,可以通过以下方式连接远程 Docker 守护进程:
$ docker -H ssh://root@192.168.64.19/var/run/docker.sock ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES这样,所有 Docker 命令将通过 TCP 传输到远程机器的 Docker 守护进程。
通过 SSH 代理远程 Socket
除了直接配置远程服务监听端口,我们还可以通过 SSH 隧道代理本地 Docker 或 Podman 的 Socket 到远程机器。
使用 SSH 隧道代理 Docker Socket
在远程机器上,Docker 的默认 Socket 位于 /var/run/docker.sock。我们可以通过 SSH 隧道将其映射到本地:
ssh -N -L /var/run/docker.sock:/var/run/docker.sock root@192.168.64.19然后,本地 Docker CLI 就可以像使用本地 Docker 守护进程一样,管理远程机器上的容器:
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES使用 SSH 隧道代理 Podman Socket
同样,我们可以通过 SSH 将远程 Podman 的 rootless Socket 映射到本地:
ssh -N -L /var/run/podman.sock:/var/run/podman/podman.sock root@192.168.64.19然后,通过 Podman CLI 连接到这个本地 Socket:
$ podman --url unix:///var/run/podman.sock ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMESPodman 和 Docker 提供的远程连接管理方式
除了通过 SSH 隧道代理远程 Socket 来管理容器外,Podman 和 Docker 还各自提供了内置的远程连接管理功能,使用户可以更加方便地进行远程容器管理。
Podman 的 system connection
Podman 提供了一种简单的内置机制system connection来管理多个远程连接。
确认远程机器上 Podman 已经正确安装并启用了远程服务(通常通过 podman system service 启动)。
在本地机器上配置 Podman 远程连接。
添加
假设远程机器的 IP 为 192.168.0.100,用户名为 user,Podman 服务运行在默认的 SSH 端口上。
podman system connection add ubuntu24-podman --identity ~/.ssh/id_rsa ssh://root@192.168.64.19/run/podman/podman.sock这条命令会将远程主机 192.168.0.100 添加为一个名为 myremote 的连接,并通过 SSH 访问远程 Podman 的 Socket。
切换
添加成功后,可以通过 --connection 选项指定使用哪个远程连接,执行容器操作。
podman --connection ubuntu24-podman ps管理
Podman 允许管理多个远程连接:
列出所有连接
podman system connection list设置默认连接
podman system connection default ubuntu24-podman删除连接
podman system connection remove ubuntu24-podmanPodman 的远程连接机制非常灵活,能够支持在不同机器之间轻松切换管理对象,而无需重复配置 SSH 隧道或远程 Socket。
Docker 的 context
Docker提供 的 context 功能特别适合在多个 Docker 环境之间快速切换。例如:
- 在本地开发环境中,使用默认的 Docker 守护进程。
 - 部署时,切换到远程生产服务器的 Docker 环境。
 - 同时管理多个云提供商的 Docker 容器服务(如 AWS 或 Google Cloud 上的 Docker 实例)。
 
使用 context 不仅减少了反复配置远程 Docker 守护进程的繁琐步骤,还提供了一种更安全、可管理的方式来控制访问多个 Docker 实例。
在本地机器上配置context远程连接。
添加 
docker context create ubuntu24-docker \
	--description "multipass ubuntu24 docker" \
	--docker "host=ssh://root@192.168.64.19/var/run/docker.sock"这条命令创建了一个名为 ubuntu24-docker 的 context,其描述为 "multipass ubuntu24 docker",并且使用 ssh://root@192.168.64.19/var/run/docker.sock 作为 Docker 守护进程的地址。
切换
docker context use ubuntu24-docker这将把当前的 Docker CLI 环境切换到 ubuntu24-docker 上,之后的所有 Docker 命令都会与远程 Docker 守护进程交互。
管理
Docker 的 context 允许用户同时配置和管理多个环境(本地或远程):
列出所有 context:
docker context ls查看当前 context:
docker context show删除 context:
docker context rm ubuntu24-docker切换回默认 context(通常是本地 Docker):
docker context use default版权所有
版权归属:liushaofeng
