版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/54968156
基于阿裡雲容器服務的微服務實踐 - Part 2. Docker Compose
作者:chszs,未經部落客允許不得轉載。經許可的轉載需注明作者和部落格首頁: http://blog.csdn.net/chszs
二、使用Compose定義微服務
Docker Compose是一個用于定義和運作多容器Docker應用程式的工具,它允許在單個檔案中定義多個容器應用以及這些應用所需的各種依賴,然後通過單個指令完成執行。Docker Compose在實際工作中非常有價值,随着Docker Compose的不斷完善,有成為取代docker run指令啟動Docker容器的趨勢。使用Compose,開發者可以使用Compose檔案配置應用程式的服務。然後,使用單個指令,從配置中建立和啟動所有服務。
Docker Compose非常适用于開發,測試和臨時環境,以及CI工作流。它的主要特征如下:
- 單個主機上的多個隔離環境
- 建立容器時保留卷資料
- 僅重新建立已發生變更的容器
- 變量和在環境之間移動元件
Docker Compose使用項目名稱來互相隔離環境。開發者可以在多個不同的上下文中使用此項目名稱:
- 在開發主機上,建立單個環境的多個副本
- 在CI伺服器上,為了使建構不會互相幹擾,可以将項目名稱設定為唯一的内部版本号
- 在共享主機或開發主機上,可以防止不同的項目使用了相同的服務名所造成的互相幹擾
使用Docker Compose基本上有三個步驟:
- 定義應用程式的環境Dockerfile,使得它可以在任何地方複制。
- 定義組成應用程式的服務docker-compose.yml,以便它們可以在一個隔離的環境中一起運作。
- 最後,運作docker-compose up,将啟動并運作整個應用程式。
Docker 1.13版引入了v3版的Docker Compose,詳見:
https://docs.docker.com/compose/compose-file/#version-3此版本的改動很少,主要的差別在于引入了deploy屬性。Deploy屬性允許指定容器的副本、復原更新、以及重新開機政策。
本文開發的微服務将會啟動一個WildFly應用伺服器,WildFly伺服器上預部署了一個JavaEE應用,此JavaEE應用可以與Couchbase資料庫伺服器進行通信,完成應用資料的增删改查等操作。下面先安裝Compose。
要安裝Compose,步驟如下:
- 安裝Docker Toolbox。因為Docker Toolbox包含了Docker引擎和Compose,是以對于Mac系統或Windows系統的使用者來說,安裝Compose隻需一步,下面的步驟忽略。
- 對于Linux使用者來說,先安裝Docker引擎
- 去Compose的GitHub首頁下載下傳發行包,見: https://github.com/docker/compose/releases
$ curl -L
“
https://github.com/docker/compose/releases/download/1.10.0/docker-compose-(uname−s)−(uname -m)” -o /usr/local/bin/docker-compose -
為其賦予可執行權限
$ chmod +x /usr/local/bin/docker-compose
-
測試安裝是否正确
$ docker-compose –version
docker-compose version: 1.10.0
下面是使用Compose定義的一個例子:
version: '3'
services:
web:
image: chszs/couchbase-javaee:travel
environment:
- COUCHBASE_URI=db
ports:
- 8080:8080
- 9990:9990
depends_on:
- db
db:
image: chszs/couchbase:travel
ports:
- 8091:8091
- 8092:8092
- 8093:8093
- 11210:11210
在上面的Compose檔案中,通過db和web屬性名定義了兩個服務。每一個服務的映像名由image屬性進行定義。
映像chszs/couchbase:travel啟動Couchbase伺服器,并配置它使用Couchbase的REST API,以及載入travel-sample庫,這個庫是一個大約32KB的JSON文檔。
映像chszs/couchbase-javaee:travel啟動WildFly應用伺服器,并部署應用的war檔案。
environment屬性定義了應用程式部署到WildFly應用伺服器時可以通路的環境變量。COUCHBASE_URI指向資料庫服務,這是在應用程式代碼中使用。
端口轉發則通過ports屬性來實作。
在Compose定義檔案中的depends_on屬性用于確定容器的啟動順序。但是,應用程式級的啟動就需要容器内運作的應用程式來確定。在本文的場景中,WildFly應用伺服器啟動相當快,而資料庫的啟動則需要數秒鐘。這意味着部署在WildFly的JavaEE應用程式在一開始的幾秒鐘内無法與資料庫進行通信。是以depends_on屬性就派上用場了。它可以確定在應用程式的初始化過程中,所依賴的微服務已啟動,而無需考慮再啟動順序。資料庫初始化代碼應該執行以下檢查:
- 存儲分區存在
- Couchbase資料庫的查詢服務已經可用
- Sample庫資料已載入
上面的應用程式可以使用docker-compose up -d指令在單個主機上啟動,或者是在Docker引擎的叢集下以Swarm模式使用docker stack deploy指令啟動它。
想繼續閱讀文本,請看下一篇《基于阿裡雲容器服務的微服務實踐 - Part 3. 容器微服務實踐》