关于docker:使用Docker-Context连接远程节点

2次阅读

共计 3712 个字符,预计需要花费 10 分钟才能阅读完成。

在 Docker v19.03 版本之前,咱们能够应用 DOCKER_HOST 环境变量来配置和连贯近程 Docker 主机,自从 Docker v19.03 版本开始,Docker 的命令行接口(CLI)减少了一个子命令 – context,用于治理 docker 客户端连贯多个上下文环境。
通过 context 命令,可通过配置 SSH 协定的上下文连贯并治理近程多个 Docker 主机,同时从一台装置了 Docker CLI 的机器导出上下文环境,并在另一台装置了 Docker CLI 的机器导入。

首先能够通过 –help 选项查看命令反对的子命令:

 docker context --help
Usage:  docker context COMMAND

Manage contexts

Commands:
  create      Create a context
  export      Export a context to a tar or kubeconfig file
  import      Import a context from a tar or zip file
  inspect     Display detailed information on one or more contexts
  ls          List contexts
  rm          Remove one or more contexts
  update      Update a context
  use         Set the current docker context

Run 'docker context COMMAND --help' for more information on a command.

这里将演示如何应用应用 DOCKER_HOST 环境变量的形式,以及 context 命令的形式来连贯近程 Docker 主机。

提前准备

首先咱们须要筹备两台 Docker 主机,并装置 Docker v19.03+ 版本,例如这里

  • 192.168.0.110(linux-dev) – 我的本地工作主机,Docker version 20.10.12-ce
  • 192.168.0.200(home-boxsrv) – 近程 Docker 主机,Docker version 20.10.7

为防止输出 SSH 明码,请提前配置从 Docker 客户端主机免密拜访近程 Docker 主机。

DOCKER_HOST 环境形式

首先咱们在近程 Docker 主机(home-boxsrv)上运行一个容器,例如名为 dns_masq 的容器

ubuntu@linux-boxsrv:~$ docker container ls
CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS        PORTS                                                                                                                                                                                             NAMES
0597a189d488   jpillora/dnsmasq:1.1   "webproc --config /e…"   2 months ago   Up 31 hours   127.0.0.1:53->53/tcp, 127.0.0.1:53->53/udp, 192.168.0.200:53->53/tcp, 192.168.0.200:53->53/udp, 192.168.31.200:53->53/tcp, 192.168.31.200:53->53/udp, 0.0.0.0:8053->8080/tcp, :::8053->8080/tcp   dns_masq

在本地主机上(linux-dev)配置环境变量

mengz@linux-dev💻~
❯ export DOCKER_HOST=ssh://ubuntu@192.168.0.200

而后查看容器

mengz@linux-dev💻☸~
❯ docker container ls
CONTAINER ID   NAMES      IMAGE                  CREATED ago        STATUS        PORTS                                                                                                                                                                                             COMMAND
0597a189d488   dns_masq   jpillora/dnsmasq:1.1   2 months ago ago   Up 31 hours   127.0.0.1:53->53/tcp, 127.0.0.1:53->53/udp, 192.168.0.200:53->53/tcp, 192.168.0.200:53->53/udp, 192.168.31.200:53->53/tcp, 192.168.31.200:53->53/udp, 0.0.0.0:8053->8080/tcp, :::8053->8080/tcp   "webproc --config /e…"

咱们能够看到,列出的是运行在近程主机上的容器。

应用 context 命令

首先咱们在本地主机(linux-dev)上革除下面配置的环境变量

mengz@linux-dev💻~
❯ unset DOCKER_HOST

应用 context ls 命令列出以后客户端配置的上下文环境

mengz@linux-dev💻~
❯ docker context ls
NAME           DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                     ORCHESTRATOR
default *      Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   https://k8s1.mengz.lan:6443 (default)   swarm

能够看到,以后有一个名为 default 的环境,连贯的是本机上 Docker 引擎。
当初,咱们通过 context create 命令来增加连贯(home-boxsrv)的上下文环境

mengz@linux-dev💻~
❯ docker context create home-boxsrv --description "Docker Engine on home-boxsrv" --docker "host=ssh://ubuntu@192.168.0.200"
home-boxsrv
Successfully created context "home-boxsrv"

❯ docker context ls
NAME           DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                     ORCHESTRATOR
default *      Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   https://k8s1.mengz.lan:6443 (default)   swarm
home-boxsrv    Docker Engine on home-boxsrv              ssh://ubuntu@192.168.0.200

以胜利增加了名为 home-boxsrv 的环境,然而以后激活的还是 default 环境,咱们须要通过 context use 命令来设置以后环境

mengz@linux-dev💻~
❯ docker context use home-boxsrv
home-boxsrv
Current context is now "home-boxsrv"

当初咱们应用 container ls 看一下

mengz@linux-dev💻☸~
❯ docker container ls
CONTAINER ID   NAMES      IMAGE                  CREATED ago        STATUS        PORTS                                                                                                                                                                                             COMMAND
0597a189d488   dns_masq   jpillora/dnsmasq:1.1   2 months ago ago   Up 31 hours   127.0.0.1:53->53/tcp, 127.0.0.1:53->53/udp, 192.168.0.200:53->53/tcp, 192.168.0.200:53->53/udp, 192.168.31.200:53->53/tcp, 192.168.31.200:53->53/udp, 0.0.0.0:8053->8080/tcp, :::8053->8080/tcp   "webproc --config /e…"

列出的是近程主机(home-boxsrv)上的容器,如果应用 docker info 命令查看,server 将是近程主机的信息。

除了 SSH 协定的端点形式,如果近程主机通过 tcp 裸露的 docker 端点,那咱们也能够应用 tcp 的端点形式,例如上面的名为 home-cappsrv 的环境

❯ docker context ls
NAME            DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                     ORCHESTRATOR
default         Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   https://k8s1.mengz.lan:6443 (default)   swarm
home-boxsrv *   Docker Engine on home-boxsrv              ssh://ubuntu@192.168.0.200                                            
home-cappsrv    The docker engine on home-cappsrv         tcp://192.168.0.123:2375

总结

通过 context 命令,咱们能够不便在一台 Docker 客户端主机上连贯并切换治理多台 Docker 主机环境,大大提高了运维多主机环境的效率,同时能够不便将治理的 Docker 上下文环境导出并导入到其余 Docker 客户端应用,跟多的命令应用办法可参考 官网文档。

同时公布在 Mengz’s blog

正文完
 0