開發也需瞭解的運維知識之Docker Compose

關注“Java藝術”一起來充電吧!

ComposeDocker用於定義和運行多容器應用程序的工具。有了Kubernetes之後,我們不需要過多的學習Docker Compose,但也有必須瞭解下它。如應用在微服務項目中,我們可以通過Docker Compose快速地將整個微服務項目打包生成的一個個jar構建成Docker容器鏡像文件,並替換應用程序所需要的環境變量。

舉個例子,假設我們整個微服務項目的代碼都放在一個idea project下,服務按module劃分,當我們在項目的根目錄下執行mvn clean package命令之後,可以立即執行docker-compose build命令將每個模塊下的jar包構建爲鏡像,前提是我們先寫好Dockerfiledocker-compose.yaml配置文件。

Dockerfile文件的編寫省略。Dockerfile文件中的每一行命令都是一層鏡像,鏡像分層的好處是不需要每次都拉取一個大的鏡像。雖然編寫在Dockerfile文件中的每一行命令都是一層鏡像,但是不能實現共用,我們應該將通用配置構建成一個基礎鏡像,如jdk鏡像,如果需要nginx,再在jdk鏡像的基礎上構建nginx基礎鏡像。

docker-compose.yaml配置文件內容如下:

version: '3.7'

services:
  demo-srv:
    build: ./demo-srv
    image: wujiuye/demo-srv

  demo-client:
    build: ./demo-client
    image: wujiuye/demo-client

services配置需要構建的鏡像,爲每個需要部署的微服務配置一個service,如本例中的demo-srvdemo-client兩個微服務。build項指定Dockerfile所在的路徑,這裏使用相對路徑。image項配置構建後的鏡像名稱。

將編寫好的docker-compose.yaml文件也放於項目根目錄下,這不是必須的,只是爲了方便。對應的每個模塊(微服務)的Dockerfile也應該放在每個模塊的根目錄下。現在執行docker-compose就能構建出所有鏡像了。(這裏我們不指定鏡像的版本,總是使用lastest

如果我們想通過構建容器鏡像時替換spring boot應用程序的yml配置文件中的配置項,如指定spring boot使用哪個環境的配置文件、指定內置tomcat使用的端口號等,那麼我們可以在docker-compose中使用environment項配置,同時在docker-compose.yaml文件相同目錄下創建一個.env文件,配置環境變量對應的值。

.env配置文件內容:

SPRING_PROFILES_ACTIVE=sit
SERVER_PORT=8080

docker-compose.yaml配置文件修改,添加環境變量配置:

version: '3.7'

services:
  demo-srv:
    build: ./demo-srv
    image: wujiuye/demo-srv
    environment:
      - SPRING_PROFILES_ACTIVE
      - SERVER_PORT

  demo-client:
    build: ./demo-client
    image: wujiuye/demo-client
    environment:
      - SPRING_PROFILES_ACTIVE
      - SERVER_PORT

spring bootapplication.yml配置文件也需要修改下:

spring:
  profiles:
    active: ${SPRING_PROFILES_ACTIVE:dev}
server:
  port: ${SERVER_PORT:8080}

冒號(:)後面指定當環境變量沒有配置時,使用的默認值,這用於本地開發調試,因爲本地開發不使用docker運行,本例中默認使用dev環境爲本地debug環境。

關於docker-compose的使用就介紹到這,因爲其它的功能筆者暫時也都用不到,感興趣的讀者可自行深入去學習。

公衆號:Java藝術

掃碼關注最新動態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章