Docker社区创建了许多开源工具,可以帮助我们处理各种用例。在这篇文章中,作者推荐了5个他认为最好用的Docker工具,分别是Watchtower(自动更新Docker容器)、docker-gc(容器和镜像的垃圾收集)、docker-slim(容器瘦身)、rocker:breaking通过Dockerfile限制和ctop(容器的类顶级接口)。Docker社区创建了许多开源工具,可以帮助您处理超出您想象的更多用例。你可以在网上找到很多很酷的Docker工具,其中大部分都是开源的,可以在Github上找到。在过去的两年里,我一直对Docker充满热情,并且在我的大部分开发项目中都使用了它。当你开始使用Docker时,你会发现它适用于比你最初想象的更多的场景。您会希望Docker为您做尽可能多的事情,它不会让您失望的!Docker社区非常活跃,每天都会涌现出如此多的有用工具,因此很难跟踪社区中发生的所有创新。为了帮助您,我收集了一些有趣且有用的Docker工具,我在日常工作中使用这些工具来提高我的工作效率并减少手动完成的工作。这里有五个有用的工具,我想推荐给你。1.watchtower:自动更新Docker容器watchtower监控正在运行的容器,监控这些容器最初启动时的镜像是否发生了变化。当Watchtower检测到图像发生变化时,它会自动使用新图像重新启动相应的容器。我想在我的本地开发环境中试用最新的构建映像,所以使用了它。Watchtower本身被打包为Docker镜像,因此它可以像任何其他容器一样运行。要运行Watchtower,需要执行以下命令:$dockerrun-d--namewatchtower--rm-v/var/run/docker.sock:/var/run/docker.sockv2tec/watchtower--interval30在上面命令,我们使用挂载文件/var/run/docker.sock启动了Watchtower容器。这是必要的,以便Watchtower可以与Docker守护进程API交互。我们将30秒传递给间隔选项间隔。此选项定义Watchtower的轮询间隔。Watchtower支持更多选项,您可以根据文档中的描述使用它们。我们现在启动一个Watchtower可以监控的容器。$dockerrun-p4000:80--namefriendlyhelloshekhargulati/friendlyhello:latest现在,Watchtower将开始监控friendlyhello容器。当我将新图像推送到DockerHub时,Watchtower将在后续运行中检测到新的可用图像。它将优雅地停止该容器并使用这个新图像启动容器。它将传递我们之前传递给此运行命令的选项。换句话说,容器仍将使用4000:80发布的端口启动。默认情况下,Watchtower将轮询DockerHub注册表以获取更新的图像。Watchtower可以配置为通过在环境变量REPO_USER和REPO_PASS中传递注册表凭据来轮询私有注册表。想要了解更多关于Watchtower的信息,建议阅读Watchtower文档https://github.com/v2tec/watchtower/blob/master/README.mdGitHub地址:https://github.com/v2tec/watchtower2.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将删除所有容器和镜像。It'sbesttoconfirminadvancewhatdocker-gcwillremove.上述命令的输出如下所示:[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]:下图会被移除sha256:4a323b466a5ac4ce65248dd970b538922c54e535700cafe9448b52a3094483ea[python:2.7-slim]如果你同意清理解决方案,你可以运行docker-gc再次使用docker而不使用DRY_RUNgc$dockerrun--rm-v/var/run/docker.sock:/var/run/docker.sockspotify/docker-gcdocker-gc还支持其他一些选项。推荐阅读docker-gc文档获取更多信息:https://github.com/spotify/docker-gc/blob/master/README.mdGitHub地址:https://github.com/spotify/docker-气相色谱3。docker-slim:容器的神奇减肥药如果您担心Docker镜像的大小,docker-slim可以帮助您。docker-slim工具使用静态和动态分析方法来瘦身你臃肿的图像。要使用docker-slim,您可以从Github下载Linux或Mac二进制安装包。下载成功后,将其添加到系统变量PATH中。为了举例,我参考Docker官方文档创建了一个名为friendlyhello的Docker镜像,大小为194MB(如下图):可以看到对于一个简单的应用,我们要下载194MB的数据。让我们使用docker-slim看看它能减掉多少脂肪。$docker-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.mdGitHub地址:https://github.com/docker-slim/docker-苗条4。rocker:突破Dockerfile的局限大多数使用Docker的开发者都使用Dockerfile来构建镜像。Dockerfile是一种声明性方法,用于定义用户可以在命令行上调用以组装图像的所有命令。Rocker(https://github.com/grammarly/rocker)向Dockerfile指令集添加新指令。Grammarly创建了Rocker来解决他们在Dockerfile格式方面遇到的问题。Grammarly团队撰写了一篇深入的博客,解释了他们创建它的原因。我建议您阅读它以更好地理解Rocker。在他们的博客文章中,他们强调了两个问题:Docker镜像大小。构建速度慢。该博客还提到了Rocker添加的一些新指令。有关Rocker支持的所有指令,请参阅Rocker文档:https://github.com/grammarly/rocker/blob/master/README.mdMOUNT用于在构建之间共享卷,以便它们可以被依赖管理工具重用。原来Dockerfile中有一条FROM指令。而Rocker允许我们添加多个FROM指令。这意味着您可以从单个Rockerfile创建多个图像。第一批指令用于构建产品的所有依赖项;第二批指令用于构建产品;这可以大大减小图像的大小。TAG用于在构建的不同阶段识别图像,这意味着您不必手动标记每个图像。PUSH用于将镜像推送到镜像仓库。ATTACH使您能够以交互方式运行中间步骤。这对于调试非常有用。要使用Rocker,必须先在您的机器上安装它。对于Mac用户,只需运行几个brew命令:$brewtapgrammarly/tap$brewinstallgrammarly/tap/rocker安装后,您可以使用Rocker通过传递Rockerfile来构建图像:FROMpython:2.7-slimWORKDIR/appADD。/appRUNpipinstall-rrequirements.txtEXPOSE80ENVNAMEWorldCMD["python","app.Py"]TAGshekhargulati/friendlyhello:{{.VERSION}}PUSHshekhargulati/friendlyhello:{{.VERSION}}要构建映像并将其推送到DockerHub,您可以运行以下命令:$rockerdbuild--push-varVERSION-1.0GitHub地址:https://github.com/grammarly/rocker5。ctop:容器的顶层接口。ctop是我最近开始使用的一个工具,它可以提供多个容器的实时指标视图。如果您是Mac用户,您可以使用brew安装,如下所示:$brewinstallctop安装完成后,您可以开始使用ctop。现在,您只需要配置DOCKER_HOST环境变量。您可以运行ctop命令来查看所有容器的状态。如果只想查看正在运行的容器,可以使用ctop-a命令。ctop是一个简单的工具,可用于了解主机上运行的容器。可以在ctop文档了解更多:https://github.com/bcicen/ctop/blob/master/README.mdGitHub地址:https://github.com/bcicen/ctop以上是我发现的很5个有用的Docker工具。你在日常工作中使用Docker工具吗?希望这些工具可以帮到你,也欢迎大家在评论中推荐你觉得有用的工具。
