阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!

Docker 已經成長了。你?

回顧 2015 年,Docker 還很新穎。您可能使用類似以下命令執行了第一個容器:

docker run -it ubuntu bash

你感覺自己很強。您在容器內安裝了 Vim。甚至可能是 Node.js。您沒有使用.dockerignore 。您以 root 身分執行了一切。您以為自己正在部署容器,但實際上,您只是在啟動一種奇怪的虛擬機器。

快轉到 2025 年:同樣的方法正在阻礙你的發展。如今,Docker 是一種快速、可組合、生產級的工具——只要您正確使用它。

讓我們來談談需要改掉的習慣,以及如何以 2025 年的方式做事。


❗️ 需要改掉的舊習慣

1. 使用docker-compose.yml中的version:字段

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.envnode_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

按讚的人:

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。

阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!