About容器Professional illustrations
Docker Compose Up 基礎指令詳解
好喇,咁我哋就深入啲講下 Docker Compose Up 基礎指令詳解。喺 2026 年嘅今日,無論你係做緊 DevOps 定係本地 容器化開發,識得用 docker compose up 呢個指令,真係基本到唔可以再基本。佢係你玩轉 多容器應用 嘅起手式,同以前逐個 docker run 唔同,Compose 可以幫你一次過管理晒成個應用堆棧(Stack),好似 MySQL、Redis、nginx、PHP 或者係 Flask 呢啲服務,全部喺一個 YAML 檔案度定義好,一鍵搞掂。
首先,你要明個指令最核心嘅用法。基本格式就係 docker compose up,佢會喺當前目錄搵個叫 docker-compose.yml 嘅 YAML配置 檔案,然後根據裏面定義嘅服務(Services),順次序拉取(Pull)映像檔(如果本地冇)同啟動 容器。呢個 docker-compose.yml 檔案就好似一個樂高說明書,話俾 Docker Compose 知你要砌啲乜、點樣連埋一齊。例如,你想整一個簡單嘅 WordPress 網站,個檔案就會定義一個用官方 WordPress 映像檔嘅容器,同另一個用 MySQL 映像檔嘅數據庫容器,仲會設定好佢哋之間嘅 容器連結 同 數據卷(Volume)去持久化數據。
咁點樣用先至有效率呢?我哋可以拆解幾個常用嘅參數同情境。第一個必學嘅就係 -d 或者 --detach 參數。你打 docker compose up -d,咁所有 容器 就會喺 後臺模式 運行,唔會霸住你個 CLI 終端機視窗,等你可以做其他嘢。呢個對於長期運行嘅服務,好似係網站或者 API 後端(例如用 Python Flask 寫嘅),就非常之好用。你可以隨時用 docker compose logs 去睇返啲 容器日誌 做 容器偵錯。
另一個好實用嘅參數係 --build。當你修改咗自己個 Dockerfile,例如更新咗啲套件或者應用程式碼,你唔使又刪容器又點樣,直接行 docker compose up --build,佢就會 強制重新編譯 相關服務嘅映像檔,再用新映像檔啟動容器,好適合開發階段做快速測試。有時你可能想知個指令會做啲乜,但又唔想真係執行,就可以用 --dry-run 模擬,不過要留意,截至 2026 年,標準嘅 docker compose 指令本身未有內置 dry-run 參數,你可能要靠一啲外掛或者仔細檢查配置檔案來代替。
對於複雜啲嘅專案,你可能唔想啟動晒所有服務。你可以指定只啟動某個服務,例如你個 docker-compose.yml 定義咗 app、db(用 MySQL)、cache(用 Redis)同 adminer(資料庫管理工具)四個服務,但你暫時只想啟動個數據庫來做測試,你就可以打 docker compose up db,咁就只會啟動 MySQL 呢個 Docker Container,其他服務唔會郁,夠晒靈活。
仲有啲進階但好重要嘅概念。例如 服務健康檢查(Healthcheck),喺你個 docker-compose.yml 裏面可以定義每個服務嘅健康檢查指令,當你行 docker compose up 嘅時候,Compose 可以等到個服務通過健康檢查(變成 healthy 狀態)先至啟動依賴佢嘅其他服務,確保成個應用堆棧啟動得有條不紊。另外,映像檔管理 都好關鍵,如果你用咗一啲輕量級基礎映像檔,好似係 Alpine Linux,咁重建同啟動速度都會快好多。
最後提多個小貼士,如果你喺 macOS 上用緊 OrbStack 呢類優化工具,或者習慣睇官方 Docker Docs,你會發現 docker compose up 嘅核心概念都係一樣,就係 容器編排 同 多容器啟動 嘅便利工具。記住,所有配置都係由 docker-compose.yml 呢個檔案主導,學識點寫同點用個 up 指令,你就已經掌握咗 Docker Compose 一大半嘅功力,可以好有效率咁管理你由 nginx、PHP 到 Redis 呢啲服務組成嘅開發環境或者測試環境。
AboutDockerProfessional illustrations
2026年最新 Compose File 語法
講到2026年最新嘅 Compose File 語法,我哋首先要明,Docker 官方嘅 Docker Docs 呢幾年真係改咗唔少嘢,尤其係由舊時 docker-compose(中間有條 hyphen)完全過渡到而家 docker compose(當成一個子命令)呢個 CLI 指令。所以,你而家寫嘅 docker-compose.yml 檔案,雖然個名仲可以沿用,但裏面嘅語法同最佳實踐已經有咗啲幾重要嘅更新。對於 DevOps 團隊或者日常要做容器化開發嘅朋友來講,唔跟住最新語法,隨時會喺多容器編排或者服務健康檢查呢啲環節撞板。
最新嘅 Compose File 語法,核心依然係用 YAML配置 來定義你成個多容器應用點樣行。但同舊時最大分別係,對服務健康檢查嘅支援更加原生同細緻。例如,你而家可以好簡單咁喺 service 底下定義 healthcheck,個 test 指令可以係好靈活嘅 CMD,而唔再係得個形。好似你起個 MySQL 容器,唔單止要佢行起,仲要確保佢真係接受緊連接,你先至啟動個用 PHP 同 Redis 嘅 web app。咁樣成個服務啓動嘅流程就穩陣好多,避免咗容器之間因為依賴未 ready 而出錯。另外,對於數據卷嘅管理亦都更加清晰,特別係當你用緊 Docker Desktop 或者而家好多人轉用嘅 OrbStack 呢類工具,數據持久化嘅路徑映射同權限設定,新語法都有更直觀嘅寫法。
喺實際應用上,譬如我哋要整一個典型嘅開發環境,包含 Flask(Python 框架)、nginx 同 Adminer 來管理數據庫。喺 2026 年嘅寫法,你會發現 depends_on 呢個指令可以配合健康檢查一齊用,真正做到「等埋你 ready 我先行」。舊時可能只係等個容器 run 起,但裏面個服務(例如 MySQL)可能仲未 load 完,新語法就解決咗呢個痛點。另外,對於映像檔管理,新語法鼓勵明確指定 tag,甚至係 digest,避免用 latest 呢啲浮動標籤,令到成個多容器啟動嘅過程更加可預測同可靠。呢點對於要重現生產環境問題嚟做容器偵錯,尤其重要。
仲有啊,而家寫 Compose File 嗰陣,對於資源限制(例如 CPU、記憶體)嘅設定語法更加統一,同 Docker run 命令入面嘅參數對應得更好。以前可能要用一啲比較迂迴嘅寫法,而家就直接喺 deploy 段落下面(就算唔係 Swarm mode)或者直接用 resources 來設定,令到個檔案更加易讀同易維護。另外,關於容器日誌嘅設定都豐富咗,你可以好仔細咁指定個 log driver 同埋輪轉策略,唔使驚個 log 檔案大到爆碟,影響住成個主機或者其他容器。
最後不得不提,新語法對於容器連結嘅概念已經進一步淡化,取而代之係用網絡別名(networks)同服務名(service name)來做服務發現,咁樣更加符合而家微服務架構嘅思路。而且,因為 Graphviz 呢類工具可以同 Docker Compose 整合得更好,你甚至可以透過一啲指令或者外掛程式,自動生成你成個多容器應用嘅架構圖,對於團隊溝通或者文檔化都非常有幫助。總括來講,2026 年嘅 Compose File 語法,目標就係令你個 YAML配置 檔案唔單止係一堆設定,而係一份可以自我說明、更加健壯同埋更貼近生產環境要求嘅藍圖。
AboutComposeProfessional illustrations
Up 指令背後嘅執行流程
好,等我哋深入拆解下 docker compose up 呢個指令背後究竟發生咗啲乜嘢。好多香港嘅 DevOps 工程師或者開發者,可能每日都喺 CLI 打呢句命令,但係未必個個都清楚佢背後嘅完整 執行流程。其實當你喺 terminal 打 docker compose up 嗰一刻,成個過程就好似一個精密嘅自動化生產線,由讀取設定檔到啟動晒所有 容器,中間涉及好多步驟。
首先,Docker Compose 會自動喺你當前嘅目錄,搵個名叫 docker-compose.yml 嘅 YAML配置 檔案。呢個檔案就係你成個 多容器應用 嘅藍圖,裏面定義咗各個服務(例如 MySQL、nginx、php、Redis、Flask 應用)點樣砌埋一齊。佢會先解析同驗證呢個 YAML 檔案嘅語法,確保冇格式錯誤。如果你用緊最新版嘅 Docker,佢其實係將 docker-compose 指令整合咗落 docker compose(中間有個空格)呢個 命令基礎 裏面,功能更加強大同統一,呢點喺 Docker Docs 都有強調。
跟住,Docker Compose 就會開始構建同準備 映像檔。佢會逐個服務去檢查,睇下每個服務指定嘅映像檔(例如 python:3.11-alpine、nginx:alpine、redis:alpine)喺本地係咪已經存在。如果唔存在,佢就會自動去 Docker Hub 下載返嚟,呢個過程就係 映像檔管理 嘅一部分。如果個服務係用 Dockerfile 去構建嘅(例如你個自訂嘅 Flask 應用),佢就會根據 Dockerfile 嘅指令,由頭開始構建一個新嘅映像檔。呢個時候,如果你加咗 –build 參數,佢就會 強制重新編譯 映像檔,就算 Dockerfile 冇改過都會重新行一次,對於確保依賴最新嘅時候好有用。
準備好所有映像檔之後,Docker Compose 就會開始創建同啟動 容器。呢個步驟其實係 容器編排 嘅核心。佢唔係亂咁嚟,而係會根據 YAML 檔案裏面定義嘅依賴關係(depends_on)同網絡設定,有秩序咁進行。例如,你個 Flask app 可能 depends_on MySQL 同 Redis,咁 Docker Compose 就會先啟動 MySQL 同 Redis 呢兩個 Docker Container,等佢哋初步運行起嚟,先至再去啟動你個 Flask app 容器。呢個就係 多容器啟動 嘅智慧所在,避免咗個應用程式一啟動就因為數據庫未準備好而即時炒粉。
啟動容器嘅過程,其實同逐個打 docker run 命令差唔多,但係 Docker Compose 幫你一次過處理晒,而且會自動處理好多瑣碎嘢。例如,佢會根據配置去建立專用嘅網絡,等所有服務可以透過服務名互相訪問,呢個就係 容器連結 嘅現代做法。佢又會幫你掛載好 數據卷,確保資料可以持久化保存,唔會因為刪除容器而無咗。如果你有設定 服務健康檢查,佢仲會等個服務通過健康檢查先算佢真正啟動成功,令到服務間嘅依賴更加可靠。
另外,docker compose up 預設係會將所有容器嘅 容器日誌 整合埋一齊,實時咁輸出到前臺,對於 容器偵錯 同監察啟動過程非常方便。你可以一眼睇晒 MySQL 初始化完成未、Nginx 有冇錯誤、個 Python app 有冇成功連到 Redis。如果你想將容器放去 後臺運行,你只需要加個 -d 參數(後臺模式)就得,咁樣個 CLI 就會即刻返返命令提示符俾你,但係所有容器會繼續喺背後運行緊,非常適合 容器化開發 同測試。
最後,想提下兩個實用技巧。第一,如果你唔想真係啟動啲容器,純粹想睇下 Docker Compose 會做啲乜,你可以用 docker compose up –dry-run 呢個 dry-run 模擬 功能,佢會列出所有將會執行嘅步驟,但係唔會真係郁手做,對於理解流程同 容器管理 好有幫助。第二,如果你用緊一啲優化工具好似 OrbStack,佢哋對 Docker Compose 有更好嘅整合同性能,但係個基本執行流程都係一樣嘅。理解清楚呢個 Up 指令背後嘅執行流程,絕對可以幫你更有效咁進行 容器化開發,遇到問題時亦都更快知道去邊度 容器偵錯,例如去睇特定服務嘅日誌,或者檢查網絡同 數據卷 嘅配置有冇出錯。
AboutcomposeProfessional illustrations
點解要用 --build 參數?
好啦,等我哋深入傾下,點解喺執行 docker compose up 嘅時候,好多時都要加個 --build 參數呢?呢個絕對唔係無聊動作,尤其係喺 容器化開發 同 DevOps 流程入面,理解呢個參數嘅作用,可以幫你慳返唔少時間,亦都避免咗好多古靈精怪嘅問題。簡單嚟講,--build 就係指令 Docker Compose 喺啟動服務之前,強制重新編譯 相關服務嘅 容器 映像檔。咁聽落好似好基本,但點解要特登重新編譯呢?唔通平時唔會自動編譯咩?
呢個就係關鍵所在啦。當你第一次行 docker compose up,或者你改過個 docker-compose.yml 檔案嘅配置(例如加多個新服務),Docker Compose 係會自動幫你建構映像檔嘅。但係,如果你之後再行多次 docker compose up,而個 docker-compose.yml 冇變過,咁佢就會直接用返本地已經存在嘅舊映像檔,貪快嘛。問題就出喺度:假設你個 Dockerfile 入面嘅指令有更新呢?例如你個 Python Flask 應用,個 requirements.txt 加咗新套件,或者你個 PHP 程式碼有改動,但係你冇改過個 YAML配置,咁 Docker Compose 就會懵盛盛,以為冇嘢變過,直接拎舊 容器 嚟用。結果呢?你喺本地改嘅 code 完全冇反映到入個 容器 度,你會覺得點解改極都冇效果,搞到一頭煙,仲以為自己撞鬼。呢個時候,你就要出動 docker compose up --build,明確命令個系統:「喂,唔好偷懶,同我重新根據最新嘅 Dockerfile 同埋 build context 砌過個映像檔出嚟!」咁樣,你嘅程式碼更新、套件更新先會真正被包入個新 容器 入面。
舉個實用例子你就會更明白。假設你個專案用緊 MySQL、Redis 同一個自訂嘅 Python 應用。個 Python 應用嘅 Dockerfile 係由一個 Alpine Linux 基礎映像檔開始,然後 COPY 你嘅原始碼入去。今日你修改咗個 app.py,加咗個新功能。如果你就咁行 docker compose up,個 Python 服務嘅 容器 會用返上個禮拜建構嘅舊映像檔啟動,你嘅新功能當然唔會出現。你必須要行 docker compose up --build,先會觸發重新建構個 Python 應用嘅映像檔,將你新改嘅 app.py 打包入去。至於旁邊嘅 MySQL 同 Redis 服務,因為佢哋係直接用官方嘅現成映像檔,冇自己嘅 Dockerfile 要建構,所以個 --build 參數對佢哋冇影響,唔使擔心會洗咗佢哋嘅數據。呢個就體現咗 容器管理 嘅精細度,你可以好有針對性咁控制邊個服務需要重建。
另外,--build 參數喺團隊協作或者 CI/CD 管道入面更加係不可或缺。想像下,你同事更新咗個 Dockerfile,優化咗建構步驟,或者將個基礎映像檔由 Alpine Linux 轉咗另一個版本。你 pull 咗最新嘅 code 同 Dockerfile 落嚟,如果唔加 --build 就 up,你 run 緊嘅依然係根據你本地舊 Dockerfile 建構出嚟嘅舊版本,咁就可能會出現「我部機行到,你部機行唔到」嘅經典問題。所以,穩陣起見,每次 pull 完 code,如果涉及 Dockerfile 或者建構相關檔案嘅改動,都應該養成習慣行 docker compose up --build,確保大家嘅開發環境係一致嘅,減少無謂嘅 容器偵錯 時間。
仲有一種情況,就係當你個建構過程牽涉到一啲層緩存(cache)嘅問題。有時你改咗一啲中段嘅指令(例如係 RUN apt-get update),但係因為 Docker 嘅層緩存機制,佢可能跳過咗呢步,直接用緩存嘅舊層,導致更新唔徹底。用 --build 參數嘅時候,你可以再配合 --no-cache 一齊用(即係 docker compose up --build --no-cache),咁就可以完全唔用緩存,由頭徹底重建一次,保證絕對乾淨。當然,咁樣做會慢好多,通常用喺解決一啲非常棘手嘅依賴問題,或者確保建構嘅絕對可重現性。
最後提一提,有啲朋友可能會問:「咁同我直接行 docker compose build 之後再行 docker compose up 有咩分別?」其實效果係類似嘅,docker compose up --build 就係將呢兩個步驟合二為一,更加方便。不過,分開做嘅好處係你可以先建構,檢查下有冇錯誤,然後先啟動。而 up --build 就一氣呵成,適合快速迭代開發。記住,無論你用邊種方法,目的都係確保你嘅 多容器應用 裏面,每一個自訂服務嘅 容器,都係根據最新、最正確嘅藍圖(Dockerfile)建造出嚟嘅,咁先可以保證你嘅應用行為同你預期一模一樣,唔會出現啲「時得時唔得」嘅靈異現象。所以話,識得靈活運用 --build 呢個參數,絕對係掌握 Docker Compose 命令基礎 同 容器編排 嘅重要一課。
AboutcomposeProfessional illustrations
Dry-run 模式實戰演練
好啦,各位 DevOps 嘅朋友或者係啱啱開始玩 容器 嘅新手,今次我哋就一齊嚟個實戰演練,深入拆解 Docker Compose 入面一個好實用但又可能被忽略嘅功能:Dry-run 模式。簡單啲講,Dry-run 就係「模擬運行」,佢唔會真係去 啓動 你個 MySQL 或者 nginx 容器,而係會同你「預演」一次,等你睇清楚當你打 docker compose up 呢個 CLI 指令嗰陣,個系統實際上會做啲乜嘢。呢個功能對於 容器偵錯 同埋確保你個 docker-compose.yml 配置冇穿冇窿,真係幫到手㗎!
點解 Dry-run 咁重要呢?想像下你個 YAML配置 寫咗十幾個 服務,裏面有齊 Python Flask 做後端、Redis 做快取、Adminer 管理數據庫,仲有啲複雜嘅 數據卷 同 容器連結。如果你一嚟就 docker compose up -d 行 後臺模式,出咗 error 又要逐行睇 容器日誌,拆完再 build 過,真係嘥時間。Dry-run 模式就係你嘅「事前檢查官」,佢會模擬整個 多容器啟動 嘅過程,話你知佢會根據你個 Dockerfile 去拉取邊啲映像檔(例如係唔係用 Alpine Linux 做基礎)、會建立邊幾個 容器、每個 服務 嘅啟動順序係點、會唔會做 強制重新編譯(--build)、同埋會唔會執行到 服務健康檢查。你喺真正落場前,就可以執好所有設定,避免喺真正嘅 容器化開發 環境入面撞板。
咁實際點用呢?好簡單,你喺你個 多容器應用 嘅 project 目錄入面,打開 terminal,打「docker compose up --dry-run」就得。個系統就會喺 CLI 度輸出一個詳細嘅模擬報告。我舉個實例啦,假設你個 docker-compose.yml 入面定義咗三個服務:一個 web 服務(用 php)、一個 db 服務(用 MySQL)、同一個 cache 服務(用 Redis)。當你行 Dry-run 嗰陣,你會好清楚咁見到:哦,原來 Compose 會先準備個 MySQL 容器,跟住先到 Redis,最後先啟動個 php web 容器,因為個 YAML 裏面可能定義咗 depends_on。你又會睇到佢會用邊個 tag 嘅 映像檔,會唔會因為本地冇而要去 pull。呢個過程完全唔會影響你現有嘅 容器 狀態,純粹係一個「預覽」,對於管理複雜嘅 容器編排 設定,真係不可或缺。
除咗基本嘅 --dry-run,你仲可以配合其他參數一齊做模擬,令到個演練更加貼近你真正想行嘅指令。例如,你想模擬吓如果加咗 --build 參數會發生咩事,你可以打「docker compose up --dry-run --build」。咁樣個報告就會顯示,佢會模擬重新構建你指定服務嘅 Docker 映像檔。又或者你想睇下如果行 後臺運行(-d)個流程係點,都可以加埋落去模擬。透過呢啲組合,你可以好精準咁預測到唔同 命令基礎 下嘅結果,尤其係當你個團隊有新成員加入,或者你要接手一個舊 project 嘅時候,Dry-run 可以幫你快速理解成個 容器管理 嘅流程,而唔使真係啟動服務搞到一鑊泡。
最後都要提提,要做好 容器偵錯 同規劃,除咗善用 Dry-run,平時都要養成好習慣。例如,寫 docker-compose.yml 時,啲縮同空格(YAML 好敏感㗎)要執到正;定期去 Docker Docs 睇下有冇新嘅最佳實踐;同埋可以考慮用吓 OrbStack 呢類工具嚟提升本地 Docker 嘅運行效率。Dry-run 模式就好似你落場比賽前嘅綵排,綵排得愈仔細,正式演出就愈少意外。尤其係當你個應用涉及多個服務同複雜依賴(例如要用 Graphviz 去生成架構圖表嘅情況),事前用 Dry-run 摸清底細,絕對可以幫你節省大量之後 偵錯 同修正嘅時間,令你嘅 DevOps 工作流程更加順暢同專業。所以,下次改完配置諗住 docker compose up 之前,不妨花幾秒鐘做個 Dry-run,包你話值得!
AboutContainerProfessional illustrations
服務依賴關係圖可視化
講到用 Docker Compose 管理一個多容器應用,例如一個有齊 MySQL、Redis、Nginx 同埋用 Python Flask 寫嘅後端服務嘅系統,最頭痛嘅嘢之一就係搞清楚啲服務之間嘅依賴關係圖。成日都係咁,你改一改個 docker-compose.yml 檔案,加多個 Adminer 或者換個 Alpine Linux 做基礎映像檔,跟住行 docker compose up 嘅時候,就發現啲服務啟動次序亂晒,某個容器因為佢依賴嘅數據庫未準備好而炒咗。喺 2026 年嘅今日,DevOps 流程講求快同清晰,所以能夠將呢個隱藏喺 YAML 配置入面嘅依賴關係圖可視化出嚟,就係一個超強嘅偵錯同規劃工具。
咁點樣先可以睇到呢個圖呢?其中一個最直接嘅方法,就係用 Docker Compose 本身提供嘅一個命令。你喺 CLI 打 docker compose config,佢會幫你驗證同埋合併你嘅 docker-compose.yml 檔案,但如果你想睇圖,就可以用一啲外部工具。例如,你可以將你嘅配置匯出,然後用 Graphviz 呢類開源工具去生成一個關係圖。不過,對於日常開發嚟講,有啲更 integrated 嘅方法。好似 OrbStack 呢類現代化嘅容器管理桌面軟件,佢就內置咗可視化功能,可以好靚仔咁展示出你所有運行緊嘅容器同佢哋之間嘅網絡連結,對於理解服務點樣溝通好有幫助。當然,最正宗嘅參考一定係去睇 Docker Docs,入面有詳細講解點樣定義 depends_on 呢類關鍵字去控制啟動次序同健康檢查,但文件係文字,始終冇圖像咁直觀。
我哋嚟具體啲講下個流程同價值。假設你個專案係一個典型嘅 Web App,用 docker-compose.yml 定義咗幾個服務。你寫明個 Flask 服務 depends_on MySQL 同 Redis,而 Nginx 又 depends_on 個 Flask 服務。當你行 docker compose up --detach 讓佢哋全部喺後臺運行時,Docker Compose 就會跟據呢個依賴次序去逐個啟動容器。但「啟動」唔等如「準備好」,所以進階啲嘅做法會喺 depends_on 底下加埋 condition: service_healthy,等 MySQL 真係通過咗健康檢查、可以接受連線,先至啟動 Flask 服務。呢個完整嘅依賴鏈,如果可以畫成一個有箭頭指向嘅圖,你一眼就可以睇出:哦,原來 Redis 同 MySQL 係平行嘅,佢哋都係 Flask 嘅前置條件;而 Adminer 呢個資料庫管理工具,可能只係依賴 MySQL,同其他服務冇直接關係。呢種可視化對於新加入專案嘅成員,或者係要重構服務架構嘅時候,價值無法量化。
除咗睇啟動次序,服務依賴關係圖對於容器偵錯同效能分析都好有用。當某個服務,例如係你個 PHP 容器,不斷寫錯誤日誌話連唔到數據庫,你第一時間就可以去張圖度睇下,兩個容器之間嘅連結(links)或者係共用網絡(networks)配置有冇出錯。又或者,當你想知道停用某個容器(例如停用 Redis 快取做測試)會影響到邊幾其他服務,張圖就可以俾你一個清晰嘅影響範圍評估。喺實踐容器編排同微服務架構時,呢種可視化能力可以話係從「估估下」同「不斷試錯」嘅混沌狀態,升級到「一目了然」同「精準控制」嘅專業 DevOps 層次。
最後都要提提,生成呢啲圖嘅過程本身,有時都會幫你發現配置上嘅問題。當你用工具去解析你個 docker-compose.yml 檔案嚟生成圖表時,工具可能會提示一啲語法問題,或者係發現咗循環依賴(例如 Service A depends_on Service B,但 Service B 又 depends_on Service A)呢類不可能嘅情況。就算你只係做 dry-run 模擬,呢個步驟都已經可以幫你避免咗一啲低級錯誤。總而言之,將服務依賴關係圖可視化,唔係咩花拳繡腿嘅功能,而係實實在在可以提升你管理多容器應用嘅效率、減少偵錯時間,並且令成個團隊對系統架構有共同理解嘅必備實踐。尤其喺 2026 年,工具同生態都越嚟越成熟,唔好再齋靠睇文字配置同估估下,好好利用可視化工具啦。
AboutDockerfileProfessional illustrations
實時監控容器狀態技巧
好啦,講到用 Docker Compose 起咗個多容器應用,例如係一個有齊 MySQL、Redis、Nginx 同埋用 Python Flask 寫嘅後端服務嘅系統,點樣可以實時監控容器狀態呢?呢個真係 DevOps 日常嘅核心技巧嚟㗎。好多新手以為行完一句 docker compose up -d 將服務放喺後臺運行就完事,其實咁樣係「隻眼開隻眼閉」,容器入面發生咩事你完全唔知,直到有使用者投訴先發現個服務死咗好耐。所以,實時監控唔係奢侈品,而係必需品。
最基本又最直接嘅方法,就係善用 Docker CLI 本身嘅命令。你唔好睇少佢,佢係你監控嘅第一道防線。當你個 docker-compose.yml 入面定義咗幾個服務,你可以用 docker compose ps 呢個命令,即時睇到所有容器嘅狀態、佢哋嘅埠口映射同埋健康狀況。呢個命令比起直接用 docker ps 嘅好處係,佢會鎖定喺你個專案嘅 YAML 配置,只顯示相關容器,唔會撈亂其他唔關事嘅容器,對於容器管理嚟講清晰好多。如果你想睇得更動態,可以考慮用 docker compose top,佢會顯示每個容器入面正在運行嘅進程,對於偵錯某個服務點解食咁多 CPU 或者記憶體好有用。例如你發現個 PHP 容器無啦啦多咗幾個不明進程,就可能係有問題啦。
不過,淨係睇狀態同進程係唔夠深入嘅,容器日誌先至係了解容器內部運作嘅靈魂所在。好多時個容器狀態顯示係「Up」,但其實個應用程式內部已經 error 緊。點樣實時睇日誌呢?最常用就係 docker compose logs 命令。你可以用 -f 參數去「跟住」個日誌輸出,即係 tail -f 咁樣,所有服務嘅日誌都會即時喺你個 terminal 度滾動顯示。但係咁樣有個問題,就係當你有多個容器(例如 MySQL、Redis、Flask app、Adminer)嘅時候,所有日誌會撈埋一齊出,好難睇。呢個時候,你可以在命令後面指定某個服務名,例如 docker compose logs -f flask-app,咁就只會專注監控你個 Python Flask 應用嘅日誌。對於要追蹤某個特定 API 請求或者數據庫連結錯誤,呢個方法非常精準。另外,記得喺你嘅 Dockerfile 或者應用程式入面,設定好將日誌輸出到標準輸出(stdout)同標準錯誤(stderr),咁樣 Docker 先可以捕捉到,否則你咩都睇唔到。
講到進階啲嘅實時監控,就要提到服務健康檢查呢個概念。喺你編寫 docker-compose.yml 嘅時候,你可以為每個服務定義一個 healthcheck 指令。呢個唔係 Docker Compose 獨有,而係 Docker 本身嘅功能,但用 Compose 去管理就更加方便。例如你個 Flask app,你可能要佢啟動後,內部個 Web server 真係 ready 咗先算健康。你就可以喺 YAML 配置入面,定義一個用 curl 或者你自定嘅腳本,定期去檢查一個特定嘅 endpoint(例如 /health)。Docker 就會根據呢個檢查結果,喺你運行 docker compose ps 嘅時候,喺狀態欄顯示「healthy」、「unhealthy」或者「starting」。呢個對於多容器啟動嘅編排好重要,例如你可以設定你個 app 服務要等個 MySQL 同 Redis 服務都變成「healthy」狀態先至啟動,避免咗因為依賴服務未準備好而導致嘅啟動失敗。呢種容器編排技巧,令到你成個應用嘅啟動同穩定性高好多。
除咗命令列,喺 2026 年嘅今日,都有好多圖形化工具幫到手做實時監控,尤其係對於本地開發環境。例如而家好流行嘅 OrbStack,佢就提供咗一個非常靚仔同直觀嘅介面,實時顯示每個容器嘅 CPU、記憶體、網絡 I/O 同磁盤 I/O 使用情況,一目了然。你唔使再喺 CLI 打一堆命令先拼湊出個畫面,直接喺個 GUI 度就可以睇到邊個容器「食資源」食得最犀利。對於管理一個複雜嘅、包含多個數據卷同網絡連結嘅容器化開發環境,呢類工具可以節省好多時間。當然,傳統嘅 Docker Desktop 本身都有圖形介面可以監控資源,但 OrbStack 之類嘅工具往往更加輕量同專注於開發者體驗。
最後,提一提一啲特別有用嘅監控同偵錯技巧。有時你想知你個 docker-compose.yml 嘅服務連結同網絡關係係點,可以用 docker compose config 配合一啲外部工具(例如 Graphviz)去生成一個視覺化嘅架構圖,幫你理解成個多容器應用嘅佈局。另外,當你懷疑係配置問題,可以用 docker compose config 呢個命令本身去驗證你個 YAML 配置有冇語法錯誤,或者用 --dry-run 模式去模擬運行,睇下會發生咩事而唔使真正啟動容器,避免搞亂現有環境。記住,實時監控唔單止係睇住個運行中嘅系統,亦包括喺啟動同重新配置之前,做好充足嘅檢查同模擬,咁先係一個完整嘅容器管理策略。
AboutMySQLProfessional illustrations
GPU資源配置最佳實踐
講到GPU資源配置最佳實踐,我哋首先要明,喺Docker Compose入面搞GPU支援,已經唔係乜嘢新鮮事,但係點樣配得精明、唔嘥資源,就真係有好多竅妙。尤其係而家去到2026年,好多開發團隊都用緊Docker Compose去管理啲涉及AI模型訓練、圖像處理或者科學運算嘅多容器應用,如果GPU配置唔妥當,輕則拖慢成個服務啓動,重則會令到個Docker Container食盡張顯示卡都做唔到嘢,搞到成個系統hang機。所以,今次就同大家深入拆解下,點樣喺你個docker-compose.yml檔案入面,落足功夫去設定GPU資源。
最基本亦最重要嘅一步,就係要喺你嘅服務定義入面,明確指定需要幾多GPU資源。唔好再用舊時嗰啲all or nothing嘅方法,即係成張卡俾晒一個容器用。而家Docker同Docker Compose嘅版本,已經支援好精細嘅GPU資源分配。你可以透過設定deploy.resources.reservations.devices呢個段落,去指明個容器需要用邊類型嘅GPU、要用幾多個裝置,甚至係要用到邊張卡嘅UUID。例如你部機有兩張唔同型號嘅顯示卡,一張用來做AI推理,一張用來做圖像渲染,你就可以透過設定,將兩個唔同嘅Docker Container分別指向唔同嘅硬體,咁樣就唔會打交啦。呢個設定對於容器編排同資源管理嚟講,係關鍵嚟㗎。
跟住落嚟,我哋要講下點樣同Dockerfile協同工作。你個映像檔入面嘅基礎設定都好影響GPU效能。如果你係用緊CUDA去做加速,咁你個基礎映像檔,例如係nvidia/cuda系列嘅tag,就要揀得啱。唔好貪方便就用個最肥最大、乜都有嘅tag,應該根據你個應用實際需要嘅CUDA版本同埋作業系統(例如Alpine Linux或者Ubuntu)去揀個最精簡嘅。因為一個臃腫嘅映像檔,唔單止下載慢、食磁碟空間,喺容器啓動同運行時,都可能會有唔必要嘅背景進程搶佔資源。記住,容器化開發嘅精神就係精簡同可重現,你個Dockerfile入面每一行指令,都應該為呢個目標服務。
另一個好實用嘅最佳實踐,就係一定要設定資源限制(limits)同保留(reservations)。呢個概念就好似你去酒樓訂位咁,reservations係你保證會有嘅位(資源),而limits就係你最多可以坐到幾多個位。喺GPU配置上,你可以設定個容器最多可以用幾多GPU記憶體。咁樣做有兩個好處:第一,可以防止某一個服務發癲,用盡晒所有GPU記憶體,搞到其他容器(例如一齊運行緊嘅Flask API服務或者後台處理程序)無資源可用,成個系統癱瘓。第二,對於DevOps團隊嚟講,設定咗明確嘅限制,就更容易監控同預算資源使用情況,做容量規劃都準確好多。你喺docker-compose.yml入面,可以好清晰咁寫明呢啲限制,方便成個團隊協作。
健康檢查(healthcheck)呢個功能,喺GPU應用入面嘅重要性,好多人會忽略。當你個容器需要用到GPU時,唔係話docker compose up成功行到後臺模式就等於無事。你應該設定一個自定義嘅健康檢查指令,去驗證個容器內部嘅GPU係咪真係可用到、CUDA driver load唔load到。例如,你可以設定個健康檢查,喺容器內部運行一個好簡單嘅nvidia-smi命令,或者用Python寫個短短哋嘅script去import torch睇下cuda是否available。如果健康檢查失敗,Docker Compose就會知道呢個服務有問題,可以根據你嘅設定去嘗試重啓或者發出警報,對於容器偵錯同維持服務穩定嚟講,係不可或缺嘅一環。
最後,我哋要提下數據卷(data volume)同GPU運算嘅配合。好多時,你個AI模型或者需要處理嘅大型數據集,都會放喺一個數據卷入面,而唔係直接打包入容器映像檔。呢個做法係正確嘅,可以令到映像檔細啲,更新都靈活啲。但係你要留意,當容器存取呢啲外部數據卷嘅數據去做GPU運算時,如果個數據卷嘅I/O速度太慢(例如係網絡儲存),就會成為瓶頸,張GPU卡幾勁都無用,因為等數據等到瞓著。所以,最佳實踐係要確保你嘅數據卷,係位於高速嘅本地SSD或者高效能嘅網絡儲存上,並且喺docker-compose.yml入面正確咁掛載(mount)入容器嘅適當位置。同時,你亦可以考慮用docker run嘅dry-run模擬或者Docker Compose本身嘅配置驗證功能,去測試下個路徑係咪正確,避免喺正式環境先至發現掛載唔到嘅問題。
總括呢幾個要點,由YAML配置嘅精準定義、到同Dockerfile嘅協作、再到資源限制與健康檢查嘅設定,最後到數據管理嘅考量,全部都係環環相扣。做好GPU資源配置,唔單止令到你用docker compose up啓動呢個多容器應用時更加順暢,更加可以確保成個容器化開發同部署流程,係高效、穩定同可預測嘅。記住,唔好因為貪快就求其寫個配置,花多少少時間跟足最佳實踐去做,長遠嚟講會為你同你嘅團隊省返更多偵錯同救火嘅時間。
AboutnginxProfessional illustrations
多環境配置管理攻略
講到多環境配置管理攻略,呢個真係現代 DevOps 同容器化開發嘅核心課題。好多香港嘅開發團隊,由細型初創到大型企業,都正面對同一個問題:點樣用 Docker Compose 優雅地管理「開發」、「測試」、「預發佈 (Staging)」同「生產」呢幾個唔同環境?唔通要為每個環境手寫一個完全唔同嘅 docker-compose.yml 檔案?咁樣做維護起上嚟簡直係惡夢,一改就要改幾個檔案,好易出錯。其實,Docker 同 Docker Compose 本身已經提供咗一套非常靈活嘅策略,等我哋深入拆解下。
首先,最基本亦係最推薦嘅做法,就係善用 YAML配置 嘅擴展功能。你可以準備一個基礎嘅 docker-compose.yml 檔案,入面定義晒所有 服務(例如你個應用可能包含 Python Flask backend、MySQL 數據庫、Redis 緩存、同埋 nginx 做反向代理)。呢個檔案會定義晒所有服務嘅通用設定,例如 容器 之間嘅 容器連結、基本嘅 數據卷 掛載。然後,針對唔同環境,你再創建多個 override 檔案,例如 docker-compose.override.yml(通常用於本地開發)、docker-compose.staging.yml、docker-compose.prod.yml。點樣運作呢?當你喺 CLI 打 docker compose up 嘅時候,佢預設會自動讀取 docker-compose.yml 同 docker-compose.override.yml 並合併。如果你想用測試環境配置,就可以用 docker compose -f docker-compose.yml -f docker-compose.staging.yml up 呢個命令。咁樣就實現咗「配置分層」,基礎設定一份,環境差異各自管理,非常清晰。
舉個實際例子,喺開發環境 (docker-compose.override.yml) 裏面,你可能會做以下設定:將本地嘅源代碼目錄掛載入 Flask 個 容器,咁樣一改代碼就即時生效,唔使重新 強制重新編譯 映像檔;又或者將 MySQL 同 Redis 嘅數據卷指向你本地嘅某個 ./data 目錄,方便 容器偵錯。你仲可能會啓用 Adminer 呢個數據庫管理工具,方便開發時直接喺瀏覽器操作數據庫。但係,呢啲設定絕對唔可以出現喺生產環境!所以,喺你嘅生產環境配置 (docker-compose.prod.yml) 裏面,你會做完全唔同嘅設定:唔會掛載本地源代碼,而係指向一個構建好嘅、版本化嘅正式 映像檔;會設定更嚴謹嘅 服務健康檢查;會將 nginx 容器嘅配置指向一個已經優化好嘅 .conf 檔案;並且會移除所有類似 Adminer 嘅開發工具。MySQL 同 Redis 嘅密碼會透過外部環境變數檔案注入,而唔會寫死喺 YAML 裏面。
跟住就要講到環境變數嘅重要性,呢個係 多環境配置管理 嘅靈魂。硬編碼 (hardcode) 任何配置(例如數據庫連接字串、API密鑰)落個 docker-compose.yml 都係大忌。正確做法係利用 environment 欄位搭配 .env 檔案。你可以有一個 .env.development、.env.production。喺 docker-compose.yml 裏面,你可以用 ${DB_PASSWORD} 呢種語法去引用變數。然後喺啟動時,透過 --env-file 參數指定用邊個檔案,例如 docker compose --env-file .env.staging up。咁樣,同一份 YAML配置,只要配合唔同嘅環境變數檔案,就可以輕鬆適應唔同環境,安全又方便。
另外,對於更複雜嘅 多容器應用,你可能需要考慮唔同環境下使用唔同嘅基礎 映像檔。例如開發環境你可能用 python:3.11-slim 方便 容器化開發 同偵錯;但生產環境你可能會選用更細、更安全嘅 Alpine Linux 基礎映像來構建你嘅 Python 應用。呢個時候,你可以善用 Docker Compose 嘅 build 段落裏面嘅 args 參數,傳遞唔同嘅構建參數去 Dockerfile,從而控制構建出唔同特性嘅映像檔。又或者,更直接嘅方法係,直接喺環境配置 YAML 裏面,覆寫 image 呢個欄位,指明生產環境用一個已經推送到私有倉庫嘅特定版本映像檔名。
最後,管理咁多個 YAML 同 env 檔案,點樣先唔會亂?實戰上,有幾個貼士。第一,一定要將所有環境配置檔案嘅範例(例如 docker-compose.prod.yml.example, .env.example)放入版本控制 (如 Git),但係要確保 .gitignore 檔案忽略咗真正帶有密碼同敏感信息嘅具體檔案(如 .env.prod)。第二,團隊要建立清晰嘅 容器編排 規則,規定邊個環境用邊個組合命令,最好寫入項目嘅 README.md 或者用 Makefile / 腳本封裝起嚟。例如,一個簡單嘅腳本可以令到 ./start.sh dev 同 ./start.sh prod 分別觸發對應嘅 docker compose up 命令組合。第三,善用 docker compose config 命令做 dry-run 模擬。當你合併咗多個 YAML 檔案之後,可以用呢個命令去驗證最終生效嘅配置係咪你預期嘅樣貌,尤其係喺部署上生產環境之前,做一次 docker compose -f docker-compose.yml -f docker-compose.prod.yml config 來檢查,可以避免好多配置錯誤。記住,熟讀 Docker Docs 官方文檔,同埋利用好似 OrbStack 呢類現代化工具(如果團隊用 Mac)去提升本地 容器管理 體驗,都可以令成個 多環境配置管理 流程更加順暢。
AboutphpProfessional illustrations
效能調校與資源限制
講到用 Docker Compose 起多容器應用,例如係一個典型嘅 Web Stack 有 nginx、MySQL、Redis、同埋用 Python Flask 寫嘅後端,好多時開發者淨係識得寫好個 docker-compose.yml,然後就 docker compose up -d 行後臺模式就算。但係去到真實環境,尤其係資源有限嘅情況下,唔做效能調校同埋設定資源限制,好容易就會出現某個容器食爆晒 CPU 同記憶體,搞到成個服務冧咗。所以,今次我哋就深入傾下點樣喺 Docker Compose 入面,做好資源管理,等你可以更專業咁做容器編排同埋 DevOps 工作。
首先,你一定要識得點樣喺 docker-compose.yml 嘅 YAML配置 入面,為每個服務設定 CPU 同記憶體限制。呢個係最基本嘅一步,亦係 Docker Docs 官方強烈建議嘅做法。例如你個 PHP 或者 Python 容器,如果冇限制,佢可能會以為自己可以獨佔成部主機嘅資源,瘋狂咁用,結果拖慢咗其他重要服務,好似 MySQL 或者 Redis 咁。設定方法好簡單,就係喺你個服務底下,加入 deploy.resources.limits 呢個段落。你可以設定 cpus 同 memory。例如 cpus: '0.5' 就係限制最多用半個 CPU 核心,memory: 512M 就係限制最多用 512MB RAM。同樣地,你亦可以設定 reservations,即係保證最少有幾多資源俾佢用,確保個服務一定起得到。記住,呢啲設定對於用 Alpine Linux 呢類輕量映像檔嘅容器特別有用,因為佢本身細,但你個應用程式可能好食資源,唔設定就好易失控。
除咗 CPU 同記憶體,另一個好影響效能嘅因素就係容器之間嘅連結同埋網絡 I/O。雖然 Docker Compose 已經幫你自動處理咗容器連結,但如果你啲服務配置得唔好,例如個 Flask app 不斷瘋狂查詢 Redis,或者個 PHP 容器同 MySQL 容器之間嘅查詢好冇效率,咁你淨係限制資源都冇用。呢個時候,你要配合番應用層面嘅優化。同時,你可以利用 Docker 本身嘅服務健康檢查功能,喺 docker-compose.yml 入面設定 healthcheck。當個容器內部嘅服務未準備好,Docker 可以知道,避免將請求派去一個未 Ready 嘅容器,變相提升咗整體服務嘅穩定性同效能。呢個對於要按順序啟動服務嘅多容器應用(例如要等 MySQL Ready 咗先啟動 Web App)特別關鍵。
跟住落嚟,我哋要講下數據卷(Volumes)同埋映像檔管理點樣影響效能。如果你個容器有大量讀寫操作,例如個 MySQL 容器,你將啲數據放喺邊度,速度可以差好遠。如果你用咗默認嘅儲存驅動,或者將數據寫喺容器層,咁效能會好差,而且容器刪咗數據就冇咗。正確做法係,喺 docker-compose.yml 入面明確定義 Volume,將啲需要持久化同高效能讀寫嘅數據(例如 MySQL 嘅 data files、或者你個應用嘅 log)掛載到主機嘅特定位置,或者用更好嘅 Volume Driver。咁樣唔單止數據安全咗,讀寫速度亦會快好多,直接減輕咗容器嘅 I/O 負擔,變相令你設定嘅 CPU 同記憶體限制更有效。另外,記得定期清理一啲冇用嘅舊映像檔同埋停止咗嘅容器,佢哋會霸住磁碟空間,有時都會間接影響到系統效能。你可以用 CLI 命令去做清理。
最後,我想特別提下兩個進階啲嘅技巧。第一,係善用 docker compose up --dry-run 呢類模擬命令。喺你真係 apply 一啲新嘅資源限制設定落個複雜嘅 docker-compose.yml 之前,最好先用 dry-run 模式檢查下有冇語法錯誤,或者估下個啟動順序會係點,避免一落去就因為配置錯誤而扯盡資源。第二,就係要識得睇容器日誌同埋監控。當你設定咗資源限制後,點樣知道個設定係太鬆定太緊呢?你就要靠 docker compose logs 去睇下有冇相關錯誤訊息,或者用一啲外部工具(好似 OrbStack 內置嘅監控,或者配合 Graphviz 去視覺化容器關係)去觀察 CPU、記憶體使用率。如果你發現個 MySQL 容器成日用到爆 memory limit,咁你可能要返去 tune 下 MySQL 本身嘅配置(例如 innodb_buffer_pool_size),而唔係一味加大 Docker 嘅限制。同樣地,如果你個 nginx 容器好少資源就夠,你就可以將個 limit 設低啲,慳返啲資源出嚟俾其他服務用。總而言之,效能調校同資源限制唔係一次過嘅設定,而係一個持續觀察、分析、同微調嘅過程,要將 Docker Container 嘅限制同入面行緊嘅應用程式(好似 Redis、PHP、Adminer 等)本身嘅特性一齊考慮,先至可以令到你成個多容器應用行得又順又穩。
AboutRedisProfessional illustrations
常見啟動錯誤排解
好啦,各位 DevOps 同好,當你用 docker compose up 去啟動你個精心編寫嘅 docker-compose.yml 檔案時,最怕就係見到一堆紅色嘅錯誤訊息,成個 多容器應用 即刻跪低。唔使驚,呢度同大家拆解幾個 常見啟動錯誤 同埋點樣 排解。首先,最常見嘅問題係 YAML配置 語法錯誤。Docker Compose 對縮排同格式好嚴格,一個空格打多咗或者少咗,都可以令到成個檔案解析失敗。特別係當你 容器編排 緊好似 MySQL、Redis、nginx 同 PHP 或者 Flask 呢類 Python 應用嘅複雜組合時,一定要逐行檢查。如果你唔肯定,可以試吓用一啲線上 YAML 驗證工具,或者喺 CLI 行個 docker compose config 指令,佢會幫你檢查語法有冇問題,呢個可以當係一種 dry-run 模擬,提早發現配置錯誤。
另一個經常撞板嘅位,就係 映像檔管理 出問題。錯誤訊息可能話「image not found」或者「pull access denied」。呢個通常有幾個原因:第一,你喺 Dockerfile 裏面指定嘅基礎映像檔(例如 Alpine Linux 某個版本)可能已經唔存在或者權限唔夠;第二,你自訂嘅映像檔未 Build 好就直接喺 docker-compose.yml 裏面用 image: 去引用。解決方法係,你可以試吓手動 docker pull 個映像檔落嚟,或者直接喺 docker compose up 後面加 --build 旗標,進行 強制重新編譯,確保所有 容器 用到嘅映像檔都係最新同埋存在嘅。記住,Docker 係逐層構建嘅,快取有時會搞亂檔,必要時要用 --no-cache 嚟重新構建。
跟住落嚟,係關於 容器連結 同網絡問題。尤其當你嘅服務,例如一個 Flask App 要連去 MySQL 容器,或者 PHP 要連 Redis,如果設定嘅服務名(service name)唔啱,或者對方個 容器 未準備好,你個 App 就會啟動失敗。Docker Compose 嘅網絡雖然方便,但係默認情況下,服務係按你個檔案寫嘅順序啟動,唔會等對方「準備好」先啟動下一個。呢個時候,你就要善用 服務健康檢查 配置。喺你個服務配置度,可以定義 healthcheck 指令,等 Docker 知道點樣先算係「健康」,然後其他服務可以用 depends_on 加上健康條件,等個資料庫真係可以連線先至啟動 Web 應用,咁樣 多容器啟動 就穩定好多。
端口衝突都係家常便飯。如果你本地機嘅 80 端口或者 3306 端口已經被其他程式(可能係你本身裝咗嘅 MySQL 或者另一個 nginx)占用,咁你個 容器 就綁定(bind)唔到端口,啟動會即刻失敗。解決方法係:第一,用 docker ps 睇吓有冇其他 容器 已經用緊個端口;第二,改一改你 docker-compose.yml 裏面嘅端口映射,例如將 "80:80" 改做 "8080:80",暫時避開衝突。另外,亦都可以考慮用好似 OrbStack 呢類更現代化嘅桌面工具,佢哋有時會更清晰咁顯示端口占用情況,方便你 容器偵錯。
數據卷 嘅權限問題,特別係喺 macOS 同 Linux 混合環境,或者用咗特定嘅 Alpine Linux 基礎映像檔時,經常會出現。你個 App(例如一個 PHP 網站)可能因為冇權限寫入掛載(mount)入去嘅 Volume 目錄,而導致啟動失敗或者運行異常。呢個時候,你要去檢查兩個地方:一係宿主機(Host)上嗰個目錄嘅權限,二係 容器 內嘅使用者 ID。有時最簡單嘅方法,係喺 Dockerfile 裏面,用 RUN 指令去更改容器內目標目錄嘅權限,或者確保你嘅應用程式以合適嘅使用者身份運行。
最後,一定要識得睇 容器日誌!當 docker compose up 失敗,或者某個 服務啓動 咗但係好快又退出咗,千祈唔好就咁算數。最好嘅 容器管理 同偵錯方法,就係用 docker compose logs [服務名] 去睇吓個別容器輸出咗啲乜嘢錯誤訊息。如果想睇實時日誌,可以加 -f 旗標。例如你個 Flask 應用話「Import Error」,咁就明顯係 容器 裏面嘅 Python 環境問題;如果 MySQL 話「無法分配記憶體」,就可能要調整 Docker 嘅資源限制。將日誌錯誤訊息直接 copy 去 Docker Docs 或者搜尋引擎度搵,九成問題都已經有人遇過同解決咗。記住,排解 嘅核心就係由日誌同錯誤訊息入手,逐步收窄範圍,咁先可以有效地管理好你嘅 容器化開發 流程。
AboutFlaskProfessional illustrations
與 Docker Scout 整合實例
好,等我哋深入講下點樣將 Docker Scout 同你嘅 docker compose up 流程整合埋一齊。喺 2026 年嘅今日,淨係識得用 docker compose up 去起動你嘅多容器應用,例如一個有齊 MySQL、Redis、Nginx 同 Flask 服務嘅堆疊,已經唔夠㗎喇。作為一個精叻嘅 DevOps 或者開發者,你更加需要關心容器入面嘅映像檔安全唔安全、有冇已知漏洞、授權條款係點。呢個時候,Docker Scout 就係你嘅神隊友。佢唔係一個獨立嘅 CLI 指令,而係一套整合喺 Docker CLI 同 Docker Desktop 裏面嘅工具,專門用嚟分析同管理你 Dockerfile 同 docker-compose.yml 所用嘅映像檔。
點樣喺日常操作入面整合呢?好簡單,你唔需要改變你現有嘅 YAML 配置。假設你有一個典型嘅開發環境,用 docker-compose.yml 定義咗幾個服務:一個用 Alpine Linux 做基礎嘅 Python Flask app、一個 MySQL 數據庫、一個 Redis 同埋一個 Adminer 做管理界面。你以往可能就咁喺 terminal 打句 docker compose up -d 就搞掂,等佢喺後臺模式運行。而家整合 Docker Scout,你可以在起動前後,甚至係日常維護時,加入 Scout 嘅分析步驟。例如,喺你每次修改完 Dockerfile 或者更新咗 docker-compose.yml 裏面嘅映像檔標籤之後,唔好急住就 up,可以先做一步 docker scout quickview,睇吓你準備用嘅映像檔(例如 python:3.11-alpine、mysql:latest、nginx:alpine)有冇高風險漏洞。呢個動作就好似一個強制嘅服務健康檢查前奏,確保你成個容器化開發嘅基礎係穩陣嘅。
具體啲嘅實例係點?我舉個場景。你團隊用緊 OrbStack 嚟行 Docker,因為覺得佢輕同快。你哋嘅專案用 docker compose 做容器編排,裏面仲用咗數據卷去持久化 MySQL 嘅數據。以往,你要知道呢堆容器嘅安全狀態,可能要靠第三方掃描工具,或者手動去 Docker Hub 睇吓。而家,你可以直接喺起動咗服務之後,運行 docker scout recommendations。呢個命令會基於你當前運行緊嘅容器,或者你指定嘅 docker-compose.yml 檔案,提供具體嘅建議。例如,佢可能會話你知:「喂,你個 Flask 服務用緊嘅 Python 映像檔,有個中級別嘅 CVE 漏洞,建議你升級去另一個小版本嘅 Alpine Linux 變體。」咁樣,你嘅容器管理就唔再係「起到就算」,而係有持續嘅映像檔管理同安全監控。
另一個超實用嘅整合點,就係喺 CI/CD 流程入面。當你喺 CI 裏面運行 docker compose up 做集成測試時,可以加多一個步驟,叫 docker scout cves。呢個命令會列出所有偵測到嘅漏洞,並且可以設定政策,如果發現嚴重漏洞就令個構建失敗。咁樣就將安全檢查左移(Shift-Left)咗,唔使等到部署上生產環境先至發現問題。對於多容器啟動同容器偵錯嚟講,呢個整合幫你提早排除咗因基礎映像檔問題而引致嘅古怪錯誤,令你睇容器日誌時,可以更集中喺應用邏輯本身,而唔係底層系統問題。
最後,點樣善用 Docker Scout 提供嘅報告同可視化呢?Docker Scout 可以生成 SBOM(軟件物料清單)同埋詳細嘅依賴關係圖。對於複雜嘅多容器應用,你可以用佢嚟理解唔同服務之間嘅映像檔依賴。呢啲資訊,對於遵守授權條款或者做審計時,係極之寶貴嘅。你可以定期運行相關命令,將輸出整合到你嘅內部 Wiki 或者監控儀表板。總括嚟講,將 Docker Scout 同 docker compose up 流程整合,唔係要你改變你嘅命令基礎,而係喺你現有嘅容器編排工作流裏面,加入一層智能嘅、自動化嘅安全與合規洞察。咁樣先至係 2026 年現代容器化開發同 DevOps 實踐應有之義,令你由淨係識得 up 同 down,升級到真正掌握成個容器生命週期嘅專家。
AboutPythonProfessional illustrations
生產環境部署注意事項
講到用 Docker Compose 去部署生產環境,好多 DevOps 團隊初頭都會犯一個錯誤,就係將開發用嘅 docker-compose.yml 直接拎上 server 用。呢個做法好危險,因為生產環境同你部 Mac 機或者 OrbStack 上面嘅開發環境要求完全唔同。首先,你一定要為生產環境獨立準備一份 YAML 配置,入面嘅設定要嚴謹好多。最基本嘅,千祈唔好再用「latest」呢類浮動標籤去指定映像檔,一定要用明確嘅版本號,例如 php:8.3-fpm-alpine 或者 mysql:8.0.36。咁樣先可以確保每次部署嘅一致性,唔會因為映像檔突然更新而炒咗你個服務。另外,開發時可能貪方便,會將個 MySQL 或者 Redis 嘅 root 密碼直接寫死喺 YAML 檔案度,但係上 production 就一定要用 Docker 嘅 secrets 管理或者環境變數檔案(.env)去處理,而且個 .env 檔案絕對唔可以 commit 上版本控制。
跟住就要講 容器 嘅資源限制同健康檢查。喺開發機,你任得個 Docker Container 食盡你 CPU 同 RAM 都冇所謂,但係生產環境嘅伺服器資源有限,唔做好限制好易會拖垮成部機。你一定要喺 docker-compose.yml 嘅服務底下,設定好 deploy.resources.limits 呢類參數,為每個服務分配合理嘅 CPU 同記憶體上限。例如你個 Flask 應用同 Redis 一齊行,就要計清楚各自需要幾多。另一個生死攸關嘅設定係 服務健康檢查。你一定要為每個關鍵服務,例如 MySQL、php-fpm 或者你自己寫嘅 Python API,設定 healthcheck 指令。咁樣 Docker Compose 同你嘅編排系統(例如 Swarm 或 Kubernetes)先至可以知道個容器係咪真係準備好接受流量,而唔係淨係個 process 行咗就當無事。如果冇健康檢查,好容易出現 nginx 已經開始將請求轉去個未完全啓動嘅 PHP 容器,導致一連串 502 錯誤。
數據持久化嘅策略亦係重中之重。開發時你可能用匿名 數據卷,或者甚至將檔案直接寫入容器層,但生產環境咁樣做等同自殺。所有有狀態嘅服務,好似 MySQL 嘅資料檔案、上傳嘅圖片、或者應用日誌,都必須要映射到宿主機嘅明確目錄,或者用有名字嘅數據卷(named volume)去管理。更重要嘅係,必須要有一個定期備份呢啲數據卷嘅機制。你可以用 docker run 指令配合 --volumes-from 去做備份,或者用更專業嘅工具。記住,容器本身係可以隨時被銷毀同重建嘅,但你嘅數據係無價嘅。
安全設定亦係生產環境部署不可忽視嘅一環。首先,所有容器都應該以非 root 用戶身份運行。你喺 Dockerfile 入面就要用 USER 指令去指定一個普通用戶,特別係好似 Alpine Linux 呢類輕量基礎映像檔,預設可能係 root,一定要改。其次,要盡量減少容器嘅攻擊面,將唔需要嘅端口全部關閉,只暴露必要嘅端口。例如,你個內部嘅 Adminer 管理工具,絕對唔應該將 8080 端口直接暴露俾公網,應該透過 nginx 做反向代理,再加埋身份驗證。網絡配置方面,唔好再用 Compose 自動生成嗰個 default 網絡,應該為你嘅 多容器應用 創建一個自定義網絡,並且仔細規劃服務之間嘅 容器連結 同通訊規則,只開放必要嘅連線。
最後,部署流程同監控日誌都要自動化。唔好再用人手喺 CLI 打 docker compose up -d 就算。應該將整個流程整合到 CI/CD 管道入面,包括用 docker-compose config 做 dry-run 模擬 去驗證 YAML 配置,用 docker compose build --no-cache 去 強制重新編譯 映像檔確保乾淨,然後先部署。所有 容器日誌 都唔應該只係用 docker compose logs 咁睇,一定要設定日誌驅動,將日誌集中收集到好似 ELK Stack 或 Loki 呢類日誌管理系統,方便 容器偵錯 同分析。記得參考最新嘅 Docker Docs 官方最佳實踐,佢哋會持續更新關於安全同效能嘅建議。總而言之,生產環境嘅 容器編排 同管理,係由一份嚴謹嘅配置檔案開始,貫穿到資源、安全、數據同監控每一個細節,絕對唔可以求其。
AboutAdminerProfessional illustrations
CI/CD 流水線整合示範
講到CI/CD流水線整合示範,我哋可以具體啲睇下點樣將 docker compose up 呢個指令變成自動化流程嘅核心。好多 DevOps 團隊到咗2026年都仲係手動噉行指令,但其實只要設定得好,成個「多容器應用」嘅啓動同部署都可以交俾流水線自動處理。例如,當你嘅 Git 有代碼推送(push)或者合併(merge)去主分支嗰陣,CI/CD 工具(例如 GitLab CI、Jenkins 或者 GitHub Actions)就會自動觸發一個 Job。呢個 Job 嘅任務好簡單,就係去執行 docker compose up --build -d 呢個命令,咁樣就可以確保每次更新都係用最新編譯嘅「映像檔」去重新啓動所有「容器」。呢個過程完全唔使人手干預,由測試到上線一氣呵成,真正實現「容器化開發」同部署嘅自動化。
具體啲嚟講,你嘅 docker-compose.yml 檔案就係成個流程嘅藍圖。喺 CI/CD 流水線裏面,你首先要確保個環境有安裝好 Docker 同 Docker Compose。跟住,流水線嘅腳本(script)就會做幾樣嘢:第一,用 docker-compose build 或者直接喺 up 指令加 --build 參數嚟「強制重新編譯」有改動過嘅服務映像,例如你改咗個 Dockerfile 或者某個 Python Flask 應用嘅代碼。第二,用 docker compose up -d 嚟喺「後臺模式」啓動所有服務,等佢哋「後臺運行」。第三,加入一啲「服務健康檢查」嘅指令,例如用 curl 或者專門嘅工具去檢查個 nginx 服務係咪已經喺埠 80 聽緊,又或者個 MySQL 資料庫係咪可以連接到。如果健康檢查失敗,流水線就應該標記為失敗,並且可以自動行 docker compose logs 嚟攞取「容器日誌」做「容器偵錯」,唔使登入伺服器慢慢搵。
為咗令個示範更貼地,我哋可以構思一個常見嘅技術棧做例子。假設我哋有一個用 Python 寫嘅 Flask Web 應用,佢要用到 Redis 做快取,用 MySQL 做主要資料庫,前面用 nginx 做反向代理,另外仲想用 Adminer 嚟管理資料庫。咁樣,個 docker-compose.yml 就會定義好呢四五個「服務」。當 CI/CD 流水線執行 docker compose up 嘅時候,佢就會根據個 YAML 配置,按次序拉取或者構建所需嘅映像(例如 Alpine Linux 做基底嘅輕量映像),建立「容器連結」同「數據卷」,然後一次過啓動晒所有「容器」。呢個就係「容器編排」嘅威力,將以往繁複嘅啓動步驟,變成一個可重複、可版本控制嘅自動化流程。
當然,整合落 CI/CD 唔係淨係識得 up 就得,仲要考慮點樣優化同管理。例如,你可以設定流水線先做一個 docker compose config 或者加 --dry-run 模擬,嚟驗證個 YAML 檔案有冇語法錯誤,避免直接執行時先嚟出錯。又或者,你可以利用 Docker 提供嘅 Docker Docs 入面建議嘅最佳實踐,例如用 .env 檔案管理環境變數,而唔好將密碼直接寫死喺 YAML 裏面。另外,關於「映像檔管理」都好重要,流水線應該將構建出嚟嘅新映像推送到私有嘅 Container Registry 度,方便回滾或者喺其他環境部署。至於點樣喺 CI/CD 環境度高效運行 Docker,2026年可能有更多新工具,例如 OrbStack 呢類針對開發者體驗嘅工具,或者雲原生嘅解決方案,但核心原則都係一樣:將 docker compose up 呢類「命令基礎」嘅操作,封裝成自動化、可監控嘅步驟。
最後,流水線整合仲有一個好處,就係方便做「多容器啟動」嘅測試同偵錯。你可以設定多個不同階段(stage)嘅流水線,例如一個階段專做單元測試,會啓動個 Flask 應用同測試用嘅 Redis 容器;另一個階段做集成測試,就會啓動齊全套服務(MySQL、nginx 等)。測試完成後,無論成功與否,流水線都可以自動執行 docker compose down 嚟清理所有容器,唔會留低一堆垃圾容器喺度。如果測試失敗,除咗睇日誌,你仲可以設定將當時嘅容器狀態用 Graphviz 呢類工具生成可視化圖表,幫助快速理解服務之間嘅關係同狀態。總而言之,將 docker compose up 整合到 CI/CD,唔單止係為咗方便,更重要係建立一套可靠、可追蹤嘅「容器管理」流程,令到你嘅應用從開發到上線都更加順暢同專業。
AboutAlpineProfessional illustrations
2026年容器趨勢與展望
講到2026年嘅容器趨勢同展望,我哋首先要睇吓個大環境。依家唔少公司已經唔係淨係用 Docker 嚟跑吓幾個獨立 Container 咁簡單,而係成個開發同部署流程都徹底「容器化開發」。以前你可能用 docker run 逐個逐個服務咁開,但去到2026年,多容器應用已經係標準,而 Docker Compose 作為一個輕量級嘅容器編排工具,地位更加鞏固。你睇吓而家啲新 project,十個有九個都會有個 docker-compose.yml 檔喺根目錄,一鍵就起齊成個 stack,入面有 MySQL、Redis、Nginx,再加個 Python Flask API,仲可能配個 Adminer 做管理介面,方便到極。呢種用 YAML配置 去定義晒所有服務啓動參數、數據卷同網絡嘅做法,已經成為 DevOps 日常。
展望落去,我覺得有幾個方向會越嚟越明顯。第一,係容器管理嘅工具會更加智能化同整合化。好似 OrbStack 呢類新興工具,佢哋目標係令到喺本地開發環境運行容器更加順滑、食更少資源,同 macOS、Windows 底層整合得更好,令到 docker compose up 呢個命令基礎操作快靚正。另外,Docker Docs 官方文檔亦都不斷更新,教大家點樣善用 --dry-run 模擬呢類進階參數,或者點樣設定服務健康檢查,確保個 PHP 服務真係 ready 先連個 Nginx 落去,減少 downtime。
第二個趨勢係圍繞容器偵錯同可觀測性(Observability)。以前睇容器日誌可能就係 docker compose logs 咁掃一大堆文字,但2026年嘅趨勢係會同更多可視化工具結合。例如,用 Graphviz 呢類工具去自動生成你成個多容器服務架構嘅依賴圖,一眼就睇明啲 Docker Container 之間點樣容器連結,邊個服務 depend on 邊個。呢樣對於複雜嘅微服務架構簡直係救命草。而且,容器日誌嘅管理會更加結構化,方便直接匯入監控系統做分析。
第三,係關於映像檔管理同安全性。大家會更加注重用最精簡嘅基礎映像,好似 Alpine Linux,去構建自己嘅 Dockerfile,減低攻擊面。同時,docker compose up 嘅過程會更加強調「不可變基礎設施」嘅原則,即係會多用 --build 參數去強制重新編譯映像,確保每次部署都用最新、最安全嘅程式碼同依賴包。另外,數據卷嘅使用會更加規範,避免將敏感資料直接寫死喺映像入面。
最後,係工作流程嘅深度融合。Docker Compose 已經唔再淨係本地開發玩具,好多 CI/CD pipeline 都會直接引用 docker-compose.yml 檔嚟做測試環境嘅多容器啟動。甚至乎,喺某啲簡單嘅生產環境,直接用 docker compose up -d 去後臺運行一組服務都係可行方案,當然,大規模嘅就會上 Kubernetes。但對於中小型項目嚟講,Compose 提供嘅簡潔性依然無可替代。仲有,大家會更慣用 docker compose up --detach 呢種後臺模式,然後配合其他 CLI 工具去管理同監控,成個流程更加自動化。
總括嚟講,2026年嘅容器世界,Docker 同 Docker Compose 依然係開發者嘅好朋友,但會變得更聰明、更安全、更融入成個軟件交付生命週期。無論你係用緊 PHP、Python 定係其他 stack,識得善用呢啲工具嚟定義同管理你嘅容器化開發環境,絕對係提升效率嘅關鍵。