Docker社区非常活跃,每天都会推出大量有用的工具。要想持续追踪社区中发生的各项创新其实非常困难。为了帮助你,我收集了一些每天在日常工作中使用、令人感兴趣并且十分有用的Docker工具。这些工具消除了大量手工工作,让我更有生产力。

让我们来看看这些在我的容器化之旅中非常有用的工具吧。

1、watchtower: 自动更新Docker容器

瞭望塔(Watchtower)能够监控正在运行的容器,观察自容器启动以来对镜像的任何修改。当瞭望塔检测到一个镜像发生改变,它会自动使用新镜像进行重启容器。我在本地开发环境使用该工具,以便我能够使用最新构建的镜像。
瞭望塔本身也被打包为一个Docker镜像,你可以使用运行其他容器的方式运行该工具。要启动瞭望塔,你可以使用以下命令:

在上述命令中,我们启动了瞭望塔容器,并挂载了文件 /var/run/docker.sock 。这是必须的,以便该工具能够与Docker后台API进行交互。此处使用选项间隔(interval)为30秒。该参数定义了工具轮询的间隔。瞭望塔支持的更多选项见文档.
现在启动一个瞭望塔能够监控的容器:

此时,瞭望塔将对friendlyhello容器进行监控。当我将新镜像提交到Docker Hub时,瞭望塔在下次运行时将会检测到已有一个新的镜像。它会优雅的停止容器,并使用新镜像自动启动新容器。它将一些参数传递给run命令,换句话说,容器将使用4000:80发布端口。
默认情况下, 瞭望塔会轮询Docker Hub官网查找更新的镜像。如欲使工具轮询私有Docker仓库,需要配置以下环境变量:REPO_USER 和 REPO_PASS。
想要了解更多,推荐阅读瞭望塔文档

2、docker-gc: 容器和镜像垃圾收集

docker-gc工具能够帮助你清理Docker宿主机,删除不再需要的容器和镜像。它会移除存在超过1小时的所有容器。同时,它会删除不属于任何遗留容器的镜像。
你可以把docker-gc当做脚本或容器使用。这里,我们作为容器运行docker-gc。使用docker-gc查找所有可以删除的容器和镜像,命令如下:

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

如果你同意docker-gc清空方案, 可以不使用DRY_RUN再次运行docker-gc执行清空操作。

上述命令的输出可以告诉您 docker-gc 删除的所有镜像和容器。
docker-gc还支持其他一些选项,建议阅读docker-gc文档以了解更多。

3、docker-slim: 面向容器的神奇减肥药丸

如果你担心您Docker镜像的大小,docker-slim可以打消您的一切顾虑。
docker-slim工具使用静态和动态分析方法来为你臃肿的镜像瘦身。要使用docker-slim,可以从Github下载Linux或者Mac的二进制安装包. 一旦你成功下载,并加入到你的系统PATH变量中。
为了举例,我参考Docker官方文档创建了一个Docker镜像  friendlyhello , 镜像大小为194MB(如下所示):

在这个简单的应用中,我们已经下载了194MB的数据。让我们使用docker-slim工具来看看能够瘦身多少吧。

docker-slim工具将执行一系列的检查和装配步骤,最终创建一个瘦身版本。让我们来看看搜身版本的大小:

如上图所示,影像大小被减少到24.9 MB。你可以启动该容器,以同样的方式运行。docker-slim工具支持Java, Python, Ruby和Node.js应用。
自己试试看能够瘦身多少。在我的个人项目中,我发现在大多数情况下都能够正常工作。您可以从 docker-slim文档学到更多。

4、rocker: 超越 Dockerfile 限制

大多数使用Docker的开发者都使用Dockerfile构建镜像。Dockerfile是一种声明方式,在命令行定义所有的命令,以编配一个镜像。
Rocker 为Dockerfile指令集增加了新的指令。Rocker由Grammarly创建,以解决采用Dockerfile格式遇到的一些问题。Grammarly团队写了一个 博客,深度剖析和解释了创建它的原因。我建议您阅读它以更好的理解Rocker。在博文中,他们主要强调了2个问题:
Docker镜像的大小.
缓慢的构建速度.
该博文也提到了Rocker增加的几个新指令。参考Rocker文档 以学习所有Rocker支持的指令。
MOUNT 用于共享不同构建的卷,以便能够被依赖管理工具重用。
FROM 指令在Dockerfile也存在。Rocker使得可以添加多个FROM指令。 这意味着您能够从单个Rockerfile中创建多个镜像。第一批指令用于构建产品所有的依赖;第二批指令用于构建产品;这能够极大的降低镜像大小。
TAG 用于在构建的不同阶段标识镜像,这意味着您不必手动为每个镜像打标签。
PUSH 用于将镜像推送到镜像仓库。
ATTACH 允许您能够交互的运行一个中间步骤,主要用于调试。
要使用Rocker,首先必须安装。对Mac用户来说,使用brew安装命令非常简单:

一旦完成安装,您就可以使用Rocker传递Rockerfile来构建镜像:

要构建镜像并推送到Docker Hub,可以运行以下命令:

Rocker有很多功能,要知道更多请参考文档

5. ctop: 容器的类Top界面

ctop是我最近使用的一个工具,它能够提供多个容器的实时指标视图。如果您是一个Mac用户,可以使用brew安装:

一旦完成安装,你可以启动ctop。它只需要配置DOCKER_HOST环境变量。

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

仅查看当前正在运行的容器的状态,可以使用 ctop -a 命令。
ctop是一个简单并且非常有用的工具,能够帮助您了解主机上运行的容器。可以阅读 ctop文档了解更多ctop的知识。

你不得不知道的5个神奇的Docker工具的更多相关文章

  1. 你所不知道的 CSS 阴影技巧与细节 滚动视差?CSS 不在话下 神奇的选择器 :focus-within 当角色转换为面试官之后 NPOI 教程 - 3.2 打印相关设置 前端XSS相关整理 委托入门案例

    你所不知道的 CSS 阴影技巧与细节   关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow  ...

  2. [iOS翻译]《iOS 7 Programming Pushing the Limits》系列:你可能不知道的Objective-C技巧

    简介: 如果你阅读这本书,你可能已经牢牢掌握iOS开发的基础,但这里有一些小特点和实践是许多开发者并不熟悉的,甚至有数年经验的开发者也是.在这一章里,你会学到一些很重要的开发技巧,但这仍远远不够,你还 ...

  3. 你所不知道的 URL

    0.说明 第一幕 产品:大叔有用户反映账户不能绑定公众号.大叔:啊咧咧?怎么可能,我看看?大叔:恩?这也没问题啊,魏虾米.大叔:还是没问题啊,挖叉类.大叔:T T,话说产品姐姐是不是Java提供接口的 ...

  4. 漫谈程序员(十一)老鸟程序员知道而新手不知道的小技巧之Web 前端篇

    老鸟程序员知道而新手不知道的小技巧 Web 前端篇 常充电!程序员只有一种死法:土死的. 函数不要超过50行. 不要一次性写太多来不及测的代码,而是要写一段调试一段. UI和编码要同步做. 多写注释方 ...

  5. Spring中你可能不知道的事(一)

    Spring作为Java的王牌开源项目,相信大家都用过,但是可能大家仅仅用到了Spring最常用的功能,Spring实在是庞大了,很多功能可能一辈子都不会用到,今天我就罗列下Spring中你可能不知道 ...

  6. 震惊!90%的程序员不知道的Java知识!

    震惊!90%的程序员不知道的Java知识! 初学Java的时候都会接触的代码 public static void main(String[] args){ ... } 当时就像背公式一样把这行代码给 ...

  7. 闭包----你所不知道的JavaScript系列(4)

    一.闭包是什么? · 闭包就是可以使得函数外部的对象能够获取函数内部的信息. · 闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. · 闭包就 ...

  8. let和const----你所不知道的JavaScript系列(2)

    let 众所周知,在ES6之前,声明变量的关键字就只有var.var 声明变量要么是全局的,要么是函数级的,而无法是块级的. var a=1; console.log(a); console.log( ...

  9. JavaScript 优雅的实现方式包含你可能不知道的知识点

    有些东西很好用,但是你未必知道:有些东西你可能用过,但是你未必知道原理. 实现一个目的有多种途径,俗话说,条条大路通罗马.很多内容来自平时的一些收集以及过往博客文章底下的精彩评论,收集整理拓展一波,发 ...

随机推荐

  1. java中的面向对象的三大基本特征

    转载,原文来自http://blog.sina.com.cn/s/blog_5f79a56a0100c6ig.html 众所周知,java中的面向对象的三大基本特征是:[封装].[继承].[多态] 一 ...

  2. zabbix启动web界面提示:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

    问题 zabbix启动web界面提示: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' ( ...

  3. Hibernate 简易入门教程

    Hibernate HIbernate主要包含如下几个接口:Session,Query,Criteria以及Transaction.这些接口的实现在幕后是紧密相连的. 在一个HIbernate应用程序 ...

  4. Luogu 2254 [NOI2005]瑰丽华尔兹

    简单dp,设$f_{i,j,k}$表示第i个时间段,钢琴处在(j,k)位置移动距离的最大值,那么有转移 $f_{i, j, k} = max(f_{i - 1, j, k}) ,  f_{i, j, ...

  5. Excel课程学习第三课排序与替换

    一.排序 1.简单排序 点到某一个单元格,然后选择排序,就可以按照相应的顺序来排序. 2.自定义排序 按照重要性条件来排序 也可以按照重要性从轻到重挨个排序. 3.按颜色排序 4. 按照中文数字排序, ...

  6. DingTalk代码库机器人尝试

    今日室友询问相关机器人的事情,本来对于机器人还是有一些了解的,至少是明白一些简单的原理,包括微信公众号,qq群的只能机器人,以及钉钉的机器人. 首先是说那个关于微信公众号的那个自动回复便可以使用一些机 ...

  7. android smali代码注入 实战一

    有同学在通服里面干活,最近一直忙着4g基站搭建的干活,测试设备(android)测量移动网络数据,没有自动保存记录的功能,只能手动记录各种测试参数,不知道测试软件供应商是怎样想的,竟然不提供的这样的功 ...

  8. ubuntu基础知识与技巧

    root用户与超级用户的切换 (1)  sudo -i (2)  sudo su (3)  su root 安装升级 查看软件xxx安装内容 dpkg -L xxx 查找软件库中的软件 apt-cac ...

  9. 国内物联网平台(7):Ablecloud物联网自助开发和大数据云平台

    国内物联网平台(7)——Ablecloud物联网自助开发和大数据云平台 马智 平台定位 面向IoT硬件厂商,提供设备联网与管理.远程查看控制.定制化云端功能开发.海量硬件数据存储与分析等基础设施,加速 ...

  10. C# WinForm:无法访问已释放的对象

    C#在父窗口中调用子窗口的过程: 1. 创建子窗口对象 2. 显示子窗口对象   笔者的程序中,主窗体MainFrm通过菜单调用子窗口ChildFrm.在窗体中定义了子窗口对象,然后在菜单项点击事件中 ...