什麼是 Docker Compose?
解釋
如果您一直在關注這些指南,那麼您一直在使用單容器應用程式。但是,現在您想做一些更復雜的事情 - 執行資料庫、訊息佇列、快取或各種其他服務。您是在單個容器中安裝所有內容嗎?執行多個容器?如果您執行多個容器,如何將它們連線在一起?
容器的一個最佳實踐是每個容器應該只做一件事,並且要做好。雖然這條規則有例外,但請避免一個容器做多件事的傾向。
您可以使用多個 docker run
命令來啟動多個容器。但是,您很快就會意識到您需要管理網路、連線容器到這些網路所需的所有標誌等等。而且完成後,清理工作會稍微複雜一些。
使用 Docker Compose,您可以在單個 YAML 檔案中定義所有容器及其配置。如果您將此檔案包含在您的程式碼庫中,任何克隆您的程式碼庫的人都可以使用一個命令來啟動並執行。
瞭解 Compose 是一個宣告式工具非常重要 - 您只需定義它並開始使用。您並不總是需要從頭開始重新建立所有內容。如果您進行了更改,請再次執行 docker compose up
,Compose 將協調您的檔案中的更改,並智慧地應用它們。
Dockerfile 與 Compose 檔案
Dockerfile 提供構建容器映象的說明,而 Compose 檔案定義正在執行的容器。通常,Compose 檔案會引用 Dockerfile 來構建要用於特定服務的映象。
試一試
在本動手操作中,您將學習如何使用 Docker Compose 執行多容器應用程式。您將使用一個簡單的待辦事項清單應用程式,該應用程式使用 Node.js 和 MySQL 作為資料庫伺服器構建。
啟動應用程式
按照說明在您的系統上執行待辦事項清單應用程式。
下載並安裝 Docker Desktop。
開啟終端並克隆此示例應用程式。
git clone https://github.com/dockersamples/todo-list-app
導航到
todo-list-app
目錄cd todo-list-app
在這個目錄中,您將找到一個名為
compose.yaml
的檔案。這個 YAML 檔案就是所有魔法發生的地方!它定義了構成您的應用程式的所有服務,以及它們的配置。每個服務都指定了其映象、埠、卷、網路,以及其功能所需的所有其他設定。花一些時間探索 YAML 檔案,並熟悉它的結構。使用
docker compose up
命令啟動應用程式docker compose up -d --build
當您執行此命令時,您應該看到類似於以下內容的輸出
[+] Running 4/4 ✔ app 3 layers [⣿⣿⣿] 0B/0B Pulled 7.1s ✔ e6f4e57cc59e Download complete 0.9s ✔ df998480d81d Download complete 1.0s ✔ 31e174fedd23 Download complete 2.5s [+] Running 2/4 ⠸ Network todo-list-app_default Created 0.3s ⠸ Volume "todo-list-app_todo-mysql-data" Created 0.3s ✔ Container todo-list-app-app-1 Started 0.3s ✔ Container todo-list-app-mysql-1 Started 0.3s
這裡發生了很多事情!要強調幾點
- 從 Docker Hub 下載了兩個容器映象 - node 和 MySQL
- 為您的應用程式建立了一個網路
- 建立了一個捲來持久化資料庫檔案,以便在容器重啟之間保留它們
- 啟動了兩個容器,並配置了所有必需的配置
如果這感覺很複雜,別擔心!您會克服的!
現在一切都已經啟動並執行,您可以在瀏覽器中開啟 https://:3000 檢視網站。隨意將專案新增到列表中,勾選它們,並刪除它們。
如果您檢視 Docker Desktop GUI,您將看到容器,並可以深入瞭解它們的配置。
拆卸
由於此應用程式是使用 Docker Compose 啟動的,因此在您完成後很容易將其全部拆卸。
在 CLI 中,使用
docker compose down
命令刪除所有內容docker compose down
您將看到類似於以下內容的輸出
[+] Running 2/2 ✔ Container todo-list-app-mysql-1 Removed 2.9s ✔ Container todo-list-app-app-1 Removed 0.1s ✔ Network todo-list-app_default Removed 0.1s
卷持久化
預設情況下,當您拆卸 Compose 堆疊時,不會自動刪除卷。這樣做是為了方便您在再次啟動堆疊時恢復資料。
如果您確實想要刪除卷,請在執行
docker compose down
命令時新增--volumes
標誌docker compose down --volumes
或者,您可以使用 Docker Desktop GUI 透過選擇應用程式堆疊並選擇 **刪除** 按鈕來刪除容器。
使用 GUI 操作 Compose 堆疊
請注意,如果您在 GUI 中刪除了 Compose 應用程式的容器,那麼它只刪除了容器。如果您想要刪除網路和卷,則需要手動進行。
在本演練中,您學習瞭如何使用 Docker Compose 啟動和停止多容器應用程式。
其他資源
本頁是對 Compose 的簡要介紹。在以下資源中,您可以更深入地瞭解 Compose 以及如何編寫 Compose 檔案。