dry是一个简单但广泛的终端应用程序,用于与Docker容器及其映像交互。使用dry会删除执行常规Docker Engine命令时所涉及的重复,并且还提供了更原始的Docker CLI的可视替代方案。
dry具有快速启动和停止容器的能力,可以安全或强制删除Docker镜像,持续实时监测容器进程,并访问Docker的info,inspect,history,和log命令的输出结果。
大多数可以通过官方Docker Engine CLI执行的命令在dry上更容易获得,且具有相同的行为和结果。dry还具有Docker Swarm功能,提供监视和管理多主机容器设置的接口。
在本教程中,我们将安装dry并探索一些比较有用的功能:
要学习本教程,您需要:
首先,我们需要在Docker服务器上安装dry。
下载最新版本的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 Output
dry version 0.9-beta.2, build d4d7a789
现在我们已经设置dry,让我们尝试来使用它。
运行dry并将其仪表板显示在终端中。
$ dry
仪表板顶部有关于服务器和Docker软件的信息,如Docker版本,Docker Engine API版本,服务器是否支持Docker Swarm的工作者/管理器节点,以及服务器的主机名和资源。
仪表板底部有一个导航键参考,您可以使用它来访问dry的不同部分:
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地址:
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
部分。
从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的容器和图像部分。最后一节要探索的是它的网络。
从Images部分,按3以访问Networks部分。
本节适用于验证网络链接和Docker容器的网络配置。
您可以使用CTRL +E
从Docker中删除网络,但是您无法删除预定义的默认Docker网络,例如bridge。但是,作为示例,您可以尝试删除bridge,其方法是使用箭头键选择并按下ENTER。你会看到这样一个很长的输出结果:
. . .
"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的Containers
,Images
和Networks
部分,让我们继续讨论dry的监视功能。
按M
键可快速概览当前服务器/主机上所有正在运行的容器。可以从dry的任何根部分访问此屏幕,如Containers,Images和Networks。
此信息的某些部分列在程序的其他位置(例如Stats + Top容器选项内),但此视图提供了有关所有容器的信息的中心位置,这允许您监视整个堆栈。这在管理大量容器时非常有用。
按Q
键退出仪表板。从这里开始,我们将使用Docker Swarm设置dry。
从本地计算机,用户docker-machin
e到SSH到指定的集群管理器节点。 在Docker Swarm的准备教程中,将其设置为node-1
。
$ docker-machine ssh node-1
要演示另一种安装dry的方法,请使用curl
命令安装官方脚本并运行它。如果您希望避免使用curl...|sh
样式,可以按照第一步进行dry的安装。
root@ curl -sSf https://moncho.github.io/dry/dryup.sh | sh
安装脚本会自动将dry二进制文件移动到/usr/local/bin
:
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'
更新二进制文件的权限,就像我们在第一步中所做的那样。
root@node-1:~# sudo chmod 755 /usr/local/bin/dry
现在尝试运行dry。
root@node-1:~# dry
在初始Containers
部分的右上方,现在填充了先前步骤中为空白的Swarm和Node role
的角色状态行:
Swarm: active
Node role: manager
Nodes: 3
您还会看到列出了长镜像名称的两个容器。其他三个容器分布在其他Swarm工作节点中,并由准备教程中webserver
的示例服务定义。
集群管理器中的dry安装已经准备就绪,让我们看看接下来如何使用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
提示。
Changing node availability, please type one of ('active'|'pause'|'drain')
输入drain
并按ENTER
键确认。
drain选项可防止节点从Swarm集群管理器接收新指示,通常用于计划的维护。使用drain还意味着节点管理器在设置为活动可用性的单独节点上启动副本,以补偿耗尽节点的临时停机时间。
提交drain
命令时,左上角的状态消息将确认操作:
您将在左上方显示的状态消息中看到此操作的确认信息。此更改也反映在AVAILABILITY
列中:
Node iujfrchorop9mzsjswrclzcmb availability is now drain
您还会注意到AVAILABILITY列中反映的更改。
要重新启动node-2,请再次高亮显示它,然后按下CTRL+A
以返回Set Availability提示。这次,输入active
并按ENTER
键。
您还会看到此操作的确认消息:
Docker daemon: update wrclzcmb availability is now active
我们没有使用的选项,pause
,暂时停止在节点中找到的每个容器中的所有进程,直到它们再次被设置为active
为止。
在最后一步中,我们将在dry中与Docker Swarm服务进行交互。
按5查看dry中的Services
部分。
准备教程仅设置一个服务,即webserver
,它被设置为在必要时复制实例(即创建新容器),其最多为五个。此视图确认了5/5副本处于活动状态,并显示服务正在使用的端口映射及其分布式任务。
我们可以使用dry来查看有关该服务的更多细节。高亮显示webserver
服务时按ENTER
键。
此详细服务视图包含有关服务状态及其Swarm节点的大量信息。
有趣的是,您可能会注意到此处列出了七个任务,尽管服务只设置为五个。这是因为当我们切换node-2
到drain模式时,Docker Swarm在第七步中的测试之前创建了两个额外的副本任务。
我们也可以使用dry来增加副本的最大数量。按ESC键返回到该Services部分,然后高亮显示webserver服务时输入CTRL+ S
. 这将显示缩放提示:
Scale service. Number of replicas?
在上下文中,扩展此服务对于满足由于不断增长的Web流量而对其他资源的任何需求将是有用的。让我们通过在提示符中输入8
并按ENTER
键将副本数量增加到8。
检查此确认消息以确认操作:
Docker daemon: update v6gbc1ms0pi scaled to 8 replicas
您现在可以看到Services
视图列表8/8列出了该服务的副本。
如果要完全删除服务,请高亮显示该服务,然后按CTRL+R
键以提取服务删除提示:
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 删除。