前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 16.04上使用dry管理和监控Docker容器

如何在Ubuntu 16.04上使用dry管理和监控Docker容器

原创
作者头像
谢鸢
修改2018-08-09 16:17:53
9390
修改2018-08-09 16:17:53
举报
文章被收录于专栏:云计算教程系列

介绍

dry是一个简单但广泛的终端应用程序,用于与Docker容器及其映像交互。使用dry会删除执行常规Docker Engine命令时所涉及的重复,并且还提供了更原始的Docker CLI的可视替代方案。

dry具有快速启动和停止容器的能力,可以安全或强制删除Docker镜像,持续实时监测容器进程,并访问Docker的info,inspect,history,和log命令的输出结果。

大多数可以通过官方Docker Engine CLI执行的命令在dry上更容易获得,且具有相同的行为和结果。dry还具有Docker Swarm功能,提供监视和管理多主机容器设置的接口。

在本教程中,我们将安装dry并探索一些比较有用的功能:

  • 与Docker容器,镜像和网络交互,
  • 监控Docker容器
  • (可选)与Docker Swarm节点和服务进行交互。

准备

要学习本教程,您需要:

  • 一个Ubuntu 16.04服务器,包括一个使用sudo命令的非root用户。
  • 安装Docker
  • 几个活跃的Docker容器联网在一起对dry进行测试。
  • 使用自己现有的容器设置。
  • (可选)本地计算机上的Docker Machine和使用Docker Swarm的Docker设置。如果你在最后一步尝试dry的Swarm功能,这是非常必要的。

第一步 - 安装dry

首先,我们需要在Docker服务器上安装dry。

下载最新版本的dry-linux-amd64二进制文件,即v0.9-beta.3版本。

代码语言:txt
复制
$ wget https://github.com/moncho/dry/releases/download/v0.9-beta.3/dry-linux-amd64

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

代码语言:txt
复制
$ sudo mv dry-linux-amd64 /usr/local/bin/dry

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

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

代码语言:txt
复制
$ sudo chmod 755 /usr/local/bin/dry

您可以通过使用-v选项运行程序来测试现在可以访问dry并正常工作。

代码语言:txt
复制
$ dry -v

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

代码语言:txt
复制
Version Details Output
dry version 0.9-beta.2, build d4d7a789

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

第二步 - 与Docker容器交互

运行dry并将其仪表板显示在终端中。

代码语言:txt
复制
$ dry

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

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

代码语言:txt
复制
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显示。首次启动Dry时,此仪表板本身默认为Containers列表。

通过此视图,您可以查看主机容器的常规状态。

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

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

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

代码语言:txt
复制
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,您可以使用它来干净地删除不需要的容器。

警告:Kill container和Remove Container选项会立即执行,并没有确认提示,所以要注意。

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

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

第三步 - 与Docker镜像交互

Containers部分,按下2进入dry的Images部分。

本节提供了对docker image inspect命令的更简单访问。这里也有一些方便的键盘快捷键,您可以在导航栏中看到:

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

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

第四步 - 与Docker Networks交互

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

本节适用于验证网络链接和Docker容器的网络配置。

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

代码语言:txt
复制
. . .
    "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的监视功能。

第五步 - 监控Docker容器

M键可快速概览当前服务器/主机上所有正在运行的容器。可以从dry的任何根部分访问此屏幕,如Containers,Images和Networks。

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

Q键退出仪表板。从这里开始,我们将使用Docker Swarm设置dry。

第六步- 在Docker Swarm Cluster Manager上安装dry(可选)

从本地计算机,用户docker-machine到SSH到指定的集群管理器节点。 在Docker Swarm的准备教程中,将其设置为node-1

代码语言:txt
复制
$ docker-machine ssh node-1

要演示另一种安装dry的方法,请使用curl命令安装官方脚本并运行它。如果您希望避免使用curl...|sh样式,可以按照第一步进行dry的安装。

代码语言:txt
复制
root@ curl -sSf https://moncho.github.io/dry/dryup.sh | sh

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

代码语言:txt
复制
dryup: 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'

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

代码语言:txt
复制
root@node-1:~#  sudo chmod 755 /usr/local/bin/dry

现在尝试运行dry。

代码语言:txt
复制
root@node-1:~# dry

在初始Containers部分的右上方,现在填充了先前步骤中为空白的Swarm和Node role的角色状态行:

代码语言:txt
复制
Swarm:      active                                                                       
Node role:  manager                                                                     
Nodes:      3     

您还会看到列出了长镜像名称的两个容器。其他三个容器分布在其他Swarm工作节点中,并由准备教程中webserver的示例服务定义。

集群管理器中的dry安装已经准备就绪,让我们看看接下来如何使用Docker Swarm。

第七步 - 与Docker Swarm节点交互(可选)

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

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

从这里,使用箭头键选择node-2,然后按ENTER键。这将拉出单个节点的任务:

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

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

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

代码语言:txt
复制
Changing node availability, please type one of ('active'|'pause'|'drain')

输入drain并按ENTER键确认。

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

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

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

代码语言:txt
复制
Node iujfrchorop9mzsjswrclzcmb availability is now drain

您还会注意到AVAILABILITY列中反映的更改。

要重新启动node-2,请再次高亮显示它,然后按下CTRL+A以返回Set Availability提示。这次,输入active并按ENTER键。

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

代码语言:txt
复制
Docker daemon: update wrclzcmb availability is now active 

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

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

第八步 - 与Docker Swarm服务交互(可选)

按5查看dry中的Services部分。

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

我们可以使用dry来查看有关该服务的更多细节。高亮显示webserver服务时按ENTER键。

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

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

我们也可以使用dry来增加副本的最大数量。按ESC键返回到该Services部分,然后高亮显示webserver服务时输入CTRL+ S. 这将显示缩放提示:

代码语言:txt
复制
Scale service. Number of replicas?

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

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

代码语言:txt
复制
Docker daemon: update v6gbc1ms0pi scaled to 8 replicas

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

如果要完全删除服务,请高亮显示该服务,然后按CTRL+R键以提取服务删除提示:

代码语言:txt
复制
About to remove the selected service. Do you want to proceed? y/N

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

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

结论

按照本教程,您已经在Docker主机和Docker Swarm集群管理器上设置了dry。本教程还介绍了dry的功能的一些基本知识,例如与Docker容器,图像和网络以及Docker Swarm节点和服务进行交互。

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


参考文献:《How to Manage and Monitor Docker Containers with dry on Ubuntu 16.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步 - 安装dry
  • 第二步 - 与Docker容器交互
  • 第三步 - 与Docker镜像交互
  • 第四步 - 与Docker Networks交互
  • 第五步 - 监控Docker容器
  • 第六步- 在Docker Swarm Cluster Manager上安装dry(可选)
  • 第七步 - 与Docker Swarm节点交互(可选)
  • 第八步 - 与Docker Swarm服务交互(可选)
  • 结论
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档