Docker Compose:up vs up -d 的差異與應用
更新日期: 2025 年 3 月 4 日
本文為 Docker 進階介紹 系列文,第 8 篇:
- 初學者指南:深入了解 WSL 2(Windows Subsystem for Linux 2)
- 虛擬機器(VM)是什麼?完整入門指南
- 什麼是核心(Kernel)?初學者完整指南
- Docker vs. 虛擬機器(VM):初學者完整比較指南
- 如何在 WSL 2 + Docker 環境中開發 Django:安裝順序與最佳實踐
- 初學者指南:什麼是 Dockerfile?—— 以實際範例解析
- Docker Compose 初學者指南:使用範例解析
- Docker Compose:up vs up -d 的差異與應用 👈進度
- Linux 常見指令入門:從 sudo 到日常操作
- Linux 解決方案:VSCode 無法儲存檔案權限問題
閱讀本文前,建議先理解 Docker 基本介紹系列文 相關概念。
Docker Compose 是 Docker 官方提供的工具,用來管理多容器應用。
當你有多個容器需要協作時,例如一個 Web 應用程式需要搭配資料庫,Docker Compose 能幫助你透過一個 YAML 設定檔 (docker-compose.yml
) 來簡化啟動與管理這些容器。
在使用 Docker Compose 啟動容器時,最常見的指令是:
docker compose up
docker compose up -d
這兩者的主要區別在於是否在前台執行,而這個細微的差異可能會影響你的開發或部署流程。本文將詳細介紹它們的作用、適用場景以及如何選擇最適合的方式來執行你的容器應用。
docker compose up
:前台模式
當你執行:
docker compose up
這個指令會:
- 啟動
docker-compose.yml
定義的所有容器。 - 顯示 容器的日誌輸出(Logs)在你的終端機上。
- 保持執行狀態,直到你手動終止它(通常使用
Ctrl + C
)。
適用場景
- 開發階段:當你正在開發某個應用,並且需要即時觀察日誌,來確保一切正常運行或快速偵錯。
- 測試環境:如果你只想暫時啟動服務,在測試完成後就關閉,那麼前台模式是一個好選擇。
優缺點
✅ 優點
- 能夠即時監控所有容器的日誌輸出,方便偵錯。
- 容器關閉時,相關的所有資源(例如網路、Volume)會一併釋放,避免佔用不必要的系統資源。
❌ 缺點
- 終端機會被佔用,無法執行其他指令。
- 若意外關閉終端機,容器也會跟著停止。
docker compose up -d
:背景模式
當你加上 -d
參數:
docker compose up -d
這個指令會:
- 啟動
docker-compose.yml
定義的所有容器。 - 不顯示 容器日誌輸出,而是直接將容器送入背景執行(Detached Mode)。
- 不會佔用終端機,即使關閉終端機,容器依然持續運行。
適用場景
- 正式環境(Production):在正式環境中,通常不希望終端機一直開著,因此讓容器在背景運行是最佳選擇。
- 長期運行的應用:如果你正在執行一個 Web 服務、資料庫或其他後端服務,那麼使用
-d
讓它持續運行是比較合理的做法。
優缺點
✅ 優點
- 終端機不會被佔用,可以繼續執行其他指令或關閉終端機。
- 容器持續運行,即使退出 SSH 連線,服務仍然可用。
❌ 缺點
- 無法即時監控日誌輸出,必須使用
docker compose logs
來手動查看:docker compose logs -f
- 若容器異常退出,你可能不會立即察覺,必須定期檢查狀態:
docker compose ps
up
vs up -d
:總結比較
指令 | 是否佔用終端機 | 是否顯示日誌 | 適用場景 |
---|---|---|---|
docker compose up | ✅ 佔用 | ✅ 顯示 | 開發與偵錯 |
docker compose up -d | ❌ 不佔用 | ❌ 不顯示 | 部署與長期運行 |
選擇建議:
- 開發與測試階段 →
docker compose up
- 正式部署或長期運行的應用 →
docker compose up -d
如何管理背景模式運行的容器
如果你已經使用 docker compose up -d
啟動了容器,但後續需要管理或查看狀態,這裡有一些常用指令:
查看目前正在運行的容器
docker compose ps
查看日誌輸出
docker compose logs -f
這樣你仍然可以即時監控容器的輸出,類似於 docker compose up
的效果。
停止所有容器
docker compose down
這會停止所有由 docker-compose.yml
啟動的容器,並清除相關的網路與資源。
重啟容器
docker compose restart
如果你的容器需要更新設定或發生錯誤,可以使用這個指令來重新啟動它們。
結語
理解 docker compose up
和 docker compose up -d
的區別,可以幫助你更有效地管理 Docker 容器。
開發時,可以使用 docker compose up
來即時監控日誌與偵錯;當你的應用需要長時間運行時,則應該使用 docker compose up -d
來讓它在背景執行,確保服務穩定運行。
透過這些指令,你可以根據需求靈活地控制你的 Docker 應用,無論是在本機開發環境還是正式部署環境中都能夠得心應手!