别再像 2015 年那样使用 Docker
Docker 已经成长起来了。你呢?
2015 年,Docker 还很新奇。你可能用类似下面的代码运行了你的第一个容器:
docker run -it ubuntu bash
你感觉自己很强大。你在容器里安装了 Vim,甚至可能安装了 Node.js。你没有使用任何权限.dockerignore
。你以 root 身份运行了所有东西。你以为你在部署容器,但实际上,你只是在启动一种奇怪的虚拟机。
快进到2025年:同样的方法正在阻碍你前进。如今,Docker 是一款快速、可组合、生产级的工具——前提是你能正确使用它。
让我们来谈谈需要改掉的习惯,以及如何以 2025 年的方式做事。
❗️ 需要改掉的旧习惯
1. 使用version:
字段docker-compose.yml
Docker Compose 文件中的字段version:
比 Bootstrap CSS 更绝对。还在写吗?为什么?每次你写的时候,都会有鲸鱼哭泣。那就从你的services:
代码块开始,继续你的生活吧。是的,这是我最讨厌的事情。
2. 没有健康检查
如果您的容器崩溃了,而您没有配置健康检查,那就怪您了。Docker 和 Compose 无法重启或管理它们不知道已经损坏的容器。
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000"]
interval: 30s
timeout: 5s
retries: 3
这一改变将使 Docker Compose 真正成为一个可行的生产协调器。
3.默认root
生产环境中仍以 root 用户身份运行?你的容器不应该成为负担。在 Dockerfile 中创建一个非 root 用户并切换到该用户即可。这并不难:
RUN useradd -m appuser
USER appuser
只需确保你的卷挂载在非 root 用户手中即可。否则后果不堪设想(相信我,我知道)。
4. 否.dockerignore
没有什么比将您的.git
、.env
和运送node_modules
到生产环境更好的了。使用.dockerignore
,保存您的构建上下文,并防止机密信息和臃肿内容进入您的镜像。
您可能认为这是一件轻而易举的事,但我一直都看到这种情况(我经营一家Docker 托管公司,每周都会看到数百个 Docker 应用程序)。
5.臃肿的单阶段 Dockerfile
如果你的 Dockerfile 最终镜像中包含了所有构建工具、编译器和测试依赖项,请停止。使用多阶段构建。
FROM node:20 AS build
WORKDIR /app
COPY . .
RUN npm install && npm run build
FROM node:20-slim
WORKDIR /app
COPY --from=build /app/dist ./dist
CMD ["node", "dist/index.js"]
6. 不使用缓存的手动构建
您还在docker build .
每次都打字吗?
设置DOCKER_BUILDKIT=1
,开始使用层缓存,让您的生活更轻松。--mount=type=cache
为包管理器和构建系统添加。它不仅更快,而且更智能。
现代 Docker 是什么样子的
2025 年你应该这样使用 Docker:
无需繁琐的遗留工作
services:
app:
build: .
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000"]
interval: 30s
timeout: 5s
retries: 3
user: "1000:1000"
Devcontainers、监视模式和您
- 用于
docker compose watch
本地开发中的实时重新加载 - 使用绑定挂载卷 + 热重载实现快速迭代
- 使用
.dockerignore
+ 缓存实现最小重建
develop:
watch:
- path: .
action: rebuild
“Docker 不适合生产”人群
这不是 Docker 的错,而是你的错。
你没有添加健康检查,所以 Docker 无法重启损坏的服务。
你没有设置多阶段构建,所以你的镜像只有 2GB 的垃圾。
你以 root 身份运行所有程序,所以现在你对自己的软件感到恐惧。
如果您将 Docker 视为生产工具,那么它可以用于生产。
“Docker 对本地开发者不利”的人群
也错了。你可能用错了。以下是一些有用的建议:
docker compose watch
= 实时重建- BuildKit 缓存挂载 = 快速构建
- 绑定卷 + 热重载 = 类似原生的 DX
如果您每次构建都要等待 2 分钟或查看日志docker logs -f
,那么这是技能问题,而不是 Docker 问题。
TL;DR:别再像 2015 年那样使用 Docker
Docker 不再只是个玩具。它是一个经过实践检验的现代化开发和生产工具——但前提是,你必须停止像 2015 年那样使用它。
放弃这个version:
领域。添加健康检查。使用 BuildKit。学习缓存。使用非 root 用户。别再责怪工具了。
并且,为了对鲸鱼的热爱,请添加一个.dockerignore
文件。
有没有哪些过时的 Docker 习惯需要改掉?欢迎在评论区留言。让我们一起驱散 2015 年的容器热潮。
干杯,
Jonas 联合创始人sliplane.io
文章来源:https://dev.to/code42cate/stop-using-docker-like-its-2015-1o5l