介绍
dry是一个简单但广泛的终端应用程序,用于与Docker容器及其图像进行交互。 使用dry可以消除执行常规Docker Engine命令时涉及的重复,并且还提供了本地Docker CLI的更多可视替代方案。
dry能够快速启动和停止容器,安全或强制删除删除的Docker映像,持续监视实时容器进程,并访问Docker的info
, inspect
, history
和log
命令的输出。
大多数可以通过官方Docker Engine CLI执行的命令可以在干燥状态下更容易地获得,并具有相同的行为和结果。 另外Dry还具有Docker Swarm功能,提供一个监视和管理多主机容器设置的socket。
在本教程中,我们将安装干燥并探索其最有用的功能:
- 与Docker容器,图像和网络进行交互,
- 监控Docker容器和
- 可选地,与Docker Swarm节点和服务进行交互。
先决条件
要学习本教程,您需要:
- 一台Ubuntu 16.04服务器使用Ubuntu 16.04的初始服务器设置进行设置 ,其中包括sudo非root用户和防火墙。
- Docker的安装,如在Ubuntu 16.04上如何安装和使用Docker 。
- 几个活动的Docker容器联网在一起测试干燥。
- 作为本教程中的一个示例,我们将使用WordPress 14.04上的如何在Docker Compose中安装Wordpress和PhpMyAdmin来使用WordPress和PHPMyAdmin安装程序(不包括文档根目录的可选步骤)。
- 或者,您可以使用您自己的现有容器设置。
- 可选地,本地计算机上的Docker Machine和使用Docker Swarm的Docker设置。 如果您在最后一步尝试干燥的Swarm功能,这是必需的。 您可以通过在Ubuntu 16.04上遵循如何配置和管理远程Docker主机与Docker Machine以及如何 在Ubuntu 16.04上 使用Docker Swarm和DigitalOcean创建Docker容器集群来进行设置 。
第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
是用于存储服务器本地程序的二进制文件的标准位置。 将干二进制文件移动到该目录也使我们能够从服务器的任何位置在命令行上调用干,因为该目录包含在shell的$PATH
环境变量中 。
使用chmod
更改二进制文件的权限以允许您执行它。
sudo chmod 755 /usr/local/bin/dry
您可以通过使用-v
选项运行该程序来测试现在是否可以访问并正常工作。
dry -v
这将返回版本号和内部版本的详细信息:
Version Details Outputdry version 0.9-beta.2, build d4d7a789
现在干燥设置好了,让我们尝试使用它。
第2步 - 与Docker容器交互
跑干你的终端上的仪表盘。
dry
仪表板的顶部有关于服务器和Docker软件的信息,例如Docker版本,Docker Engine 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
刷新干燥显示。
当您首次开始干燥时,此仪表板本身默认为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
。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
访问Dry的Images
部分。
本部分提供了对docker image inspect
命令的更简单访问。 这里也有一些方便的键盘快捷键,您可以在导航栏中看到:
-
CTRL+D
用于Remove Dangling
,“悬挂卷”指的是其他容器卷不再由任何容器引用,因此是冗余的。通常在Docker中的命令行中,此操作将涉及docker volume rm
命令和dangling=true
旗帜,加上目标数据量。 -
Remove
CTRL+E
(相当于docker rmi
)允许您删除图像,只要没有从该图像创建的容器仍处于活动状态并正在运行。 -
CTRL+F
forForce Remove
,它可以让你像使用docker rmi --force
一样强制删除突出显示的图像。 -
I
forHistory
,它显示与”Containers
部分中的”Show Image History
“相同的数据。
到目前为止,我们已经看到干燥的容器和图像部分。 最后一节探索的是网络。
第4步 - 与Docker网络交互
从Images
部分,按3
访问Networks
部分。
本节非常适用于验证网络链接和 Docker容器的网络配置 。
您可以使用CTRL+E
从Docker中删除网络 ,但无法删除预定义的默认Docker网络(如bridge
。 然而,作为一个例子,你可以尝试用箭头键选择它并按ENTER
键来删除bridge
。 你会看到这样一段很长的输出:
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
关闭网络输出。 现在我们已经看了干燥的Containers
, Images
和Networks
部分,让我们继续干燥的监测功能。
第5步 - 监控Docker容器
按下M
键可快速查看当前服务器/主机上所有正在运行的容器。 此屏幕可以从任何干燥的根部分访问,如Containers
, Images
和Networks
。
这些信息的一部分在程序中的其他地方列出(例如在Stats + Top
容器选项中),但这个视图为所有容器的信息提供了一个中心位置,允许您监视整个。 这在管理大量容器时非常有用。
按Q
退出仪表板。 从这里开始,我们将使用Docker Swarm进行干燥。
第6步 - 在Docker Swarm Cluster Manager上安装dry(可选)
从本地计算机,用户docker-machine
到SSH到您指定的集群管理器节点。 在Docker Swarm的必备教程中,它被设置为node-1
。
docker-machine ssh node-1
为了演示安装干燥的另一种方法, curl
官方安装脚本并运行它。 如果你喜欢避免curl ... | sh
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
初始部分的右上角,现在填充在先前步骤中为空的Swarm
和Node role
状态行:
OutputSwarm: active
Node role: manager
Nodes: 3
您还将看到两个容器,其中列出了很长的图像名称。 其他三个容器分布在其他Swarm工作者节点中,并由先决条件教程中的webserver
示例服务定义。
集群管理器的干式安装已准备就绪,所以让我们看看接下来Docker Swarm如何干燥。
第7步 - 与Docker群集节点交互(可选)
从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
。
漏选项可防止节点从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
查看Dry的Services
部分。
先决条件教程仅设置一个服务webserver
,该服务设置为在必要时复制实例(即创建新容器),最多不超过五个。 该视图确认5/5
副本处于活动状态,并显示服务正在使用的端口映射以及分布式任务。
我们可以使用dry来查看关于服务的更多细节。 当webserver
服务突出显示时按ENTER
。
此详细服务视图包含有关服务状态和其Swarm节点的大量信息。
有趣的是,尽管服务设置为五,但您可能会注意到此处列出了七项任务。 这是因为当我们将node-2
切换到漏极模式时,Docker Swarm在第7步的测试中早些时候创建了两个额外的复制任务。
我们也可以使用dry来增加副本的最大数量。 按ESC
返回到Services
部分,然后在突出显示webserver
服务的同时输入CTRL+S
这将拉起缩放提示:
OutputScale service. Number of replicas?
在上下文中,扩展此服务将有助于满足由于网络流量不断增长而对额外资源的任何需求。 让我们通过在提示符中输入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集群管理器上进行了设置。 本教程还介绍了干函数的基本要素,如与Docker容器,图像和网络以及Docker Swarm节点和服务进行交互。
还有一种将干连接到运行Docker的远程主机的辅助方法,该方法在干运行时使用-H
选项和远程主机的IP地址。 这在您无法安装干燥二进制文件或无兴趣安装干燥二进制文件的情况下非常有用。
从这里开始,尝试将自己的Docker应用于自己的Docker设置,以探索如何简化工作流程。 您可以在GitHub自述文件中探索dry的额外键盘键。