Docker 化重新定義了軟體產業中的部署和自動化流程。自其誕生以來,Docker 團隊一直致力於讓自動化部署變得無縫。容器化技術 不僅能實現快速的應用程式開發與高效率,還能節省時間和精力。編排、定義和運行多容器應用程式等無與倫比的功能,使 Docker 成為開發人員的首選。
Docker 容器與映像檔
當您深入了解 Docker 時,溫習基礎知識是必不可少的。如果您沒有使用 Docker 的經驗,理解它的運作方式可能會有些困難。在本節中,我們將定義一些對初學者至關重要的概念。如果您認為自己已經熟悉這些概念,可以隨時跳過並進入下一節。您也可以查看我們的解釋 Docker 基本概念的完整指南.
-
Docker 映像檔
Docker 映像檔是唯讀檔案的集合。一旦建立 Docker 映像檔,您就無法修改它們,但允許刪除。我們根據需求使用 Docker 映像檔來建立一個或多個 Docker 容器。要檢查系統中運行的映像檔數量,請使用以下指令:
|
1 |
$docker images |
當您從遠端註冊伺服器(如Docker Hub)拉取映像檔時,您正在下載檔案和資料夾。要拉取映像檔,請使用以下指令:
|
1 |
$docker pull (名稱 的 該 映像檔) |
-
Docker 容器
Docker 映像檔是 Docker 容器的藍圖。技術上來說,Docker 容器是 Docker 映像檔的執行個體。想像一下,如果 Docker 映像檔就像父母,那麼 Docker 容器就是孩子。與只能建立一次的 Docker 映像檔不同,您可以使用單個映像檔建立多個容器。要檢查系統中運行的映像檔清單,請使用以下指令:
|
1 |
$docker ps |
要拉取容器,請使用以下指令:
|
1 |
$docker pull (名稱 的 該 容器) |
-
Docker 映像檔與容器如何運作
Docker 映像檔和容器攜手合作,釋放 Docker 的潛力。單個容器是透過 run 指令使用 Docker 映像檔建立的。當您建立 Docker 容器時,會建立一個稱為「容器層」(Container Layer)的新層。新建立的層包含應用程式及其相依性。您建立的每個容器都有不同的讀/寫容器層,且在 Docker 容器中所做的任何變更都會自動反映在容器層上。請記住,如果您選擇刪除容器,您也將失去該容器層。
向 Docker Compose 問好
Docker Compose 是一款容器管理工具,可讓您將所有 Docker 容器配置和編排到單個 YAML 檔案中。使用此工具,啟動、停止以及建立容器間的連結和資料卷都變得更加容易。
-
Docker Compose 的作用是什麼?
簡單來說,Docker Compose 透過消除衝突和組織問題,使複雜的任務變得更容易。它允許使用者集中管理不同的 Docker 容器。換句話說,Docker Compose 不是將所有服務都放在一個大型容器中,而是將一個服務拆分為多個服務,以便使用者可以毫不費力地存取和管理它們。
在本指南中,我們將引導您完成安裝目前版本的 Docker Compose 的步驟,以便在 CentOS 7 上管理多容器應用程式。我們還將介紹成功使用該軟體所需的一些基本指令.
-
如何使用 Docker Compose
使用 Docker Compose 非常簡單,即使對新手來說也是如此。讓我們來看看 Docker Compose 涉及的三個步驟:
1. 建置 (Build):首先,根據您的專案需求在 Dockerfile 中建置映像檔,或者從註冊伺服器中拉取。
2. 定義 (Define):接下來,您需要在 compose.yml 檔案中定義所有元件服務。
3. 運行 (Run):定義好元件後,就可以使用 docker-compose 指令來運行了。
先決條件
Before we move forward with installing Docker Compose on your CentOS server, make sure you have:
- 一個 在 CentOS 7 伺服器上具有 sudo 權限的非 root 使用者.
- 在您的機器上安裝的 Docker。請參閱此教學課程,瞭解如何在 Ubuntu 18.04 上安裝和操作 Docker.
您現在已準備就緒。接下來,請按照以下步驟在 CentOS 7 上安裝 Docker Compose。
步驟 1:安裝 Docker Compose
要獲取最新版本的 Docker Compose,請按照以下指南中的說明操作:Docker 文件 並從以下位置下載二進位檔案:Docker’s GitHub 儲存庫。透過執行以下命令來檢查您是否擁有最新版本的軟體:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
要使該二進位檔案可執行,請設定以下權限:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
接下來,查詢您的版本以檢查安裝是否成功:
|
1 |
$docker-compose --version |
以下程式碼將印出已安裝的版本:
然後,您可以使用已安裝的 Docker Compose 執行 “Hello World” 範例。
步驟 2:使用 Docker Compose 執行容器
Docker Hub(公開的 Docker 登錄庫)中有一個 “Hello World” 映像檔,可用於示範和測試。它展示了如何使用最少的設定透過 Docker Compose 執行容器。首先,您需要為我們的 YAML 檔案建立一個目錄:
|
1 |
$mkdir hello-world |
接下來,移動到此目錄:
|
1 |
$cd hello-world |
然後,使用您偏好的文字編輯器產生 YAML 檔案。在本教學課程中,我們將使用 Vi:
|
1 |
$vi docker-compose.yml |
按下 i 進入插入模式,然後在檔案中輸入以下內容:
|
1 2 |
my-test: image: hello-world |
在容器名稱中,將合併第一行。第二行指示程式應使用哪個映像檔來建立容器。docker-composeup 將在您輸入命令時尋找名為 hello-world 的本機映像檔以檢查其是否可用。要退出插入模式,請按 ESC。然後,輸入 :x 並按 ENTER 以儲存並退出檔案。可以使用 docker images 命令手動檢查您機器上的映像檔:
|
1 |
$ sudo docker images |
當完全沒有本機映像檔時,只會顯示欄位標題:
要建立容器,請在仍處於 /hello-world 目錄:
|
1 |
$sudo docker-compose up |
當您第一次執行該命令且沒有名為 hello-world 的本機映像檔時,它將從 Docker Hub 儲存庫下載:
為了確保安裝正常運作,Docker Compose 會拉取映像檔、建立容器、連接它並執行 hello 程式:
之後,會顯示所執行操作說明的列印輸出:
當 hello 完成其任務時,容器將關閉,且該命令將不再於容器中執行。查看作用中程序時將顯示欄位標題。然而,hello-world 容器將不會被列出,因為它目前並未運作:
|
1 |
$sudo docker ps |
要查看所有容器(而不僅僅是目前的容器),請使用 -a 旗標:
|
1 |
$sudo docker ps -a |
既然您已經嘗試過執行容器,您可以繼續學習一些基本的 Docker Compose 命令。
步驟 3:Docker Compose 命令
為了協助您開始使用 Docker Compose,本節將介紹由 docker-compose 工具提供的基本命令。docker-compose 是一個以目錄為基礎運作的命令。透過為每個容器產生一個目錄,且每個目錄包含一個 docker-compose.yml 檔案,您可以在同一台電腦上執行多組 Docker 容器。
到目前為止,您一直是在自行運行 Docker Compose。您可以透過按下 Ctrl-C 來將其關閉。這能讓終端機視窗顯示除錯訊息。然而,在生產環境中運行時,建議將 docker-compose 作為服務運行。可以使用 -d 選項作為實現此目的的簡單方法:
|
1 |
docker-compose up -d |
現在,docker-compose 會在背景執行。您可以使用以下指令來管理您的 Docker 容器群組(無論是已停止還是執行中):
|
1 |
$sudo docker-compose ps -a |
容器的 State 將會回報為 Exited(如果它已停止),如下面的範例所示:
目前正在運行的容器將會顯示:
|
1 2 3 4 |
Name Command State Ports --------------------------------------------------------------- nginx_nginx_1 nginx -g daemon off; Up 443/tcp, 80/tcp |
您可以在與用來啟動 Docker 群組的 docker-compose.yml 檔案相同的目錄中,終止所有執行中的 Docker 容器:
|
1 |
$docker-compose stop |
Note:如果您需要更強制地關閉,也可以使用 docker-compose kill。
在某些情況下,Docker 容器可能會在內部儲存其舊資料。如果您想重新開始,請使用 rm 指令從您的容器群組中移除所有容器:
|
1 |
$docker-compose rm |
在放置 Docker 容器和 .yml 檔案以外的其他目錄中執行這些指令,將會導致錯誤訊息:
|
1 2 3 4 5 6 |
ERROR: Can't find a suitable configuration file in this directory 或 any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml |
在本節中,我們已經介紹了使用 Docker Compose 操作容器的基本知識。如前所述,如果您需要對容器進行額外的控制,在下一節中,您可以存取 Docker 檔案系統,並從容器內部的命令提示字元執行指令。
Step 4: Access the Docker Container Filesystem
可以使用命令列工具 docker exec 在容器中執行命令提示字元並存取容器的檔案系統。例如,執行 “Hello World” 並查看 docker exec 指令需要花費多長時間完成。為了本教學的目的,可以使用 Docker Hub image of Nginx。建立一個名為 nginx 的新目錄並進入其中:
|
1 2 |
mkdir ~/nginx cd ~/nginx |
您現在應該有一個 docker-compose.yml 檔案,您可以在文字編輯器中開啟它:
|
1 |
vi docker-compose.yml |
然後,在檔案中加入以下內容:
|
1 2 |
nginx: image: nginx |
現在是關閉應用程式的時候了。要在背景啟動 Nginx 容器,請使用以下指令:
|
1 |
$sudo docker-compose up -d |
Docker Compose 將會下載 Nginx 映像檔並在背景執行容器。要繼續,您需要輸入容器的 CONTAINER ID。您可以使用以下指令檢視目前所有正在運行的容器:
|
1 |
$sudo docker ps |
您將會看到以下內容:
如果您想使用 docker exec 來修改此容器內部的檔案系統,您可以使用該容器的唯一 ID(在此範例中為 f139d0d78ca7)在容器內建立一個 shell:
|
1 |
$sudo docker exec -it f139d0d78ca7 /bin/bash |
可以使用 -t 選項開啟互動式終端機,而 /bin/bash 則為容器提供 bash shell。在此之後,您將會看到該容器的 bash 提示字元:
|
1 |
root@b86b6699714c:/# |
在您的容器內,您將會看到命令提示字元。重新啟動容器將會覆寫您所做的任何變更,除非您是在已儲存為資料磁碟卷(data volume)一部分的目錄中工作。如果您習慣使用 Linux 命令行工具,您應該知道大多數 Docker 映像檔都是使用最基本的 Linux 安裝來製作的。
結論
我們已引導您完成在 CentOS 7 上安裝最新版本 Docker Compose 以管理多容器應用程式的步驟。Docker Compose 同時啟動和關閉大量容器的能力令人印象深刻。從範本到應用程式只需幾分鐘。因此,如果您的工作涉及同時執行多個容器,那麼繼續使用 Docker Compose 是一個極佳的選擇。然而,它並非萬能的解決方案。根據您的特定需求,您也可以找到一些更好的選擇,例如:Kubernetes.
若要進一步探索 Docker Compose 的強大功能,您可以參考這些教學課程,其來自我們的部落格:
祝您運算愉快!






留言
目前尚無留言。成為第一個留言的人吧。