跳至主要内容

6.1 什麼是 Docker Compose?

接下來的章節將會是學習 Docker 的第一個小里程碑,因為使用 Docker Compose 本身就需要具備前幾章節我們所培養的基礎,否則會把自己搞得非常亂。

還記得我在第一次學習到 Docker Compose 的時候真的非常興奮,因為終於不再是練習獨立的物件,Bind Mount 很酷沒錯,容器的啟動很酷沒錯,撰寫多階段的映像檔也很酷,但再怎麼樣都是運作獨立的物件;直到第一次啟動 Docker Compose 時真的超級興奮,因為實在是太讚啦!

但不免俗的還是要說明一下,什麼是 Docker Compose 以及為什麼需要它。

有鑒於前面每一個章節基本上都是在介紹獨立物件的使用,而 Docker Compose 就是一個整合容器、Volume、虛擬網路並構成應用程式的工具。

而要使用 Docker Compose,會透過撰寫一個叫做 docker-compose.yml 的 YAML 檔案,去針對每一個服務做設定,並且透過單一的指令 docker compose up 來一鍵啟動所有的服務。

為什麼需要 Docker Compose?

先想想一個基本的 Web 應用程式需要什麼?一個 Web Server ( Nginx、Apache、Traefik ... ),一個 App Server ( Rails、Laravel、Django .. ),一個資料庫 ( PostgreSQL、MySQL、MangoDB ... )

就算是靜態頁面的產生器,也需要一個 Web Server 來提供路徑以及 SSL 的驗證吧?

目前的我們確實可以單獨啟動每一個容器,並且透過相同的虛擬網路 ( --network ) 來做到整合一個應用程式。

但如果整個應用程式有 6,7 個容器要啟動,每一次啟動輸入的參數都能確保萬無一失嗎?

這也是需要 Docker Compose 的原因,所有容器的啟動參數,如之前所學過的 --publish、--env、--name,volume 的名字,虛擬網路的名字等等都能夠被定義在一個文件中;確保每一次的啟動都是相同的,而且統一在一個檔案中做更動,避免誤植錯字啟動失敗的尷尬窘境。