前言
容器化 近年來在軟體技術領域蓬勃發展。這主要歸功於 Docker,這是一個簡化容器內程序管理的容器平台。
容器是輕量級、虛擬化、可移植、軟體定義的標準化環境,允許軟體與實體主機上運行的其他軟體隔離運行。這種可移植性特徵使開發人員能夠將其應用程式模組化為隔離的服務。此外,它還可以獨立提供服務,從而為擴展提供了空間。
雖然將應用程式拆分為多個服務確實很棒,但這也帶來了管理多個容器的額外開銷。您必須確保它們能夠進行通訊,並同時啟動和關閉。多虧了一個名為 Docker Compose 的工具,這變得非常簡單。Docker Compose 允許開發人員使用定義在 YAML 檔案中的規則來運行多容器 Docker 應用程式。YAML 檔案包含應用程式服務的定義,以及它們如何共享資料卷和網路。定義好服務後,您只需一個指令即可啟動所有服務。在本教學中, 我們將向您展示如何在 Ubuntu 20.04 上安裝、設定和開始使用 Docker Compose。
先決條件
-
由於這是一個動手實作的教學,您應該安裝 Ubuntu 20.04 作為初始作業環境。您還應該擁有一個具有 sudo 權限的非 root 使用者。這裡有一個 逐步教學,協助您設定 Ubuntu 伺服器。按照此教學來 設定您的 sudoers 檔案.
-
您還需要安裝 Docker。請參考這篇關於 如何在 Ubuntu 18.04 上安裝和操作 Docker.
步驟 1:安裝 Docker Compose
我們將從 Docker Compose 的 官方 GitHub 儲存庫 下載最新的穩定版本。您可以從 版本發佈頁面 找到最新版本,在撰寫本教學時,最新版本是 1.28.5.
首先,使用非 root sudo 使用者登入您的 Ubuntu 伺服器,並輸入以下指令。它會下載最新版本 (1.28.5) 並將執行檔儲存在 /usr/local/bin/docker-compose 目錄中。這使得它可以作為 docker-compose 在全域存取:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
下載完成後,輸入以下指令為 docker-compose 指令設定適當的權限以使其可執行:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
現在,透過執行以下指令來驗證安裝是否成功以及該指令是否可以被調用:
|
1 |
docker-compose –version |
您應該會得到類似以下的輸出:

這確認了 Docker Compose 已成功安裝在您的系統上。
步驟 2:建立 docker-compose.yml 檔案
為了幫助您了解如何使用 docker-compose.yml, 我們將使用官方的 Nginx 映像檔 來自 Docker Hub。部署完成後,我們應該能夠從容器中提供一個基本的 HTML 頁面。
我們將在主資料夾中建立我們的工作目錄。輸入以下指令來建立目錄:
|
1 |
mkdir ~/compose-example |
接下來,進入該目錄:
|
1 |
cd ~/compose-example |
進入目錄後,建立一個應用程式資料夾,它將作為 Nginx 環境的文件根目錄。我們可以將此資料夾命名為 app:
|
1 |
mkdir app |
- 建立 HTML 頁面
讓我們使用 nano 文字編輯器在 app 資料夾中建立 index.html 檔案:
|
1 |
nano app/index.html |
接下來,將以下 HTML 程式碼新增到檔案中:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="zh-Hant"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>Docker Compose 範例</title> <!-- Bootstrap 核心 CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">Awesome Docker Compose Example with CloudSigma</h1> <p class="h4"> 這是一個基本的靜態 HTML 頁面。 </p> <p class="lead text-muted"> 此頁面是由使用 <b>docker-compose </b> </p> </div> </div> </section> </main> </body> </html> |
要儲存檔案,請按 CTRL +O,ENTER。然後,使用 CTRL +X 關閉。接下來,我們將在專案根目錄中建立 docker-compose.yml 檔案。
- 使用 docker-compose 託管 HTML 頁面
接下來,輸入以下命令以使用 nano 編輯器開啟:
|
1 |
nano docker-compose.yml |
之後,在檔案中新增以下程式碼片段:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
該 docker-compose.yml 檔案以版本號開頭,該版本號會告訴 Docker Compose 我們正在使用哪個設定版本。請點擊此連結以了解更多關於 Docker Compose 版本控制.
在版本號之後,我們有 services 區塊,其中包含構成該環境的服務。在本教學中,我們僅指定了一個名為 webserver 的服務。該 webserver 服務將使用 nginx:alpine 映像檔。我們還定義了連接埠重導向 8000:80。這意味著所有來自實體主機上連接埠 8000 的請求都將被重導向到 webserver 容器的連接埠 80,也就是 Nginx 正在運行的位置。
volumes 指令允許您在實體主機與容器之間建立一個 共享資料卷,我們可以用它來持久化資料。在我們的 yml 程式碼片段中,我們將本機的 app 資料夾與容器共享。在容器內部,它將被放置在 /usr/share/nginx/html 位置。因此,它會覆寫 Nginx 的預設文件根目錄。您現在可以儲存並關閉該檔案。
到目前為止,您已經建立了範例 HTML 網頁和 docker-compose.yml 檔案,其中包含建置容器化網頁伺服器環境的說明。讓我們在下一步中看看如何啟動此設定。
步驟 3:執行 Docker Compose 命令
在此步驟中,我們將執行命令來啟動我們的容器化環境。以下是單一命令,它將初始化 Docker 映像檔的下載程序、為 webserver 服務建立容器,並在背景啟動容器化環境:
|
1 |
docker-compose up -d |
Docker 的設計旨在快速且高效,因此,當您執行上述命令時,它會首先檢查您的本機系統中是否存在定義的映像檔。如果缺失,它將從 Docker Hub 存放庫中獲取。它應該會顯示類似以下的輸出:

當命令執行完畢時,它將開始在背景運行容器環境。您可以使用以下命令驗證它是否正在運行:
|
1 |
docker-compose ps |
您應該會得到類似的輸出:

如果您導航到伺服器的 IP 地址或網域名稱並加上連接埠 8000,即 server_domain_or_IP:8000 您應該就能看到我們建立的範例 HTML 頁面:

如果您還記得,我們在容器和主機系統之間設定了一個共享資料卷。這使容器中的檔案與主機系統上的檔案保持同步。因此,如果您對 index.html 檔案進行變更,它會自動與容器同步,並在您於瀏覽器中重新載入頁面時反映出來。您可以使用 nano 編輯器進行嘗試。讓我們在下一步中學習更多命令。
步驟 4:用於管理容器環境的其他 Docker Compose 命令
現在您已成功使用單一 docker-compose-up 命令部署了網頁,讓我們看看一些在管理容器化環境時可能很有用的其他命令。
我們將從 logs 命令開始。當您在排除應用程式故障時,記錄檔(Logs)可能至關重要。首先,執行以下命令以檢視 Nginx 容器產生的記錄檔:
|
1 |
docker-compose logs |
以下是記錄檔的範例輸出:

您可以使用以下命令暫停環境執行,而無需變更容器的狀態:
|
1 |
docker-compose pause |
![]()
接下來,要取消暫停或恢復執行,請使用以下命令:
|
1 |
docker-compose unpause |
![]()
您可能希望停止容器而不銷毀其資料。為此,請使用以下命令:
|
1 |
docker-compose stop |
![]()
要銷毀與容器化環境相關聯的容器、網路和資料卷,請使用以下命令:
|
1 |
docker-compose down |
![]()
請記住,上述命令不會刪除 Docker Compose 用於啟動環境的基礎映像檔。這可以確保在您啟動環境時能更快地進行建置,因為它會檢查本機是否有相符的映像檔。如果您想要完全刪除基礎映像檔,則必須在命令中指定。以我們的範例來說,我們可以刪除 nginx:alpine 映像檔,使用以下命令:
|
1 |
docker image rm nginx:alpine |

最後,您可以在官方的 Docker Compose 命令列參考 文件中找到更多命令。
結論
在本教學中,您在 Ubuntu 20.04 上安裝了 Docker Compose,建立了一個基於 Nginx 網頁伺服器映像檔的容器化環境,並學習了如何使用 Docker Compose 命令來管理各種服務。
如果您想學習如何部署一個依賴多個容器的實際動態應用程式,請閱讀我們的教學:使用 Docker Compose 部署 Laravel、Nginx 和 MySQL。您也可以在官方的 Docker Compose 文件中找到 docker-compose 命令的完整清單。.
祝您運算愉快!
留言
目前尚無留言。成為第一個留言的人吧。