1. 程式人生 > 實用技巧 >容器編排

容器編排

在實際的開發環境或者生產環境,容器往往都不是獨立執行的,經常需要多個容器一起執行,此時,如果繼續使用run命令啟動容器,就會非常不便,在這種情況下,docker-compose是一個不錯的選擇,使用dockercompose可以實現容器編排,本文就來看看docker-compose的使用。本文以jpress這樣一個開源網站的部署為例,向讀者介紹docker-compose的使用。jpress是Java版的wordPress,不過我們不必關注jpress的實現,在這裡我們只需要將之當作一個普通的應用即可,完成該專案的部署工作。

準備工作

這裡我們一共需要兩個容器:
Tomcat
MySQL
然後需要jpress的war包,war包地址:

jpress

當然,這裡的jpress並不是必須的,讀者也可以結合自身情況,選擇其他的Java專案或者自己寫一個簡單的Java專案部署都行。

編寫Dockerfile

Tomcat容器中,要下載相關的war等,因此我這裡編寫一個Dockerfile來做這個事。在一個空的資料夾下建立Dockerfile,內容如下:

FROM tomcat
ADD https://github.com/JpressProjects/jpress/raw/alpha/wars/jpress-web-newest.war
/usr/local/tomcat/webapps/
RUN cd /usr/local/tomcat/webapps/ \
&& mv jpress-web-newest.war jpress.war

解釋:

  1. 容器基於Tomcat建立。
  2. 下載jpress專案的war包到tomcat的webapps目錄下。
  3. 給jpress專案重新命名。

編寫docker-compose.yml

在相同的目錄下編寫docker-compose.yml,內容如下(關於yml的基礎知識,這裡不做介紹,讀者可以自行查找了解):

version: "3.1"
services:
web:
  build: .
  container_name: jpress
  ports:
    - "8080:8080"
  volumes:
    - /usr/local/tomcat/
  depends_on:
    - db
db:
  image: mysql
  container_name: mysql
  command: --default-authentication-plugin=mysql_native_password
  restart: always
  ports:
    - "3306:3306"
  environment:
    MYSQL_ROOT_PASSWORD: 123
    MYSQL_DATABASE: jpress

解釋:

  1. 首先聲明瞭web容器,然後宣告db容器。
  2. build .表示web容器專案構建上下文為.,即,將在當前目錄下查詢Dockerfile構建web容器。
  3. container_name表示容器的名字。
  4. ports是指容器的埠對映。
  5. volumes表示配置容器的資料卷。
  6. depends_on表示該容器依賴於db容器,在啟動時,db容器將先啟動,web容器後啟動,這只是啟動時機
    的先後問題,並不是說web容器會等db容器完全啟動了才會啟動。
  7. 對於db容器,則使用image來構建,沒有使用Dockerfile。
  8. restart描述了容器的重啟策略。
  9. environment則是啟動容器時的環境變數,這裡配置了資料庫root使用者的密碼以及在啟動時建立一個名為
    jpress的庫,environment的配置可以使用字典和陣列兩種形式。

OK,經過如上步驟,docker-compose.yml就算配置成功了

執行

執行的方式有好幾種,但是建議使用up這個終極命令,up命令十分強大,它將嘗試自動完成包括構建映象,(重新)建立服務,啟動服務,並關聯服務相關容器的一系列操作。對於大部分應用都可以直接通過該命令來啟動。預設情況下,docker-compose up啟動的容器都在前臺,控制檯將會同時列印所有容器的輸出資訊,可以很方便進行除錯,通過 Ctrl-C 停止命令時,所有容器將會停止,而如果使用docker-compose up -d命令,則將會在後臺啟動並執行所有的容器。一般推薦生產環境下使用該選項。因此,這裡進入到docker-compose.yml所在目錄下,執行如下命令:

docker-compose up -d

執行結果如下:

執行後,通過docker-compose ps命令可以看到容器已經啟動了。

初始化配置

接下來,瀏覽器中輸入http://localhost:8080/jpress,就可以看到jpress的配置頁面,如下:

根據引導頁面配置資料庫的連線資訊以及網站的基本資訊:


注意:由於mysql和web都執行在容器中,因此在配置資料庫地址時,不能寫回環地址,否則就去web所在的容器裡找資料庫了。

配置完成後,執行如下命令,重啟web容器:

docker restart jpress

測試

瀏覽器中分別檢視部落格首頁以及後臺管理頁,如下圖:

其他

如果想要停止容器的執行,可以執行如下命令:

docker-compose down