部署 Docker 容器时 5 个代价高昂的错误(以及如何像专业人士一样避免它们😎)

2025-06-10

部署 Docker 容器时 5 个代价高昂的错误(以及如何像专业人士一样避免它们😎)

Docker 是一款出色的 Web 应用部署工具,但前提是你必须按照其预期的方式使用它。否则,你很可能会给自己带来麻烦。因此,如果你想避免痛苦的调试时间,请务必避免这些常见错误。

附注:如果你想让生活更轻松一些,可以看看sliplane.io。这是一个简单的 Docker 托管解决方案,可以帮助你避免这里提到的一些陷阱。

1. 不设置资源限制❌

如果您在单台服务器上运行多容器设置,这一点尤其重要。贪婪的服务可能会占用您机器上的所有 CPU 或内存,导致其他容器无力使用资源,甚至更糟的情况:导致整个服务器瘫痪。

使用--cpu-quota--memory标志来限制容器在运行时的资源使用情况:

docker run --memory="512m" --cpu-quota=50000 your-image-name
Enter fullscreen mode Exit fullscreen mode

您可以在有关资源限制的官方 Docker 文档中找到有关这些标志的更多信息

如果可以,请避免在运行容器的同一台服务器上构建镜像。构建会占用大量 CPU 和内存,如果不考虑到这一点,您的服务器崩溃的速度会比您喊“请不要崩溃!😰”的速度更快。

2. 不清理❌

没人喜欢清理,但如果你不想被自己的💩淹没,这是必不可少的。Docker 镜像可能非常庞大——有时甚至高达数 GB。如果你部署了新版本的镜像,并且不再需要旧版本,就应该清除它们。未使用的容器和卷也是如此。它们会迅速累积,很快你的部署就会失败,你又要花 45 分钟才能发现磁盘已满……

使用以下命令删除悬空(未标记、未使用)的 Docker 对象:

docker container prune
docker image prune
docker volume prune
docker system prune # this removes all dangling images, volumes and containers
Enter fullscreen mode Exit fullscreen mode

通过添加 arg 删除所有未使用的 Docker 对象-a(也包括标记的图像):

docker container prune -a
docker image prune -a
docker volume prune -a
docker system prune -a # this removes all unused images, volumes and containers
Enter fullscreen mode Exit fullscreen mode

3.图片泄露秘密

应用程序在构建时需要访问机密信息的情况并不少见。但人们可能没有意识到,构建时嵌入机密信息的镜像需要像机密信息一样对待!Docker 镜像并非保险库。所有有权访问镜像的人都可以读取你放入其中的所有内容。(除非你做了一些大胆的尝试,对镜像进行了加密)。所以,如果你在镜像中嵌入了机密信息,就不要在 Docker Hub 上发布它们!

如果可以,请避免在构建时传递机密信息,并依赖环境变量或使用机密管理器。如果完全无法做到,请确保仅在受信任的环境中构建镜像,将其保存在私有镜像仓库中,仅通过加密线路移动镜像,并在不再需要时立即删除它……

另请查看这篇关于如何处理构建秘密的博客文章。

4. 没有监控❌

容器是隔离的和短暂的,这对于安全性和可移植性来说非常好,但对于监控来说并不理想。

docker exec每次检查日志文件时都必须进入容器,这真的很麻烦,因此请务必提前做好准备。

最简单的做法是挂载一个卷来保存日志文件,这样至少可以保证日志文件的持久性。但是,如果没有日志轮换,并且理想情况下没有某种方式可以就地搜索日志,这种设置很快就会达到极限。

为了获得更高的可见性,您可以通过将数据传输到外部系统来实现日志监控,还可以设置资源监控工具来跟踪容器中的 CPU 和内存使用情况。

在专业环境中,监控通常使用ELK Stack完成。

5. 没有优化 Docker 镜像❌

如前所述,Docker 镜像可能非常庞大(高达数 GB!)。我最后想提一下的一个错误是没有优化 Docker 镜像。优化不仅可以节省大量空间,还能减少攻击面,并显著加快部署速度。

以最小化 Nuxt 3 的 Docker 镜像为例。作者Jonas Scholz成功将镜像大小从 1.4 GB 缩减至仅 160 MB!这几乎是 10 倍的提升,只需遵循几个简单的步骤:

  • 使用尽可能最小的基础镜像
  • 排除 .dockerignore 文件中不必要的文件
  • 通过 CDN 提供静态资产
  • 使用多阶段构建

概括

常见的 Docker 部署错误包括:

  1. 跳过资源限制,
  2. 未能清理,
  3. 将敏感数据构建到您的图像中,
  4. 忽视日志记录和监控以及
  5. 错过了优化图像的机会。

如果你想让生活更轻松一些,可以看看sliplane.io。这是一个简单的 Docker 托管解决方案,可以帮助你避免这里提到的一些陷阱。

免责声明:我与他人共同创立了 Sliplane :-)

继续阅读 https://dev.to/wimadev/5-costly-mistakes-when-deploying-docker-containers-and-how-to-dodge-them-like-a-pro--3kbm
PREV
使用 Docker 在单个 VPS 上部署多个应用程序
NEXT
JavaScript:如何检查数组是否具有重复值