5款超好用的开源 Docker工具强烈推荐
导读
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,你需要执行以下命令:
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可以监视的容器。
dockerrun-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来查找所有可以删除的容器和镜像,命令如下:
dockerrun--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要删除的内容。上述命令的输出如下所示:
\[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执行清空操作。
dockerrun--rm-v/var/run/docker.sock:/var/run/docker.sockspotify/docker-gc
docker-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(如下所示):
docker-slimbuild--http-probefriendlyhello
docker-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命令:
brewtapgrammarly/tap$brewinstallgrammarly/tap/rocker
一旦完成安装,你就可以通过传递Rockerfile使用Rocker来构建镜像了:
FROMpython:2.7-slimWORKDIR/appADD./appRUNpipinstall-rrequirements.txtEXPOSE80ENVNAMEWorldCMD\["python","app.Py"\]TAGshekhargulati/friendlyhello:{{.VERSION}}PUSHshekhargulati/friendlyhello:{{.VERSION}}
若要构建一个镜像并将其推送到DockerHub,你可以运行以下命令:
rockerdbuild--push-varVERSION-1.0
GitHub地址:https://github.com/grammarly/rocker
ctop(容器的类顶层接口)
ctop是我最近开始使用的一个工具,它能够提供多个容器的实时指标视图。如果你是一个Mac用户,可以使用brew安装,如下所示:
brewinstallctop
一旦完成安装,就可以开始使用ctop了。现在,你只需要配置DOCKER_HOST环境变量。
你可以运行ctop命令,查看所有容器的状态。
若只想查看正在运行的容器,可以使用ctop-a命令。
ctop是一个简单的工具,对于了解在你的主机上运行的容器很有帮助。你可以在ctop文档中了解更多相关信息:
github.com/bcicen/ctop/blob/master/README.md
GitHub地址:https://github.com/bcicen/ctop
到此这篇关于5款超好用的开源Docker工具强烈推荐的文章就介绍到这了,更多相关开源Docker工具内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。