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 切换使用。安装和集成方式直接参考官方文档即可。