5 个能让你更好地使用 Docker 的项目

2025-06-04

5 个能让你更好地使用 Docker 的项目

作为Docker 队长和Docker 托管公司的联合创始人,我见过很多人在使用 Docker 时遇到困难并犯下错误。

大多数开发者学习 Docker 的方式是复制粘贴 Stack Overflow 上的 Dockerfile,然后就完事了。但如果你想真正理解容器,了解它们的局限性、怪癖以及如何根据自己的意愿使用它们,就需要亲身实践。以下 5 个实践项目可以帮助你快速提升 Docker 技能。

它们会是你每天都会用到的东西吗?不会。它们会在五年后遇到非常棘手的情况时救你一命吗?也许吧,或者至少我希望如此 :D

1. 在不破坏所有内容的情况下,制作尽可能小的 Docker 镜像

你已经有一个项目了。它可能是 Next.js 前端,也可能是 Flask API。你的挑战是:尽可能精简镜像。不要只是修改基础镜像。实际上,要删除文件和层,直到容器停止工作。

然后弄清楚它为什么会坏。试着解决这个问题。再试一次。再缩小一点。

您将了解您的应用程序真正需要什么、分层如何工作以及依赖关系如何悄悄潜入。

您应该研究一下docker history或之类的工具dive来了解里面到底有什么。

2. 尝试将不该 Docker 的东西 Docker 化

选择一些感觉不对的东西。Spotify。图形 IDE。完整的 Linux 桌面环境。甚至是 Windows。

无论如何都要尝试容器化,大多数都会失败。

这就是关键所在。当它崩溃时,问问自己为什么。是 Docker 的限制?内核问题?硬件依赖?还是对图形输出的假设?

除非你尝试过一些荒谬的事情并看到它崩溃,否则你还不能完全理解 Docker。

3. 从头构建基础镜像

大多数人这样编写 Dockerfile:

FROM node
Enter fullscreen mode Exit fullscreen mode
FROM ubuntu
Enter fullscreen mode Exit fullscreen mode

现在换一种做法。改用这个:

FROM scratch
Enter fullscreen mode Exit fullscreen mode

并构建运行您的应用程序的自己的基础映像。

你将了解文件如何进入容器。你将了解一个可运行的二进制文件实际上需要什么。你将明白为什么有些人使用 Alpine,而有些人不使用。你将探索 glibc 是什么。你将理解 CMD 和 ENTRYPOINT 的实际行为。

这对于生产环境来说不太实用,但对于理解容器的工作原理非常有用。(出于对一切神圣事物的热爱,请在生产环境中使用普通镜像。)

4. 参数化你的 Docker 构建

开源项目通常会发布许多版本的 Docker 镜像。一个基于 Debian,另一个基于 Alpine。一个针对大小进行了优化,另一个则专为调试而设计。有些还支持多种 CPU 架构。

尝试构建类似的东西。学习如何使用构建参数。学习如何在 Dockerfile 中编写条件逻辑。学习如何从单个管道生成多个输出。

最重要的是,弄清楚如何避免一遍又一遍地编写相同的蹩脚逻辑。

5. 玩“如果我运行不受信任的代码会怎样”的游戏

假设你想在 Docker 容器内运行不受信任的代码。用户上传了一个脚本,你的后端执行了它。你需要做什么才能确保安全?

试试吧。实际上,在容器中运行不受信任的代码,然后开始锁定。

探索 seccomp 配置文件。将容器设置为只读。使用用户命名空间。放弃权限。尝试提升权限。尝试逃离你自己的沙盒。

这是 Docker 结束和真正的沙盒开始的边缘。

奖励项目:完全跳过 Docker CLI

Docker 只是一个前端,它背后还有其他工具,比如 BuildKit、containerd 和镜像规范。

尝试完全跳过 Docker。

直接使用buildctl。手动创建 OCI 镜像。无需使用 即可将其推送到镜像仓库docker push。阅读 OCI 镜像规范并尝试复制 Docker 的操作。

这样做会破坏您对 Docker 的心理模型,并用更准确的东西取而代之。

这是容器学习的最终大佬。

这份清单完整吗?当然不是。总有更多东西需要学习,但我希望这能激励你更深入地学习 :)

干杯, Jonas, Sliplane
联合创始人

文章来源:https://dev.to/code42cate/5-projects-that-will-actually-make-you-better-at-docker-5108
PREV
How I save $$$ by self-hosting these 5 open source tools
NEXT
这是一个价值 100 万欧元的 Node 脚本吗?YouTube 订阅用户