Docker 已經成長了。你?
回顧 2015 年,Docker 還很新穎。您可能使用類似以下命令執行了第一個容器:
docker run -it ubuntu bash
你感覺自己很強。您在容器內安裝了 Vim。甚至可能是 Node.js。您沒有使用.dockerignore
。您以 root 身分執行了一切。您以為自己正在部署容器,但實際上,您只是在啟動一種奇怪的虛擬機器。
快轉到 2025 年:同樣的方法正在阻礙你的發展。如今,Docker 是一種快速、可組合、生產級的工具——只要您正確使用它。
讓我們來談談需要改掉的習慣,以及如何以 2025 年的方式做事。
docker-compose.yml
中的version:
字段Docker Compose 檔案中的version:
欄位比 Bootstrap CSS 更絕對。還在寫嗎?為什麼?每次你這樣做,就會有鯨魚哭泣。從您的services:
阻止並繼續您的生活。是的,這是我最討厭的事。
如果您的容器崩潰並且您沒有配置健康檢查,那是您的責任。 Docker 和 Compose 無法重新啟動或管理他們不知道損壞的東西。
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000"]
interval: 30s
timeout: 5s
retries: 3
這項變更將使 Docker Compose 真正成為一個可行的生產協調器。
在生產中仍以 root 身分運作嗎?您的容器不應該成為負擔。在您的 Dockerfile 中建立一個非 root 使用者並切換到該使用者。這並不難:
RUN useradd -m appuser
USER appuser
只需確保您的磁碟區掛載由非 root 使用者擁有。否則事情就會變得糟糕(相信我,我知道)。
.dockerignore
沒有什麼比將您的.git
、 .env
和node_modules
運送到生產環境更好的了。使用.dockerignore
,保存您的建置上下文,並將秘密和膨脹從您的映像中移除。
您可能認為這是一件輕而易舉的事,但我一直都看到這種情況(我經營一家Docker 託管公司,每週都會看到數百個 Docker 應用程式)。
如果您的 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"]
您仍在輸入docker build .
每次?
設定DOCKER_BUILDKIT=1
,開始使用層緩存,讓您的生活更輕鬆。為套件管理器和建置系統新增--mount=type=cache
。它不僅速度更快,而且更聰明。
2025 年你應該這樣使用 Docker:
services:
app:
build: .
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000"]
interval: 30s
timeout: 5s
retries: 3
user: "1000:1000"
使用docker compose watch
在本機開發中進行即時重新載入
使用綁定掛載磁碟區 + 熱重載實現快速迭代
使用.dockerignore
+ 快取實現最小重建
develop:
watch:
- path: .
action: rebuild
這不是 Docker 的錯。這是你的。
您沒有新增健康檢查,因此 Docker 無法重新啟動損壞的服務。
您沒有設定多階段建置,因此您的圖像是 2GB 的垃圾。
您以 root 身份執行了所有程序,因此現在您害怕自己的軟體。
如果您將 Docker 視為生產工具,那麼它可以用於生產。
也錯了。您可能使用方法錯誤。以下是有幫助的:
docker compose watch
= 即時重建
BuildKit 快取掛載 = 快速建置
綁定磁碟區 + 熱重載 = 類似原生的 DX
如果您每次建置都要等待 2 分鐘,或從docker logs -f
查看日誌,那麼這是技能問題,而不是 Docker 問題。
Docker 不再是玩具。它是一款經過實踐檢驗的現代化開發和生產工具 - 但前提是你必須停止使用它,就像 2015 年一樣。
拋棄version:
字段。加入健康檢查。使用 BuildKit。學習緩存。使用非 root 使用者。不要再怪工具了。
並且,為了鯨魚的愛,請加入一個.dockerignore
檔案。
您是否已經養成了需要改掉的過時的 Docker 習慣?將其放在評論中。讓我們一起驅逐 2015 年的貨櫃能量。
乾杯,
Jonas 共同創辦人sliplane.io
原文出處:https://dev.to/code42cate/stop-using-docker-like-its-2015-1o5l