關注“Java藝術”一起來充電吧!
Compose
是Docker
用於定義和運行多容器應用程序的工具。有了Kubernetes
之後,我們不需要過多的學習Docker Compose
,但也有必須瞭解下它。如應用在微服務項目中,我們可以通過Docker Compose
快速地將整個微服務項目打包生成的一個個jar
構建成Docker
容器鏡像文件,並替換應用程序所需要的環境變量。
舉個例子,假設我們整個微服務項目的代碼都放在一個idea project
下,服務按module
劃分,當我們在項目的根目錄下執行mvn clean package
命令之後,可以立即執行docker-compose build
命令將每個模塊下的jar
包構建爲鏡像,前提是我們先寫好Dockerfile
與docker-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-srv
與demo-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 boot
的application.yml
配置文件也需要修改下:
spring:
profiles:
active: ${SPRING_PROFILES_ACTIVE:dev}
server:
port: ${SERVER_PORT:8080}
冒號(:
)後面指定當環境變量沒有配置時,使用的默認值,這用於本地開發調試,因爲本地開發不使用docker
運行,本例中默認使用dev
環境爲本地debug
環境。
關於docker-compose
的使用就介紹到這,因爲其它的功能筆者暫時也都用不到,感興趣的讀者可自行深入去學習。
公衆號:Java藝術
掃碼關注最新動態