Docker Compose簡介

拾月_發表於2019-04-29

在之前的文章中我們介紹了Docker相關的基礎知識以及如何建立一個映象並以一個容器例項來執行這個映象;眾所周知,目前微服務的開發模式逐漸成為主流的開發模式,在我們的實際開發流程中,大概開發流程是這樣的,首先我們針對特定業務需求完成一個微服務的開發工作,然後我們利用docker將微服務打包成一個映象(image), 然後將映象釋出到我們的私有映象倉庫中,最後我們可以在多個環境中以容器的形式來執行這個映象。如果針對一個微服務的部署這種方式看起來還算不錯,但是現實開發中我們開發的絕對不是一個微服務,因此我們將面對的可能是多個微服務的部署工作,針對多個微服務的部署如果我們還按照以上的方式來進行,那對於運維人員來說會有很多重複性的工作,針對這種情況,Docker內建的Compose元件為我們解決了這個問題。在實際動手操作之前讓我們先了解一下compose的定義。

Compose定義:

compose專案是Docker官方的開源專案,負責實現對Docker容器叢集的快速編排。Docker官方給Compose的定位是:Defining and running multi-container Docker applications,其前身是開源專案Fig。在之前的介紹中,我們可以通過Dockerfile模板檔案來定義一個單獨的應用容器。但是在我們實際的開發過程中,我們經常會碰到需要多容器相互配合來完成某項任務,針對這種情況compose應運而生。它允許使用者通過一個單獨的docker-compose.yml模板檔案(YAML格式)來定義一組相關聯的應用容器為一個專案(project)。

在Compose中有一個非常重要的概念:服務。

在分散式應用中,應用的不同部分稱為"服務"。例如,假設有一個視訊共享網站,它可能提供用於在資料庫中儲存應用程式資料的服務,用於在使用者上傳一些內容後在後臺進行視訊轉碼的服務,用於前端的服務等。在Compose中一項服務僅執行一個映象,但它會編制映象的執行方式:例如使用的埠,容器的多少個從節點應執行才能使服務的容量滿足其需求等。擴充套件服務就是更改執行該軟體的容器例項數,並將多個計算資源分配給程式中的服務。所有以上這些設定我們都可以通過定義一個docker-compose.yml(該檔案與Dockerfile檔案不同,Dockerfile檔案必須命名為Dockerfile,而該檔案的檔名可以自行定義,官方給的命名為docker-compose,我們就用官方的命名規則來命名)檔案來實現。

Compose的安裝:

Docker Desktop for Windows 和 Docker Toolbox已經包含了對Compose元件的安裝,因此我們不必再單獨進行安裝,我們可以通過使用docker-compose --version指令來檢視當前機器上的compose版本,如圖所示:

Docker Compose簡介

編寫docker-compose.yml檔案

該部分會用到之前文章中已經push到docker hub映象倉庫中的映象檔案。讓我們來建立第一個docker-compose.yml檔案,檔案內容如下圖所示:

Docker Compose簡介

該檔案中主要定義了以下幾項:

version定義了我們當前compose檔案格式的版本。

Services是服務的根節點,下方定義的就是我們要包含在這個compose中的所有的服務,本次示例我們只包含一個服務,web表示的是我們定義的服務的名稱,大家可以根據自己service的含義來命名。

image表示的是當前service的映象倉庫地址

ports表示的是將容器的80埠與主機的5000埠mapping

networks表示的是配置容器連線的網路

注意:當使用 HOST:CONTAINER 格式來對映埠時,如果你使用的容器埠小於 60 並且沒放到引號裡,可能會得到錯誤結果,因為 YAML 會自動解析 xx:yy 這種數字格式為 60 進位制。為避免出現這種問題,建議數字串都採用引號包括起來的字串格式。

我們進入到該檔案所在的目錄,並在cmd中通過docker指令docker-compose up來執行該檔案,如圖所示:

Docker Compose簡介

我們通過瀏覽器訪問http://localhost:5000,如圖所示:

Docker Compose簡介

這樣我們就通過compose釋出並執行了我們的一個service(一個映象的容器例項)

大家可能已經意識到目前我們在compose檔案中定義的內容和單獨執行docker run指令其實是沒有太大區別的,確實在compose中定義的單個服務的相關指令關鍵字和docker run指令中包含的關鍵字在含以上都是類似的,但是通過執行docker run指令一次只能建立出來一個image的一個容器例項,通過compose我們可以建立出來一組容器例項,我們管每一個容器例項叫做一個service,而compose正是對這一個個service進行了編排,包括service之間的依賴關係,啟動順序,所需要消耗的資源等等。在本篇我們只是單獨的介紹了compose的基本用法和基本指令,大家可以通過地址對更多的compose關鍵字進行學習。

希望本篇文章能夠更好的幫助大家理解docker compose的概念。如果有任何問題都可以給我留言。

注意: 由於google對定義的yml檔案格式要求的十分嚴格,因此大家在編寫自己的yml檔案時一定要格外小心注意,這裡給大家提供一個線上的yml檔案格式校驗器,大家可以對自己的yml檔案進行校驗。

相關資料:

yeasy.gitbooks.io/docker_prac…


上一篇(標記本地映象並上傳到映象庫中)

下一篇(Docker Swarm Mode簡介)




相關文章