HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

  • 2019-12-16
  • 本文字数:3383 字

    阅读完需:约 11 分钟

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

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


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


以下就是我要向大家推荐的五款实用工具。

watchtower:自动更新 Docker 容器

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


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


$ docker run -d --name watchtower --rm -v /var/run/docker.sock:/var/run/docker.sock  v2tec/watchtower --interval 30
复制代码


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


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


$ docker run -p 4000:80 --name friendlyhello shekhargulati/friendlyhello:latest
复制代码


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


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


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

docker-gc:容器和镜像的垃圾回收

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


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


$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -e DRY RUN=1 spotify/docker-gc
复制代码


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


[2017-04-28T06:27:24] [INFO] : The following container would have been removed 0c1b3b0972bb792bee508 60c35a4 bc08ba32b527d53eab173d12a15c28deb931/vibrant_ yonath[2017-04-28T06:27:24] [INFO] : The following container would have been removed 2a72d41e4b25e2782f7844e188643e395650a9ecca660e7a0dc2b7989e5acc28 /friendlyhello_ web[2017-04-28T06:27:24] [INFO] : The following image would have been removed sha256:00f017a8c2a6e1 fe2f fd05c281 f27d069d2a99323a8cd514dd35f228ba26d2ff[busybox: latest][2017-04-28T06:27:24] [ INFO] : The following image would have been removed sha256 :4a323b466a5ac4ce6524 8dd970b538922c54e535700cafe9448b52a3094483ea[hello-world:latest][2017-04-28T06:27:24] [INFO] : The following image would have been removed sha256:4a323b4 66a5ac4ce65248dd970b538922c54e535700cafe9448b52a3094483ea[python:2.7-slim]
复制代码


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


$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock spotify/docker-gc
复制代码


上述命令的输出将告诉你 docker-gc 删除的所有镜像和容器。


docker-gc 还支持一些其他的选项。建议你阅读 docker-gc 文档以了解更多相关信息:

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

如果你担心你的 Docker 镜像的大小,docker-slim 可以帮你排忧解难。


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


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



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


$ docker-slim build --http-probe friendlyhello
复制代码


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



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


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

rocker:突破 Dockerfile 的限制

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


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


  1. Docker 镜像的大小。

  2. 缓慢的构建速度。


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


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

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

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

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

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


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


$ brew tap grammarly/tap$ brew install grammarly/tap/rocker
复制代码


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


FROM python:2.7-slimWORKDIR /appADD . /appRUN pip install -r requirements. txtEXPOSE 80ENV NAME WorldCMD ["python","app.Py"]TAG shekhargulati/ friendlyhello:{{ .VERSION }}PUSH shekhargulati/friendlyhello:{{ .VERSION }}
复制代码


若要构建一个镜像并将其推送到 Docker Hub,你可以运行以下命令:


$ rocker d build --push -var VERSION-1.0
复制代码


Rocker 有一组很好的特性。要了解更多信息,请参考它的文档

ctop:容器的类顶层接口

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


$ brew install ctop
复制代码


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


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



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


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




以上是我发现的很有用的 5 款 Docker 工具。你在日常工作中使用 Docker 工具吗?希望这些工具能够为你带来帮助,也欢迎在评论中推荐你觉得有用的工具。

英文原文

5 Docker Utilities You Should Know


2019-12-16 14:2510488
用户头像
小智 让所有人认同的文字称不上表达

发布了 408 篇内容, 共 389.0 次阅读, 收获喜欢 1980 次。

关注

评论

发布
暂无评论
发现更多内容

全网最详细的负载均衡原理图解

鞋子特大号

Linux 负载均衡 系统开发

一次搞明白 Docker 容器资源限制

Java架构师迁哥

数据应用一

raox

聊聊2021年区块链的发展趋势

CECBC

比特币

不负责预测:2021手机市场的“雄起”错觉

脑极体

关于链表的一二三事

阿零

学习 链表 数据结构与算法

数据应用二

raox

week13-homework

J

这些面试题你会吗?双非本科字节跳动Android面试题分享,大厂内部资料

欢喜学安卓

android 程序员 面试 移动开发

五分钟扫盲:进程与线程基础必知

架构 线程’

2021Java面试必备!啃透这份Java10W字面经,你还用担心被面试官“吊打”?

程序员 架构 面试

科普篇:交智商税的商品

石云升

28天写作 2月春节不断更 智商税

架构13周

FreeOcean

日记 2021年2月21日(周日)

Changing Lin

2月春节不断更

Elasticsearch 常见 Query 搜索

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

个人职业规划和定位

张老蔫

28天写作

GitHub访问破百万!字节2021年Java程序员面试指导已疯传

比伯

Java 编程 程序员 架构 面试

week13-conclusion

J

架构设计篇之微服务实战笔记(二)

小诚信驿站

架构师 刘晓成 小诚信驿站 28天写作 架构师成长笔记

关于事件溯源

架构精进之路

28天写作 事件溯源

Selenium 与 Python 之间如何才能交融在一起

梦想橡皮擦

Python 28天写作 2月春节不断更

区块链处在中国市场的风口 既是机遇 也是挑战

CECBC

区块链

架构师训练营第十二周作业

zamkai

Scrum Patterns:团队('Pigs')的估算(译)

Bruce Talk

敏捷开发 译文 Agile Scrum Patterns

使用 Tye 辅助开发 k8s 应用竟如此简单(四)

newbe36524

.net Docker Kubernetes .net core dotnet

人理解迭代,神则体会递归,从电影艺术到Python代码实现神的逆向思维模式

刘悦的技术博客

Python 递归 逆向思维 推理 尾递归

区块链技术的价值传递

CECBC

设计模式简介

happlyfox

设计模式 28天写作

这些面试题你会吗?月薪20k+的Android面试都问些什么?面试必问

欢喜学安卓

android 程序员 面试 移动开发

新作者 新入驻 新征程

InfoQ写作社区官方

写作平台 新人 热门活动

1.0 Go语言从入门到精通:Go语言介绍

xcbeyond

28天写作 Go 语言

推荐5款好用的开源Docker工具_开源_Shekhar Gulati_InfoQ精选文章