别再像 2015 年那样使用 Docker

2025-05-24

别再像 2015 年那样使用 Docker

Docker 已经成长起来了。你呢?

2015 年,Docker 还很新奇。你可能用类似下面的代码运行了你的第一个容器:

docker run -it ubuntu bash
Enter fullscreen mode Exit fullscreen mode

你感觉自己很强大。你在容器里安装了 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
Enter fullscreen mode Exit fullscreen mode

这一改变将使 Docker Compose 真正成为一个可行的生产协调器。

3.默认root

生产环境中仍以 root 用户身份运行?你的容器不应该成为负担。在 Dockerfile 中创建一个非 root 用户并切换到该用户即可。这并不难:

RUN useradd -m appuser
USER appuser
Enter fullscreen mode Exit fullscreen mode

只需确保你的卷挂载在非 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"]
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Devcontainers、监视模式和您

  • 用于docker compose watch本地开发中的实时重新加载
  • 使用绑定挂载卷 + 热重载实现快速迭代
  • 使用.dockerignore+ 缓存实现最小重建
develop:
  watch:
    - path: .
      action: rebuild
Enter fullscreen mode Exit fullscreen mode

“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
PREV
JavaScript DOM 初学者练习
NEXT
停止使用 AWS。