如何在Ubuntu16.04上使用Dry管理和监控Docker容器

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

介绍

dry 是一个简单但广泛的终端应用程序,用于与 Docker 容器及其映像进行交互。 使用 dry 消除了执行例程 Docker 引擎命令 时所涉及的重复,并且还为原生 Docker CLI 提供了更直观的替代方案。

dry 能够快速启动和停止容器,安全或强制移除 remove Docker 镜像,持续监控实时容器进程,以及访问 Docker 的 infoinspecthistorylog 命令。

大多数可以通过官方 Docker 引擎 CLI 执行的命令都更容易在干中使用,具有相同的行为和结果。 dry 还具有 Docker Swarm 功能,提供监控和管理多主机容器设置的出口。

在本教程中,我们将干安装并探索它的一些最有用的功能:

  • 与 Docker 容器、图像和网络交互,
  • 监控 Docker 容器,以及
  • 可选地,与 Docker Swarm 节点和服务交互。

先决条件

要遵循本教程,您将需要:

第 1 步 — 干式安装

首先,我们需要在 Docker 服务器上安装 dry。 最新版本的干二进制文件可在 dry 的 GitHub 发布页面 上找到。

下载最新版本的 dry-linux-amd64 二进制文件,在发布时为 v0.9-beta.3

wget https://github.com/moncho/dry/releases/download/v0.9-beta.3/dry-linux-amd64

接下来,将新的二进制文件从 dry-linux-amd64 移动并重命名为 /usr/local/bin/dry

sudo mv dry-linux-amd64 /usr/local/bin/dry

/usr/local/bin 是用于存储服务器本地程序的二进制文件的标准位置。 将 dry 二进制文件移动到该目录还使我们能够从服务器内的任何位置在命令行上调用 dry,因为该目录包含在 shell 的 $PATH 环境变量 中。

使用 chmod 更改二进制文件的权限以允许您执行它。

sudo chmod 755 /usr/local/bin/dry

您可以通过运行带有 -v 选项的程序来测试 dry 现在是否可以访问并正常工作。

dry -v

这将返回版本号和构建详细信息:

Version Details Outputdry version 0.9-beta.2, build d4d7a789

现在已经设置了dry,让我们尝试使用它。

第 2 步 — 与 Docker 容器交互

跑干以在您的终端中调出其仪表板。

dry

仪表板的顶部有关于服务器和 Docker 软件的信息,例如 Docker 版本、Docker 引擎 API 版本、服务器是否是支持 Docker Swarm 的工作/管理器节点,以及服务器的主机名和资源。

仪表板的底部有一个导航键的参考,您可以使用它来访问干的不同部分:

Navigation key options[H]:Help [Q]:Quit | [F1]:Sort [F2]:Toggle Show Containers [F5]:Refresh [%]:Filter |
[m]:Monitor mode [2]:Images [3]:Networks [4]:Nodes [5]:Services | [Enter]:Commands 

如果渲染出现错误,您可以随时使用 F5 刷新dry的显示。


当您第一次开始干时,此仪表板本身默认为 Containers 列表。 此视图可让您查看主机容器的一般状态。

如果您使用必备教程中的示例 Wordpress、MariaDB 和 PHPMyAdmin 容器堆栈,您将看到列出的这三个新组合的容器:

使用键盘上的向上和向下箭头选择 Wordpress 容器,然后按 ENTER

这将在屏幕顶部显示有关容器的一些信息,例如其端口映射、网络链接和网络容器 IP 地址:

Wordpress Container Statistics  Container Name:  wordpress_wordpress_1                    ID:       f67f9914b57e       Status:  Up 13 minutes
  Image:           wordpress                                Created:  About an hour ago
  Command:         docker-entrypoint.sh apache2-foreground
  Port mapping:    0.0.0.0:8080->80/tcp
  Network Name:    bridge
  IP Address:     172.17.0.3
  Labels           6

当您选择一个容器时,屏幕的下方中心也会显示一个新的可选选项列表:

  • Fetch logs,相当于 Docker Engine 命令 docker logs。 这对于调试和排除容器中的错误很有用。
  • Kill container,如果容器没有响应并且没有按应有的方式退出,您可以使用它。
  • Remove container,您可以使用它来干净地删除不需要的容器。

WarningKill containerRemove Container选项即时下发,无确认提示,请谨慎。


  • Inspect container,相当于docker container inspect
  • Restart,停止并重新启动容器。 比输入 Docker 引擎命令 重新启动查询容器的状态 快得多。
  • Show image history,列出了用于构建容器镜像的命令。 这些“层”是在映像构建过程中生成的,并由 Dockerfile 中提供的命令/操作产生。 通过这个选项,我们可以看到容器是如何使用基础 Docker 镜像生成的。
  • Stats + Top,包括 CPU 使用率、内存消耗、入站和出站网络流量、文件系统操作、总进程 ID 和总容器正常运行时间等信息。 它还包括一个进程列表,其功能与 top 的输出相同。
  • Stop,停止容器。 您可以使用 F2 切换 Containers 视图上的容器以包含 currently stopped and active,并且您可以在选择后使用 Restart 选项重新启动已停止的容器.

ESC 键返回仪表板的根 Containers 部分。 从这里开始,我们将查看 Images 部分。

第 3 步 — 与 Docker 映像交互

Containers 部分,按 2 以访问干燥的 Images 部分。

本节提供对 docker 镜像检查命令 的更轻松访问。 dry 在这里也有一些方便的键盘快捷键,您可以在导航栏中看到:

  • CTRL+D 对于 Remove Dangling,“悬空卷”是指不再被任何容器引用的其他容器卷,因此是多余的。 通常在命令行中的 Docker 中,此操作将涉及 docker volume rm 命令和 dangling=true 标志,以及目标数据量。
  • RemoveCTRL+E 相当于 docker rmi ,只要没有从该映像创建的容器仍处于活动状态且正在运行,您就可以删除该映像。
  • CTRL+F for Force Remove,可以像使用 docker rmi --force 一样强制删除突出显示的图像。
  • I 用于 History,它显示与 Containers 部分中的 Show Image History 相同的数据。

到目前为止,我们已经看到了干燥的容器和图像部分。 最后要探索的部分是网络。

第 4 步 — 与 Docker 网络交互

Images 部分,按 3 以访问 Networks 部分。

本节非常适合 验证网络链接和 Docker 容器的网络配置

您可以使用 CTRL+E 从 Docker 删除网络,但不能删除预定义的默认 Docker 网络,例如 bridge。 但是,作为示例,您可以尝试删除 bridge,方法是使用箭头键选择它并按 ENTER。 你会看到一长段这样的输出:

Output. . .
    "Containers": {
        "34f8295b39b7c3364d9ceafd4e96194f210f22acc41d938761e1340de7010e05": {
            "Name": "wordpress_wordpress_db_1",
            "EndpointID": "68370df8a13b92f3dae2ee72ff769e5bdc00da348ef3e22fa5b8f7e9e979dbd5",
            "MacAddress": "02:42:ac:11:00:02",
            "IPv4Address": "172.17.0.2/16",
            "IPv6Address": ""
        },
        "e7105685e0e6397fd762949e869095aa4451a26cdacdad7f5e177bde52819c4a": {
            "Name": "wordpress_wordpress_1",
            "EndpointID": "44ea3a133d887c5352b8ccf70c94cda9f05891b2db8b99a95096a19d4a504e16",
            "MacAddress": "02:42:ac:11:00:04",
            "IPv4Address": "172.17.0.4/16",
            "IPv6Address": ""
        },
        "e7d65c76b50ff03fc50fc374be1fa4bf462e9454f8d50c89973e1e5693eef559": {
            "Name": "wordpress_phpmyadmin_1",
            "EndpointID": "7fb1b55dd92034cca1dd65fb0c824e87a9ba7bbc0860cd3ed34744390d670b78",
            "MacAddress": "02:42:ac:11:00:03",
            "IPv4Address": "172.17.0.3/16",
            "IPv6Address": ""
        }
    },
. . .

上面的输出部分显示了容器链接和容器 bridge 网络的网络 IP 地址和 MAC 地址。 由此可以验证所有的容器都是bridge网络的成员并且可以通信,这是容器网络有效的基本标志。

使用 ESC 关闭网络输出。 现在我们已经了解了 dry 的 ContainersImagesNetworks 部分,让我们继续了解 Dry 的监听功能。

第 5 步 — 监控 Docker 容器

M 键可以快速简要了解当前服务器/主机上所有正在运行的容器。 可以从dry的任何根部分访问此屏幕,例如ContainersImagesNetworks

此信息的一部分列在程序的其他位置(例如在 Stats + Top 容器选项中),但此视图提供了所有容器信息的中心位置,允许您监视整个堆栈。 这在管理大量容器时很有用。

Q 退出仪表板。 从这里开始,我们将使用 Docker Swarm 进行干式设置。

第 6 步 — 在 Docker Swarm 集群管理器上安装干式(可选)

从您的本地计算机,用户 docker-machine 通过 SSH 连接到您指定的集群管理器节点。 在 Docker Swarm 的先决条件教程中,将其设置为 node-1

docker-machine ssh node-1

演示另一种干式安装方法,curl官方安装脚本并运行。 如果您希望避免使用 curl ... | sh 模式,您可以按照步骤 1 进行干式安装。

curl -sSf https://moncho.github.io/dry/dryup.sh | sh

安装脚本会自动将干二进制移动到/usr/local/bin

Outputdryup: Moving dry binary to its destination
dryup: dry binary was copied to /usr/local/bin, now you should 'sudo chmod 755 /usr/local/bin/dry'

更新二进制文件的权限,就像我们在步骤 1 中所做的那样。

sudo chmod 755 /usr/local/bin/dry

现在尝试干涸。

dry

在初始 Containers 部分的右上角,在前面的步骤中为空白的 SwarmNode role 状态行现在被填充:

OutputSwarm:      active                                                                       
Node role:  manager                                                                     
Nodes:      3         

您还将看到列出的两个具有长图像名称的容器。 其他三个容器分布在其他 Swarm 工作节点中,由先决条件教程中的 webserver 示例服务定义。

集群管理器的dry安装已经准备好了,接下来让我们看看dry如何与Docker Swarm一起工作。

第 7 步 — 与 Docker Swarm 节点交互(可选)

Containers 部分,按 4 导航到 Nodes 部分。

本节显示每个节点的一些有用指标,例如其角色(经理或工作)、状态和可用性。 屏幕顶部的行显示资源消耗信息。

在此处,使用箭头键选择 node-2,然后按 ENTER。 这将拉起单个节点的任务:

webserver 服务方面,node-2 持有五个联网容器中的第一个和第二个。 此视图中的任务显示两个容器的 CURRENT STATE 处于活动状态,并列出它们运行了多长时间。 此处您自己的容器名称的编号可能会有所不同。 这取决于容器分配到哪个工作节点,由Docker服务命令确定。

ESC 返回 Nodes 部分,这样我们可以在这里探索一些 Dry 的键绑定。

使用 Docker Swarm 时的一项常见任务是更改某些节点的状态或可用性。 再次高亮显示node-1并按CTRL+A可以看到Set Availability提示。

OutputChanging node availability, please type one of ('active'|'pause'|'drain')

输入 drain 并用 ENTER 确认。

drain 选项阻止节点接收来自 Swarm 集群管理器的新指示,通常用于计划维护。 使用 drain 还意味着节点管理器在设置为活动可用性的单独节点上启动副本,以补偿耗尽节点的临时停机时间。

当您提交 drain 命令时,左上方的状态消息将确认该操作:

您将在左上方显示的状态消息中看到此操作的确认。 此更改也反映在 AVAILABILITY 列中:

OutputNode iujfrchorop9mzsjswrclzcmb availability is now drain

您还会注意到 AVAILABILITY 列中反映的变化。

要恢复 node-2,再次突出显示它并按 CTRL+A 以恢复 Set Availability 提示。 这次,键入 active 并按 ENTER

您还会看到此操作的确认消息:

OutputDocker daemon: update wrclzcmb availability is now active 

我们没有使用的选项 pause 会暂时停止在节点中找到的每个容器内的所有进程,直到它们再次设置为 active

在最后一步中,我们将与 Docker Swarm 服务交互。

第 8 步 — 与 Docker Swarm 服务交互(可选)

5查看干的Services部分。

先决条件教程只设置了一个服务,webserver,设置为复制实例(即 创建新容器)在必要时最多五个。 此视图确认 5/5 副本处于活动状态,并显示服务正在使用的端口映射及其分布式任务。

我们可以使用 dry 来查看有关该服务的更多详细信息。 当 webserver 服务突出显示时,按 ENTER

这个详细的服务视图包含大量关于服务状态及其 Swarm 节点的信息。

有趣的是,您可能会注意到这里列出了七个任务,尽管服务设置为五个。 这是因为 Docker Swarm 在第 7 步的测试中创建了两个额外的副本任务,当时我们将 node-2 切换到排水模式。

我们也可以使用 dry 来增加最大副本数。 按 ESC 返回 Services 部分,然后在突出显示 webserver 服务的同时输入 CTRL+S。 这将拉起缩放提示:

OutputScale service. Number of replicas?

在上下文中,扩展此服务将有助于满足由于不断增长的 Web 流量而对额外资源的任何需求。 让我们通过在提示符中输入 8 并按 ENTER 将副本数增加到 8 个。

检查此确认消息以确认操作:

OutputDocker daemon: update v6gbc1ms0pi scaled to 8 replicas

您现在可以看到 Services 视图列出了服务的 8/8 副本。

如果要完全删除服务,请突出显示它并按 CTRL+R 拉出服务删除提示:

OutputAbout to remove the selected service. Do you want to proceed? y/N

如果您不再需要或想要运行它,您可以使用它来删除 webserver 服务。

最后,按 Q 退出仪表板并退出程序。

结论

按照本教程,您已经在 Docker 主机和 Docker Swarm 集群管理器上进行了干设置。 本教程还涵盖了 Dry 功能的基本要素,例如与 Docker 容器、图像和网络以及 Docker Swarm 节点和服务进行交互。

还有一种干式连接到运行 Docker 的远程主机的辅助方法,即在干式运行时使用带有远程主机 IP 地址的 -H 选项。 这在您无法或对安装干二进制文件不感兴趣的情况下很有用。

从这里开始,尝试将 dry 应用于您自己的 Docker 设置,以探索它如何简化您的工作流程。 您可以在 GitHub README 中探索 dry 的额外键绑定。