Docker 使用的一些小技巧

使用 Docker context 连接远程 Docker

Docker 安装可参考官方安装文档。这里主要记一下通过 SSH 操作已有远程 Docker 的方式。

Docker context 可以理解为一份 Docker 连接配置,保存要连接的 Docker 后台服务(daemon)地址等信息,方便同一个 Docker CLI 在本地、远端之间切换。

假设已经配置好 SSH 别名 text,在本机运行 ssh text 就能连接云服务器,可以直接复用这份 ~/.ssh/config 配置:

docker context create remote-test --docker "host=ssh://text"

这里的 remote-test 是新建的 Docker context 名称,text 是已有的 SSH Host 别名。之后可以在命令里指定它:

docker --context remote-test ps
docker --context remote-test compose up -d

这样就不用每次先进入远端 shell 再敲 Docker 命令了。Docker CLI 会通过 SSH 把请求交给远端 Docker daemon,认证仍由 SSH 完成;前提是 SSH 连接可用,远端已安装 Docker,而且该 SSH 用户有权限访问 Docker socket。

这种方式可以复用现有 SSH 入口,无需额外暴露 Docker daemon 的 TCP 端口,减少额外的服务暴露。具体说明见通过 SSH 保护 Docker socket。

也可以用 docker context use remote-test 切换默认 context;上面的 --context 只对当前这条命令生效。

有几个地方需要分清:

  • Docker context 与构建上下文:前者选择连接哪个 Docker daemon;Compose 的 build.context 指定构建所用的目录或 Git 仓库。两者虽然都叫 context,负责的事情不同。
  • 挂载路径:bind mount 使用远端 Docker 主机上的路径,不会自动把本机同名目录挂进去。
  • 端口访问:容器发布的端口位于远端 Docker 主机。context 本身不会把这些端口转发到本机,需要访问时另行配置网络访问或 SSH 端口转发。

macOS 上的本地 Docker 环境

macOS 上也可以用 OrbStack 运行本地容器。它包含 Docker Engine,并兼容 Docker CLI 和 Compose;本地的 orbstack context 可以与远程 context 切换使用。安装和集成方式直接参考官方文档即可。