你应该知道的 5 个 Docker 工具

dtek6134 7年前
   <p>你可以在网上找到大量炫酷的 <a href="/misc/goto?guid=4959749569462869767" rel="nofollow,noindex">Docker</a> 工具,并且大部分是开源的,可以通过Github访问。在过去的两年里,我开始在开发项目中大量使用Docker。当你开始使用Docker,你会发现它比你想象的还要适合于更多的使用场景。你也许希望Docker能够做的更多,当然你不会失望。</p>    <p>Docker社区非常活跃,每天都会推出大量有用的工具。要想持续追踪社区中发生的各项创新其实非常困难。为了帮助你,我收集了一些每天在日常工作中使用、令人感兴趣并且十分有用的Docker工具。这些工具消除了大量手工工作,让我更有生产力。</p>    <p>让我们来看看这些在我的容器化之旅中非常有用的工具吧。</p>    <h2>1. <a href="/misc/goto?guid=4959749569557194962" rel="nofollow,noindex">watchtower</a> : 自动更新Docker容器</h2>    <p>瞭望塔(Watchtower)能够监控正在运行的容器,观察自容器启动以来对镜像的任何修改。当瞭望塔检测到一个镜像发生改变,它会自动使用新镜像进行重启容器。我在本地开发环境使用该工具,以便我能够使用最新构建的镜像。</p>    <p>瞭望塔本身也被打包为一个Docker镜像,你可以使用运行其他容器的方式运行该工具。要启动瞭望塔,你可以使用以下命令:</p>    <p><img src="https://simg.open-open.com/show/ef38da7051e6ce6acea777660f319dff.png"></p>    <p>在上述命令中,我们启动了瞭望塔容器,并挂载了文件 /var/run/docker.sock 。这是必须的,以便该工具能够与Docker后台API进行交互。此处使用选项间隔( interval)为 30秒。该参数定义了工具轮询的间隔。瞭望塔支持的更多选项见 <a href="/misc/goto?guid=4959749569637083489" rel="nofollow,noindex">文档</a> .</p>    <p>现在启动一个瞭望塔能够监控的容器:</p>    <p><img src="https://simg.open-open.com/show/43deb12edfb248347de5c394e5f3019f.png"></p>    <p>此时,瞭望塔将对 friendlyhello 容器进行监控。当我将新镜像提交到Docker Hub时,瞭望塔在下次运行时将会检测到已有一个新的镜像。它会优雅的停止容器,并使用新镜像自动启动新容器。它将一些参数传递给run命令,换句话说,容器将使用 4000:80发布端口。</p>    <p>默认情况下, 瞭望塔会轮询Docker Hub官网查找更新的镜像。如欲使工具轮询私有Docker仓库,需要配置以下环境变量:REPO_USER 和 REPO_PASS。</p>    <p>要先了解更多,推荐阅读 <a href="/misc/goto?guid=4959749569732046422" rel="nofollow,noindex">瞭望塔文档</a> 。</p>    <h2>2. <a href="/misc/goto?guid=4958964624430047638" rel="nofollow,noindex">docker-gc</a> : 容器和镜像垃圾收集</h2>    <p>docker-gc工具能够帮助你清理Docker宿主机,删除不再需要的容器和镜像。它会移除存在超过1小时的所有容器。同时,它会删除不属于任何遗留容器的镜像。</p>    <p>你可以把docker-gc当做脚本或容器使用。这里,我们作为容器运行docker-gc。使用docker-gc查找所有可以删除的容器和镜像,命令如下:</p>    <p><img src="https://simg.open-open.com/show/4fcd948905a005f43568ff31d7e76d20.png"></p>    <p>上述命令中,我们加载了Docker套接字文件,以便docker-gc能够与Docker API交互。我们传递一个环境变量DRY_RUN=1来查找将被删除的容器和镜像。如果不提供该参数,docker-gc会删除所有容器和镜像。最好事先确认docker-gc要删除的内容。上述命令输出示意如下:</p>    <p><img src="https://simg.open-open.com/show/c31e2097782be8644dd226ee5ea87149.png"></p>    <p>如果你同意docker-gc清空方案, 可以不使用DRY_RUN再次运行docker-gc执行清空操作。</p>    <p><img src="https://simg.open-open.com/show/9ac7838b45f3ffd03bcdd8cf284c76b1.png"></p>    <p>上述命令的输出可以告诉您 docker-gc 删除的所有镜像和容器。</p>    <p>docker-gc还支持其他一些选项,建议阅读 <a href="/misc/goto?guid=4959749569840852226" rel="nofollow,noindex">docker-gc文档</a> 以了解更多。</p>    <h2>3. <a href="/misc/goto?guid=4959749569935979394" rel="nofollow,noindex">docker-slim</a> : 面向容器的神奇减肥药丸</h2>    <p>如果你担心您Docker镜像的大小,docker-slim可以打消您的一切顾虑。</p>    <p>docker-slim工具使用静态和动态分析方法来为你臃肿的镜像瘦身。要使用docker-slim,可以从 <a href="/misc/goto?guid=4959749570015787034" rel="nofollow,noindex">Github</a> 下载Linux或者Mac的二进制安装包. 一旦你成功下载,并加入到你的系统PATH变量中。</p>    <p>为了举例,我参考 <a href="/misc/goto?guid=4959749570102233500" rel="nofollow,noindex">Docker官方文档</a> 创建了一个Docker镜像   friendlyhello , 镜像大小为194MB(如下所示):</p>    <p><img src="https://simg.open-open.com/show/aa7d91a02f06f52638295d6e1acf59ef.png"></p>    <p>在这个简单的应用中,我们已经下载了194MB的数据。让我们使用docker-slim工具来看看能够瘦身多少吧。</p>    <p><img src="https://simg.open-open.com/show/c3ad29e7f2c77c806a306d4ea64471eb.png"></p>    <p>docker-slim工具将执行一系列的检查和装配步骤,最终创建一个瘦身版本。让我们来看看搜身版本的大小:</p>    <p><img src="https://simg.open-open.com/show/2456afdffcbcc1946e80dab40bc7c229.png"></p>    <p>如上图所示,影像大小被减少到24.9 MB。你可以启动该容器,以同样的方式运行。docker-slim工具支持Java, Python, Ruby和Node.js应用。</p>    <p>自己试试看能够瘦身多少。在我的个人项目中,我发现在大多数情况下都能够正常工作。您可以从 <a href="/misc/goto?guid=4959749570189408783" rel="nofollow,noindex">docker-slim文档</a> 学到更多。</p>    <h2>4. <a href="/misc/goto?guid=4959749570287399667" rel="nofollow,noindex">rocker</a> : 超越 Dockerfile 限制</h2>    <p>大多数使用Docker的开发者都使用Dockerfile构建镜像。Dockerfile是一种声明方式,在命令行定义所有的命令,以编配一个镜像。</p>    <p><a href="/misc/goto?guid=4959749570287399667" rel="nofollow,noindex">Rocker</a> 为Dockerfile指令集增加了新的指令。Rocker由 <a href="/misc/goto?guid=4959749570378793028" rel="nofollow,noindex">Grammarly</a> 创建,以解决采用Dockerfile格式遇到的一些问题。Grammarly团队写了一个 <a href="/misc/goto?guid=4959749570378793028" rel="nofollow,noindex">博客</a> ,深度剖析和解释了创建它的原因。我建议您阅读它以更好的理解Rocker。在博文中,他们主要强调了2个问题:</p>    <ol>     <li>Docker镜像的大小.</li>     <li>缓慢的构建速度.</li>    </ol>    <p>该博文也提到了Rocker增加的几个新指令。参考 <a href="/misc/goto?guid=4959749570468049557" rel="nofollow,noindex">Rocker文档</a> 以学习所有Rocker支持的指令。</p>    <ol>     <li>MOUNT 用于共享不同构建的卷,以便能够被依赖管理工具重用。</li>     <li>FROM 指令在Dockerfile也存在。Rocker使得可以添加多个FROM指令。 这意味着您能够从单个Rockerfile中创建多个镜像。第一批指令用于构建产品所有的依赖;第二批指令用于构建产品;这能够极大的降低镜像大小。</li>     <li>TAG 用于在构建的不同阶段标识镜像,这意味着您不必手动为每个镜像打标签。</li>     <li>PUSH 用于将镜像推送到镜像仓库。</li>     <li>ATTACH 允许您能够交互的运行一个中间步骤,主要用于调试。</li>    </ol>    <p>要使用Rocker,首先必须安装。对Mac用户来说,使用brew安装命令非常简单:</p>    <p><img src="https://simg.open-open.com/show/fd13e00450210ded543d05d8b83f901a.png"></p>    <p>一旦完成安装,您就可以使用Rocker传递Rockerfile来构建镜像:</p>    <p><img src="https://simg.open-open.com/show/6635e71d25e1398b87123b335987333a.png"></p>    <p>要构建镜像并推送到Docker Hub,可以运行以下命令:</p>    <p><img src="https://simg.open-open.com/show/6b05b8b3148ee47584698c1d4b293b68.png"></p>    <p>Rocker有很多功能,要知道更多请参考 <a href="/misc/goto?guid=4959749570468049557" rel="nofollow,noindex">文档</a> .</p>    <h2>5. <a href="/misc/goto?guid=4959749570565495585" rel="nofollow,noindex">ctop</a> : 容器的类Top界面</h2>    <p>ctop是我最近使用的一个工具,它能够提供多个容器的实时指标视图。如果您是一个Mac用户,可以使用brew安装:</p>    <p><img src="https://simg.open-open.com/show/396b2bb6dff378f43a2a1354d13ea5fe.png"></p>    <p>一旦完成安装,你可以启动ctop。它只需要配置DOCKER_HOST环境变量。</p>    <p>要查看所有容器的状态,可以直接运行 ctop 命令。</p>    <p><img src="https://simg.open-open.com/show/5b347ac366950ea3ac591076ad9bb8b1.png"></p>    <p>仅查看当前正在运行的容器的状态,可以使用 ctop -a 命令。</p>    <p>ctop是一个简单并且非常有用的工具,能够帮助您了解主机上运行的容器。可以阅读 <a href="/misc/goto?guid=4959749570644848790" rel="nofollow,noindex">ctop文档</a> 了解更多ctop的知识。</p>    <p>这些都是我发现的非常有用的Docker工具。您是否也在日常工作中用到其他的Docker工具呢?如果是这样的话,请在下面的评论区留言以让我们知晓。</p>    <p> </p>    <p>来自:https://coyee.com/article/12236-5-docker-utilities-you-should-know</p>    <p> </p>