如何在CentOS7上使用Docker机器配置和管理远程Docker主机

来自菜鸟教程
跳转至:导航、​搜索

介绍

Docker Machine 是一种工具,可以轻松地从您的个人计算机远程配置和管理多个 Docker 主机。 这样的服务器通常被称为 Dockerized 主机,当然可以用来运行 Docker 容器。

虽然 Docker Machine 可以安装在本地或远程系统上,但最常见的方法是将其安装在本地计算机(本机安装或虚拟机)上,并使用它来配置 Dockerized 远程服务器。

尽管 Docker Machine 可以安装在大多数 Linux 发行版以及 Mac OS X 和 Windows 上,但在本教程中,我们将把它安装在运行 CentOS 7 的本地计算机上,并使用它来配置 Dockerized DigitalOcean Droplets。

先决条件

要学习本教程,您将需要以下内容:

  • 一台运行 CentOS 7 并安装了 Docker 的本地机器。 (请参阅 如何在 CentOS 7 上安装和使用 Docker 获取说明)
  • DigitalOcean API 令牌。 如果您没有,请使用 this guide 生成它。 生成令牌时,请确保它具有读写范围。 这是默认设置,因此如果您在生成它时不更改任何选项,它将具有读写功能。 并且为了使其更易于在命令行上使用,请确保将令牌分配给该文章中给出的变量。

第 1 步 — 在本地计算机上安装 Docker 机器

在这一步中,我们将完成在运行 CentOS 7 的本地计算机上安装 Docker Machine 的过程。

要下载并安装二进制文件,请键入:

wget https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-$(uname -s)-$(uname -m)

文件名应为 docker-machine-Linux-x86_64。 将其重命名为 docker-machine 以使其更易于使用:

mv docker-machine-Linux-x86_64 docker-machine

使其可执行:

chmod +x docker-machine

将它移动或复制到 usr/local/bin 目录,以便它可以作为系统命令使用。

sudo mv docker-machine /usr/local/bin

检查版本,这将表明它已正确安装:

docker-machine version

输出应该类似于

Outputdocker-machine version 0.14.0, build 89b8332

第 2 步 — 安装额外的 Docker 机器脚本

Docker Machine GitHub 存储库中有三个 bash 脚本,旨在促进 dockerdocker-machine 命令的使用。 它们提供命令完成和 bash 提示自定义。

在这一步中,我们将在您的本地计算机上安装这三个脚本。 它们将被下载并安装到 /etc/bash_completion.d 目录中。

第一个脚本可以在 bash 提示符中查看活动机器。 当您使用和在多台 Dockerized 机器之间切换时,这会派上用场。 该脚本称为 docker-machine-prompt.bash。 要下载它,请键入:

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O /etc/bash_completion.d/docker-machine-prompt.bash

要完成上述文件的安装,您必须在 .bashrc 文件中为 PS1 变量设置自定义值。 所以用nano打开它(PS1是一个特殊的shell变量,用来修改bash命令提示符):

nano ~/.bashrc

将以下行复制并粘贴到该文件的末尾:

~/.bashrc

export PS1='[\u@\h \W$(__docker_machine_ps1 " [%s]")]\$ '

通过对您的 ~/.bashrc 文件进行此修改,当您激活一台机器时,它的名称将被插入到 shell 提示符中。

保存并关闭文件。

第二个脚本称为 docker-machine-wrapper.bash。 它在 docker-machine 命令中添加了 use 子命令,可以轻松在 Dockerized Machines 之间切换。 要下载它,请键入

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O /etc/bash_completion.d/docker-machine-wrapper.bash

第三个脚本称为 docker-machine.bash。 它为 docker-machine 命令添加了 bash 补全。 使用以下方式下载:

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O /etc/bash_completion.d/docker-machine.bash

要应用您到目前为止所做的更改,请关闭,然后重新打开您的终端。 如果您通过 SSH 登录到机器,请退出会话并再次登录。 dockerdocker-machine 命令的命令完成现在应该可以工作了。 如果它不起作用,很可能是没有安装 bash-completion 包。 如果是这种情况,请使用以下命令安装它:

sudo yum install bash-completion

那应该解决它。

第 3 步 — 使用 Docker Machine 配置 Dockerized 主机

现在您已经在本地计算机上运行了 Docker 和 Docker Machine,您现在可以使用 Docker Machine 的 docker-machine create 命令在您的 DigitalOcean 帐户上配置 Dockerized Droplet。 如果您还没有这样做,请使用以下方法将您的 DigitalOcean API 令牌分配给 bash 变量:

export shell-variable=your-api-token

注意: 本教程使用 DOTOKEN 作为 DO API 令牌的 bash 变量。 变量名不必是 DOTOKEN,也不必全部大写。


要使变量永久化,请将其放入您的 ~/.bashrc 文件中。 此步骤是可选的,但如果您希望该值在终端会话中持续存在,则它是必需的。

nano ~/.bashrc

在任何地方添加与此类似的行:

~/.bashrcexport DOTOKEN=your-api-token

要在当前终端会话中激活变量,请键入:

source ~/.bashrc

要成功调用 docker-machine create 命令,您必须(至少)指定驱动程序、API 令牌(或对其求值的变量)和远程主机的唯一名称。 要创建您的第一个 Dockerized 主机,请键入:

docker-machine create --driver digitalocean --digitalocean-access-token $DOTOKEN machine-name

正在创建主机时的部分输出如下。 在此输出中,主机的名称是 centos-docker

Output
 ...

Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker i up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env centos-docker

为新主机创建了一个 SSH 密钥对,以便 docker-machine 可以远程访问它。 Droplet 配备了所需的操作系统,并在系统上安装了 Docker。 命令完成后,您的 Docker Droplet 已启动并正在运行。

要从命令行查看新创建的主机,请键入:

docker-machine ls

输出应该与此类似:

OutputNAME                ACTIVE   DRIVER         STATE     URL                         SWARM   DOCKER    ERRORS
centos-docker   -        digitalocean   Running   tcp://203.0.113.71:2376            v18.05.0-ce

第 4 步 — 在创建 Dockerized 主机时指定基本操作系统

此步骤向您展示如何为使用 --digitalocean-image 标志创建的 Dockerized 主机指定基本操作系统和版本。

例如,要使用 CentOS 7 创建 Dockerized 主机,请键入:

docker-machine create --driver digitalocean --digitalocean-image centos-7-x64 --digitalocean-access-token $DOTOKEN machine-name

如果您想在您的服务器上运行 Debian 8 怎么办? 您将键入以下命令:

docker-machine create --driver digitalocean --digitalocean-image debian-8-x64 --digitalocean-access-token $DOTOKEN machine-name

默认情况下,使用 Docker Machine 创建 Dockerized 主机时使用的基本操作系统是 supposed 为最新版本(或 Ubuntu 的最新 LTS 版本)。 但是,在本文发布时,docker-machine create 命令仍然使用 Ubuntu 16.04 LTS 作为基本操作系统,尽管 Ubuntu 18.04 是最新的 LTS 版本。 因此,如果您需要运行 Ubuntu 18.04,则必须通过将 --digitalocean-image 标志传递给 docker-machine create 命令来指定 Ubuntu 以及所需的版本:

docker-machine create --driver digitalocean --digitalocean-image ubuntu-18-04-x64 --digitalocean-access-token $DOTOKEN machine-name

基本操作系统不是您唯一的选择。 您还可以指定 Droplet 的大小。 默认情况下,它是最小的 Droplet,具有 1 GB RAM、单个 CPU 和 25 GB SSD。

通过在 DigitalOcean API 文档 中查找相应的 slug 找到您想要使用的 Droplet 的大小。

例如,要配置具有 2 GB RAM、两个 CPU 和 60 GB SSD 的机器,请使用 slug s-2vcpu-2gb

docker-machine create --driver digitalocean --digitalocean-size s-2vcpu-2gb --digitalocean-access-token $DOTOKEN machine-name

要查看特定于使用 DigitalOcean 驱动程序创建 Docker 机器的所有标志,请键入:

docker-machine create --driver digitalocean -h

提示: 如果刷新 DigitalOcean 仪表板的 Droplet 页面,您应该会看到使用 docker-machine 命令创建的新主机。


第 5 步 — 执行其他 Docker 机器命令

您已经了解了如何使用 create 子命令配置 Dockerized 主机。 您还看到了如何使用 ls 子命令列出 Docker Machine 可用的主机。 在此步骤中,您将了解更多其他 docker-machine 子命令。

要获取有关 Dockerized 主机的详细信息,请使用 inspect 子命令,如下所示:

docker-machine inspect machine-name

输出应该包括这样的行。 Image 行显示了使用的 Linux 发行版的版本:

Output{
    "ConfigVersion": 3,
    "Driver": {
        "IPAddress": "203.0.113.71",
        "MachineName": "centos-docker",
        "SSHUser": "root",
        "SSHPort": 22,
        ...
        "Image": "centos-7-0-x64",
        "Size": "s-1vcpu-1gb",
        ...
    },

---

要打印主机的连接配置,请键入:

docker-machine config machine-name

输出应该与此类似:

Output--tlsverify
--tlscacert="/home/kamit/.docker/machine/certs/ca.pem"
--tlscert="/home/kamit/.docker/machine/certs/cert.pem"
--tlskey="/home/kamit/.docker/machine/certs/key.pem"
-H=tcp://203.0.113.71:2376

docker-machine config 命令输出的最后一行显示主机的 IP 地址,但您也可以通过键入以下内容获取该信息:

docker-machine ip machine-name

如果需要关闭远程主机,可以使用 docker-machine 来停止它:

docker-machine stop machine-name

验证它是否已停止。

docker-machine ls

主机状态发生了变化:

OuputNAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
centos-docker                  digitalocean   Timeout

重新开始:

docker-machine start machine-name

验证它是否已启动:

docker-machine ls

您将看到 STATE 现在为主机设置了 Running

OuputNAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS

centos-docker         -        digitalocean   Running    tcp://203.0.113.71:2376            v18.05.0-ce

最后,如果要删除主机:

docker-machine rm machine-name

第 6 步 — 通过 SSH 在 Dockerized 主机上执行命令

此时,您已经获得了有关主机的信息,但您可以做的还不止这些。 例如,您可以在本地系统中使用 docker-machinessh 子命令在 Docker 主机上执行本机 Linux 命令。 本节介绍如何通过 docker-machine 执行 ssh 命令,以及如何打开与 Dockerized 主机的 SSH 会话。

假设您已经配置了一个使用 CentOS 作为操作系统的主机,请从本地系统执行以下命令来更新 Docker 主机上的软件包:

docker-machine ssh machine-name yum update

不确定您的远程 Docker 主机使用的是什么内核? 键入以下内容:

docker-machine ssh machine-name uname -r

除了使用 ssh 子命令在远程 Docker 主机上执行命令外,您还可以使用它来登录 Dockerized 主机本身。 这就像输入一样简单:

docker-machine ssh machine-name

您的命令提示符将更改以反映您已登录到远程主机的事实:

root@machine-name#

要退出远程主机,请键入:

exit

第 7 步 — 激活 Dockerized 主机

激活 Docker 主机将本地 Docker 客户端连接到该系统,这样就可以在远程系统上运行正常的 docker 命令。 要激活 Docker 主机,请键入以下命令:

eval $(docker-machine env machine-name)

或者,您可以使用以下命令激活它:

docker-machine use machine-name

Tip 使用多个 Docker 主机时,docker-machine use 命令是从一个切换到另一个的最简单方法。


键入上述任何命令后,您的 bash 提示符应更改以指示您的 Docker 客户端指向远程 Docker 主机。 它将采取这种形式。 主机名将在提示符的末尾:

username@localmachine:~ [machine-name]$

现在,您在此命令提示符下键入的任何 docker 命令都将在该远程主机上执行。

如果主机在运行docker-machine ls命令的终端上处于活动状态,则ACTIVE列下的星号表示它是活动的。

Output NAME         ACTIVE            DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
centos-docker   *        digitalocean   Running    tcp://203.0.113.71:2376            v18.05.0-ce

注意: 当主机处于活动状态时,您在正在使用的终端上键入的任何 docker 命令都将在远程主机上执行。 但是,所有正常的 Linux 命令都在本地计算机上执行。


要退出远程 Docker 主机,请键入以下内容:

docker-machine use -u

您将返回到本地系统的提示符。

现在让我们在远程机器上创建容器。

第 8 步 — 在远程 Dockerized 主机上创建 Docker 容器

到目前为止,您已经在您的 DigitalOcean 帐户上配置了一个 Dockerized Droplet,并且您已经激活了它——也就是说,您的 Docker 客户端指向它。 下一个合乎逻辑的步骤是在其上启动容器。 例如,让我们尝试运行官方的 Nginx 容器。

使用 docker-machine use 选择您的远程机器:

docker-machine use machine-name

现在执行此命令以在该机器上运行 Nginx 容器:

docker run -d -p 8080:80 --name httpserver nginx

在此命令中,我们将 Nginx 容器中的端口 80 映射到 Dockerized 主机上的端口 8080,以便我们可以从任何地方访问默认的 Nginx 页面。

如果命令执行成功,您将能够通过将 Web 浏览器指向 http://docker_machine_ip:8080 来访问默认的 Nginx 页面。

虽然 Docker 主机仍处于激活状态(如提示中的名称所示),您应该能够列出该主机上的图像:

docker images

输出应该包括您刚刚使用的 Nginx 图像,以及您之前下载的其他图像:

OutputREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ae513a47849c        3 weeks ago         109MB

您还可以列出主机上的活动或正在运行的容器:

docker ps

如果您在此步骤中运行的 Nginx 容器是唯一的活动容器,则输出应如下所示:

OutputCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
4284f9d25548        nginx               "nginx -g 'daemon of…"   20 minutes ago      Up 20 minutes       0.0.0.0:8080->80/tcp   httpserver

要退出远程主机的提示,请键入 exit。 这也将关闭终端:

exit

提示: 如果你打算在远程主机上创建容器,你的 Docker 客户端 必须 指向它——也就是说,它必须是你所在终端中的活动主机使用。 否则,您将在本地计算机上创建容器。 让您的命令提示符成为您的向导。


第 9 步 — 禁用崩溃报告(可选)

默认情况下,每当尝试使用 Docker Machine 配置 Dockerized 主机失败或 Docker Machine 崩溃时,一些诊断信息会自动发送到 Bugsnag 上的 Docker 帐户。 如果您对此不满意,可以通过在安装 .docker/machine 目录下创建一个名为 no-error-report 的空文件来禁用报告。

为此,只需键入:

touch ~/.docker/machine/no-error-report

如果配置失败或 Docker 机器崩溃,请检查文件中的错误消息。

结论

这是对安装和使用 Docker Machine 从一个本地系统远程配置多个 Docker Droplet 的介绍。 现在,您应该能够根据需要在您的 DigitalOcean 帐户上快速配置尽可能多的 Dockerized 主机。

有关 Docker Machines 的更多信息,请访问 官方文档页面 。 本教程下载的三个 bash 脚本托管在 这个 GitHub 页面 上。