當前位置:
首頁 > 最新 > Docker教程:Docker Compose入門

Docker教程:Docker Compose入門

了解如何使用Docker的本地服務配置和部署工具來測試和調試多容器應用程序。

容器意味著在現代軟體堆棧中提供組件隔離。 將資料庫放在一個容器中,將Web應用程序放在另一個容器中,並且可以將它們全部縮放,管理,重新啟動並獨立換出。 但是開發和測試一個多容器應用程序並不像一次使用一個容器。

Docker Compose由Docker創建,用於簡化開發和測試多容器應用程序的過程。 這是一個令人想起Docker客戶端的命令行工具,它接收一個特殊格式的描述符文件,將應用程序從多個容器中組裝出來,並在單個主機上一起運行。 (Docker Swarm或Kubernetes等工具在多台主機上部署多容器應用程序。)

在本教程中,我們將逐步介紹定義和部署一個簡單的多容器Web服務應用程序所需的步驟。 雖然Docker Compose通常用於開發和測試,但它也可用於部署生產應用程序。 為了討論這個問題,我們將專註於開發和測試場景。

Docker Compose示例

最小的Docker Compose應用程序由三個組件組成:

1. 要構建的每個容器鏡像的Dockerfile。

2. Docker Compose將用於從這些鏡像啟動容器並配置其服務的YAML文件docker-compose.yml。

3. 構成應用程序本身的文件。

在我們的示例中,我們將創建一個測試Web消息系統,使用Bottle web框架以Python編寫,並配置為將數據存儲在Redis中。 如果在生產應用程序中使用,這將是可怕的不安全和不切實際(更不用說動力不足!)。 但關鍵是要展示這些作品是如何融合在一起的,並為你提供一個可以自己進一步充實的骨架。

要一次獲得所有部分,請下載並將此docker-compose-example.zip(http://www.infoworld.com/cms/mediaResource/asset?id=156685)文件解壓縮到工作目錄中。 將需要安裝最新版本的Docker; 我使用了17.12.01版本,這是當時最新的穩定版本。 請注意,本教程應該適用於Docker for Windows,Docker for Mac以及Docker的傳統Linux版本。

包中包含的Dockerfile非常簡單:

FROM python:3

ENV PYTHONBUFFERED1

ADD./code

ADD requirements.txt/code/

WORKDIR/code

RUN pip install-r requirements.txt

CMD python app.py

這組命令描述了一個使用stock python:3鏡像作為其基礎的鏡像,並使用兩個文件(都包含在.zip包中):requirements.txt和app.py. 前者被Python用來描述應用程序的依賴關係; 後者是Python應用程序本身。

docker-compose.yml文件的元素值得仔細檢查:

version:『3』

services:

redis:

image:redis

web:

build:.

command:python3 app.py

volumes:

-.:/code

ports:

-「8000:8000」

depends_on:

-redis

version行指定要使用的Docker Compose文件格式的版本。 Docker Compose經過了多次修訂,每次修訂都與特定版本的Docker引擎相關聯; 版本3是本文的最新版本。

services部分定義了此特定容器堆棧使用的各種服務。 在這裡,我們定義了兩個服務:redis(使用redis容器映像運行Redis服務)和web(我們的Python應用程序)。 每個服務描述符都提供有關服務的詳細信息:

1. build:描述構建時應用的配置。它可以只是一個路徑名,如這裡所示,或者它可以提供諸如Dockerfile之類的細節(而不是目錄中的默認Dockerfile)或參數在構建過程中傳遞給Dockerfile。

2. command:啟動容器時運行的命令。這將覆蓋容器的Dockerfile中提供的CMD語句(如果有的話)。

3. volumes:要為此服務裝入的卷的任何路徑。您還可以將卷指定為頂級配置選項,並在docker-compose.yml文件中重複使用跨多個容器定義的卷。

4. ports:容器的埠映射。您可以使用如此處所示的簡單格式,或更詳細的描述使用哪種協議的格式。

5. depends_on:描述服務之間的依賴關係的順序。在這裡,因為Web依賴於Redis,所以當Docker Compose啟動應用程序時,必須首先調用Redis。

服務中還有更多可用的選項,但這幾個足以讓一個基本項目開始。

基本的Docker Compose命令

將示例應用程序解壓到工作目錄後,下一步就是構建它並使其作為單個基本實例運行。 通過這個過程,我們可以了解Docker Compose的大部分主要命令,並了解它們在項目上下文中的使用方式。

請注意,所有這些命令都從包含docker-compose.yml文件的目錄以及該項目的其他文件運行。

docker-compose build

第一個使用新的Compose項目運行的命令build,根據項目的Dockerfile為需要從頭開始構建的項目組裝任何圖像。 在這種情況下,依賴於圖像的項目的任何部分(Redis)都不在此處處理。

構建過程的結果會回傳給控制台。 如果一切順利,你應該在鍵入時在本地鏡像列表中看到新鏡像:

為我們的示例應用程序成功運行docker-compose構建的輸出。 請注意Dockerfile中的每個步驟是如何詳細記錄的。

docker-compose up

up命令設置網路並從堆棧中的所有映像啟動容器,如docker-compose.yml文件中所述。 請注意,如果需要本地不存在的鏡像,則會在此階段停用。

容器運行後,將看到正在運行的容器的詳細信息回傳到控制台。 控制台仍然連接到容器,因此您可以通過按Ctrl-C來停止正在運行的應用程序堆棧。

應用程序啟動完成後,將Web瀏覽器指向http:// localhost:8000。 將看到一個原始消息應用程序的網頁,允許您為三個人(David,Krista和Adi)中的任何一個人留言並閱讀發送給他們的消息。 Web前端由Python腳本提供; 數據在Redis中被保存為簡單的鍵值對。

docker-compose down

down命令取消用於運行應用程序的容器和網路組件。 運行docker-compose之後按Ctrl-C可終止所有運行的實例,但不執行任何清理。 當您希望停止並刪除通過運行創建的網路,卷和映像時(例如,在一天的測試會話結束時,或者清除桌面以使用新應用程序時),可以使用它。

docker-compose up --no-start

如果你想設置一個Docker Compose應用程序,但你不想啟動它(例如,如果你想以非交互方式運行它)使用--no-start而不是剛剛啟動。 最初,Docker Compose有一個叫做create的命令來執行這個功能,但它已經被棄用了,以支持使用--no-start標誌。

docker-compose up --scale

如果你想在啟動應用程序時啟動多個服務副本,則可以使用deploy在Docker Compose文件中聲明它,或者在運行Compose時使用--scale開關。 我們的應用程序不需要此功能,但當你需要測試運行多個服務實例的應用程序的行為時,--scale開關可派上用場。

docker-compose start/restart/stop/pause/unpause

啟動,重新啟動和停止命令允許啟動,重新啟動或停止已使用up -–no --start命令準備好的Docker Compose應用程序。 在執行時,他們立即將控制台的控制權交還給用戶,而不是將控制台附加到容器上。 暫停和取消暫停命令允許您暫停和繼續執行容器,而不是完全停止或重新啟動它們。

額外的Docker Compose命令

其他一些Docker Compose命令對調試或監視正在運行的應用程序很有用:

? config:驗證並轉儲用於當前項目的Docker Compose文件。 這會讓你在嘗試構建或部署過程之前清除它包含的任何可能的錯誤。

? events:流式傳輸到項目中每個容器的控制台事件。 使用--json標誌將結果列印為JSON(對於ad hoc管道到文件中很有用)。

? port:在正在運行的服務實例上列印埠綁定的公共埠。 如果您需要發現連接哪個埠以獲取服務,這很有用。

最後,許多其他命令(如exec,images,logs,kill,rm,ps,pull,push和top)都會與你在Docker主客戶端中找到的相同功能相呼應。

Docker Compose和分散式應用程序包

一旦你創建了使用Docker Compose創建的多容器應用程序,下一步就將投入生產。正如Dockerfile可以內置到映像中以創建容器一樣,Docker Compose文件可以內置到映像中以創建整個應用程序堆棧。

Docker的最新版本引入了分散式應用程序包或DAB的概念。這個特性仍然被認為是實驗性的,可以讓你從Docker Compose文件創建一個DAB,該文件可以作為分散式多容器應用程序部署到Docker Swarm集群。

要生成DAB,首先將創建的容器圖像推送到註冊表,以便稍後可由任何運行應用程序的系統獲取它們。然後使用Compose文件在目錄中運行docker-compose包。這將產生一個可以部署到Docker Swarm或其他支持DAB格式的服務的映像。

如何進行下一步將取決於你計劃如何部署生產應用程序。例如,Docker Swarm就像Docker Enterprise一樣直接接受Docker Compose應用程序。另一方面,Kubernetes不支持Docker Compose格式,但有工具可將Docker Compose文件轉換為Kubernetes Resources文件並生成其他Kubernetes工件。

無論你的生產目的地是什麼,當你繼續開發多容器Docker應用程序時,你創建的Docker Compose文件將繼續對測試有用,這也是最重要的。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲技術之家 的精彩文章:

Gartner:AIOps「智能運維」真的來了,並且是趨勢

TAG:雲技術之家 |