湘情盾网络科技有限公司

5款超好用的开源Docker工具强烈推荐

作者:发布时间:2021-03-24 12:11:35点击:2009

Docker社区已经创建了许多开源工具,它们能帮我们处理各种用例。作者在本文中推荐了5款认为最有用的Docker工具,分别是Watchtower(自动更新Docker容器)、docker-gc(容器和镜像的垃圾回收)、docker-slim(容器瘦身)、rocker:突破Dockerfile的限制,以及ctop(容器的类顶层接口)。

Docker社区已经创建了许多开源工具,它们所能帮你处理的用例甚至会超出你的想象。

你可以在网上找到很多酷炫的Docker工具,其中大部分是开源的,都可以在Github上找到。在过去的两年里,我非常热衷于Docker,在大多数开发项目中都使用了它。当你开始使用Docker后,你会发现它适用的场景比你最初预想的还更多。你会希望Docker尽可能为你多做一点事,而它不会让你失望的!

Docker社区非常活跃,每天都会出现许多有用的工具,时时关注社区中发生的所有创新是很困难的。为了帮助你,我收集了一些我在日常工作中使用的又有趣又实用的Docker工具,这些工具提升了我的工作效率,减少了原本需要手工完成的工作。

watchtower(自动更新Docker容器)Watchtower监视运行容器并监视这些容器最初启动时的镜像有没有变动。当Watchtower检测到一个镜像已经有变动时,它会使用新镜像自动重新启动相应的容器。我想在我的本地开发环境中尝试最新的构建镜像,所以使用了它。

Watchtower本身被打包为Docker镜像,因此可以像运行任何其他容器一样运行它。要运行Watchtower,你需要执行以下命令:

1
dockerrun-d--namewatchtower--rm-v/var/run/docker.sock:/var/run/docker.sockv2tec/watchtower--interval3
在上面的命令中,我们使用一个挂载文件/var/run/docker.sock启动了Watchtower容器。这么做是有必要的,为的是使Watchtower可以与Docker守护API进行交互。我们将30秒传递给间隔选项interval。此选项定义了Watchtower的轮询间隔。Watchtower支持更多的选项,你可以根据文档中的描述来使用它们。

我们现在启动一个Watchtower可以监视的容器。

1dockerrun-p4000:80--namefriendlyhelloshekhargulati/friendlyhello:latest现在,Watchtower将开始温和地监控这个friendlyhello容器。当我将新镜像推送到DockerHub时,Watchtower在接下来的运行中将检测到一个新的可用的镜像。它将优雅地停止那个容器并使用这个新镜像启动容器。它将传递我们之前传递给这条run命令的选项。换句话说,该容器将仍然使用4000:80发布端口来启动。

默认情况下,Watchtower将轮询DockerHub注册表以查找更新的镜像。通过传递环境变量REPO_USER和REPO_PASS中的注册表凭据,可以将Watchtower配置为轮询私有注册表。

要了解更多Watchtower的相关信息,建议你阅读Watchtower文档

https://github.com/v2tec/watchtower/blob/master/README.md

GitHub地址:https://github.com/v2tec/watchtower

docker-gc(容器和镜像的垃圾回收)Docker-gc工具通过删除不需要的容器和镜像来帮你清理Docker主机。它会删除存在超过一个小时的所有容器。此外,它还删除不属于任何留置容器的镜像。

你可以将docker-gc作为脚本和容器来使用。我们将以容器的形式运行docker-gc。若要使用docker-gc来查找所有可以删除的容器和镜像,命令如下:

1dockerrun--rm-v/var/run/docker.sock:/var/run/docker.sock-eDRYRUN=1spotify/docker-gc上述命令中,我们加载了docker.sock文件,以便docker-gc能够与DockerAPI交互。我们传递了一个环境变量DRY_RUN=1来查找将被删除的容器和镜像。如果不提供该参数,docker-gc会删除所有容器和镜像。最好事先确认docker-gc要删除的内容。上述命令的输出如下所示:

1\[2017-04-28T06:27:24\]\[INFO\]:Thefollowingcontainerwouldhavebeenremoved0c1b3b0972bb792bee50860c35a4bc08ba32b527d53eab173d12a15c28deb931/vibrant_yonath\[2017-04-28T06:27:24\]\[INFO\]:Thefollowingcontainerwouldhavebeenremoved2a72d41e4b25e2782f7844e188643e395650a9ecca660e7a0dc2b7989e5acc28/friendlyhello_web\[2017-04-28T06:27:24\]\[INFO\]:Thefollowingimagewouldhavebeenremovedsha256:00f017a8c2a6e1fe2ffd05c281f27d069d2a99323a8cd514dd35f228ba26d2ff\[busybox:latest\]\[2017-04-28T06:27:24\]\[INFO\]:Thefollowingimagewouldhavebeenremovedsha256:4a323b466a5ac4ce65248dd970b538922c54e535700cafe9448b52a3094483ea\[hello-world:latest\]\[2017-04-28T06:27:24\]\[INFO\]:Thefollowingimagewouldhavebeenremovedsha256:4a323b466a5ac4ce65248dd970b538922c54e535700cafe9448b52a3094483ea\[python:2.7-slim\]如果你认同docker-gc清理方案,可以不使用DRY_RUN再次运行docker-gc执行清空操作。

1dockerrun--rm-v/var/run/docker.sock:/var/run/docker.sockspotify/docker-gcdocker-gc还支持一些其他的选项。建议你阅读docker-gc文档以了解更多相关信息:

https://github.com/spotify/docker-gc/blob/master/README.md

GitHub地址:https://github.com/spotify/docker-gc

docker-slim(面向容器的神奇减肥药)如果你担心你的Docker镜像的大小,docker-slim可以帮你排忧解难。

docker-slim工具使用静态和动态分析方法来为你臃肿的镜像瘦身。要使用docker-slim,可以从Github下载Linux或者Mac的二进制安装包。成功下载之后,将它加入到你的系统变量PATH中。

为举例需要,我参考Docker官方文档创建了一个名为friendlyhello的Docker镜像,该镜像大小为194MB(如下所示):

你可以看到,对于一个简单的应用程序,我们必须下载194MB的数据。让我们用docker-slim来看看它能减掉多少脂肪。

1docker-slimbuild--http-probefriendlyhellodocker-slim工具对胖镜像进行一系列的检查、测量,最终创建一个瘦版本的镜像。让我们看看这个减过肥的大小吧。

正如你所看到的,镜像大小被减少到24.9MB。你可以启动这个容器,它将以同样的方式运行。docker-slim工具支持Java、Python、Ruby和Node.js应用。

你自己试试,看看能减下来多少。在我的个人项目中,我发现它在大多数情况下都适用。你可以从其文档中了解更多关于docker-slim的信息:

https://github.com/docker-slim/docker-slim/blob/master/README.md

GitHub地址:https://github.com/docker-slim/docker-slim

rocker(突破Dockerfile的限制)大多数使用Docker的开发人员都使用Dockerfile来构建镜像。Dockerfile是一种声明式的方法,用于定义用户可以在命令行上调用的所有命令,从而组装镜像。

Rocker(https://github.com/grammarly/rocker)为Dockerfile指令集增加了新的指令。Grammarly为了解决他们遇到的Dockerfile格式的问题,创建了Rocker。Grammarly团队写了一篇深入的博客,解释他们创建它的原因。我建议你读一读,以更好地了解Rocker。他们在博文中强调了两个问题:

Docker镜像的大小。

缓慢的构建速度。

该博客还提到了Rocker加入的一些新指令。参考Rocker文档,了解Rocker支持的所有指令:

https://github.com/grammarly/rocker/blob/master/README.md

MOUNT用于在构建之间共享卷,以便能够被依赖项管理工具重用。

在Dockerfile中原本已有FROM指令。而Rocker使我们可以添加一条以上的FROM指令。这意味着你可以通过单个Rockerfile创建多个镜像。第一批指令用于构建产品所有的依赖;第二批指令用于构建产品;这能够极大地降低镜像大小。

TAG用于在构建的不同阶段标识镜像,这意味着你不必手动为每个镜像打标签。

PUSH用于将镜像推送到镜像仓库。

ATTACH使你能够交互式地运行中间步骤。这一点对于调试非常有用。

要使用Rocker,首先必须在你的机器上安装。对Mac用户来说,就是简单地运行几条brew命令:

1brewtapgrammarly/tap$brewinstallgrammarly/tap/rocker一旦完成安装,你就可以通过传递Rockerfile使用Rocker来构建镜像了:

1FROMpython:2.7-slimWORKDIR/appADD./appRUNpipinstall-rrequirements.txtEXPOSE80ENVNAMEWorldCMD\["python","app.Py"\]TAGshekhargulati/friendlyhello:{{.VERSION}}PUSHshekhargulati/friendlyhello:{{.VERSION}}若要构建一个镜像并将其推送到DockerHub,你可以运行以下命令:

1rockerdbuild--push-varVERSION-1.0GitHub地址:https://github.com/grammarly/rocker

ctop(容器的类顶层接口)ctop是我最近开始使用的一个工具,它能够提供多个容器的实时指标视图。如果你是一个Mac用户,可以使用brew安装,如下所示:

1brewinstallctop一旦完成安装,就可以开始使用ctop了。现在,你只需要配置DOCKER_HOST环境变量。

你可以运行ctop命令,查看所有容器的状态。

若只想查看正在运行的容器,可以使用ctop-a命令。

ctop是一个简单的工具,对于了解在你的主机上运行的容器很有帮助。你可以在ctop文档中了解更多相关信息:

github.com/bcicen/ctop/blob/master/README.md

GitHub地址:https://github.com/bcicen/ctop

北京BGP/天津BGP/高防服务器



湘情盾

在线客服:
点击这里给我发消息湘情盾-笑笑
点击这里给我发消息湘情盾-文
点击这里给我发消息湘情盾-峰
点击这里给我发消息湘情盾-嘟嘟
点击这里给我发消息湘情盾-小宋
点击这里给我发消息湘情盾-小洁
点击这里给我发消息湘情盾-迎彤
点击这里给我发消息湘情盾-9
点击这里给我发消息湘情盾-欣欣
点击这里给我发消息湘情盾-瑶瑶
点击这里给我发消息湘情盾-知若
点击这里给我发消息湘情盾-茂茂
点击这里给我发消息湘情盾-靓靓
点击这里给我发消息湘情盾-寒雪
点击这里给我发消息湘情盾-若兰
点击这里给我发消息湘情盾-冰巧
渠道合作:
点击这里给我发消息渠道合作
财务QQ:
点击这里给我发消息湘情盾-财务
技术支持:
点击这里给我发消息技术支持

售后服务热线:

0745-2261996

技术邮箱:Server@15dun.com

总公司地址:湖南省怀化市鹤城区人民路新悦城608号