SpringCloud微服務包含多個SpringBoot可執行的應用程式,在單應用程式下,版本釋出時的打包部署還相對簡單,當有多個應用程式的微服務釋出部署時,原先的單應用程式部署方式就會顯得複雜且不可控。那麼我們就會思考使用簡單的部署方式,解決自動化釋出、自動化部署、微服務監控等問題。
我們使用目前行業通用的解決方案,Jenkins+GitLab+Maven+Docker+Kubernetes來實現可持續自動化部署微服務的功能。下面將從工程中Maven打包檔案配置、Dockfile檔案編寫開始到Kubernetes配置來說明如何實現SpringCloud微服務可持續自動化部署功能。
1、bootstrap.yml檔案不同環境載入配置
在專案打包部署時,我們系統的配置檔案需要根據不同的環境來區分開發、測試、生產環境的配置,在之前的SpringBoot工程中,我們用到spring.profiles.active配置屬性,使用application.yml、application-dev.yml、application-test.yml、application-sit.yml、application-uat.yml、application-prod.yml來區分不同環境的配置檔案。在SpringCloud中,我們用到了Nacos註冊中心,Nacos的Config預設讀取的是bootstrap.yml配置檔案,如果將Nacos Config的配置寫到application.yml裡面,工程啟動時就會一直報錯。下面是SpringCloud載入配置檔案的順序:
- bootstrap.yml(bootstrap.properties)先載入,用於應用程式上下文的引導階段,可以用來配置application.yml中使用到的引數,由父Spring ApplicationContext載入。
- application.yml(application.properties)後載入,用於配置各工程模組中使-用到的引數。
所以在SpringCloud工程中我們通過使用bootstrap.yml、bootstrap-dev.yml...等不同的配置檔案來區分不同的環境,有些框架是放到同一個yml配置檔案中,然後不同的配置放到不同的spring.profiles.active下面,類似於下面這種:
spring:
profiles: dev
開發配置項: 開發配置項
spring:
profiles: test
測試配置項: 測試配置項
但是,在實際開發過程中,我們開發、測試的配置檔案有時會經常修改,而生產部署環境確很少改動,當多人員開發時,難免會有部分人員不小心將配置檔案改動影響到生產環境配置,即使沒有影響,開發人員在改動時也要小心翼翼,害怕哪裡改錯。當我們將這些配置分開時,開發、測試的配置檔案無論如何改動,都不會影響到生產環境檔案,這正是我們想要的結果。所以我們將不同環境的配置放到不同的配置檔案中。我們將配置檔案分為bootstrap.yml、bootstrap-dev.yml、bootstrap-test.yml、bootstrap-prod.yml
<!-- bootstrap.yml -->
server:
port: 8001
spring:
profiles:
active: @spring.profiles.active@
application:
name: @artifactId@
cloud:
nacos:
discovery:
server-addr: ${spring.nacos.addr}
config:
server-addr: ${spring.nacos.addr}
file-extension: yaml
prefix: ${spring.nacos.config.prefix}
group: ${spring.nacos.config.group}
enabled: true
<!-- bootstrap-dev.yml -->
spring:
profiles: dev
nacos:
addr: 127.0.0.1:8848
config:
prefix: gitegg-cloud-config
group: GITEGG_CLOUD
<!-- bootstrap-test.yml -->
spring:
profiles: test
nacos:
addr: 測試地址:8848
config:
prefix: gitegg-cloud-config
group: GITEGG_CLOUD
<!-- bootstrap-prod.yml -->
spring:
profiles: prod
nacos:
addr: 生產地址:8848
config:
prefix: gitegg-cloud-config
group: GITEGG_CLOUD
上面的配置可以滿足分環境打包讀取不同配置檔案的目的,但是在實際開發過程中我們發現,我們的微服務太多,如果要修改Nacos配置的話,每個微服務的配置檔案都需要修改一遍,雖然可以用IDEA批量替換,但是感覺這不是很好的方式。我們理想的方式是這樣的:
- 所有的微服務配置檔案預設都從一個統一的地方讀取
- 當有某一個微服務需要特殊的配置時,只需要修改它自己的配置檔案即可
實現上面的方式,我們可以將Nacos的配置到放到Maven的profile中,不同環境的bootstrap.yml可以讀取其對應環境的配置資訊,修改後的配置如下:
<!-- bootstrap.yml -->
server:
port: 8001
spring:
profiles:
active: @spring.profiles.active@
application:
name: @artifactId@
cloud:
nacos:
discovery:
server-addr: ${spring.nacos.addr}
config:
server-addr: ${spring.nacos.addr}
file-extension: yaml
prefix: ${spring.nacos.config.prefix}
group: ${spring.nacos.config.group}
enabled: true
<!-- bootstrap-dev.yml -->
spring:
profiles: dev
nacos:
addr: @nacos.addr@
config:
prefix: @nacos.config.prefix@
group: @nacos.config.group@
<!-- bootstrap-test.yml -->
spring:
profiles: test
nacos:
addr: @nacos.addr@
config:
prefix: @nacos.config.prefix@
group: @nacos.config.group@
<!-- bootstrap-prod.yml -->
spring:
profiles: prod
nacos:
addr: @nacos.addr@
config:
prefix: @nacos.config.prefix@
group: @nacos.config.group@
<!-- pom.xml -->
<profiles>
<profile>
<activation>
<!--預設為dev環境打包方式-->
<activeByDefault>true</activeByDefault>
</activation>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
<nacos.addr>1127.0.0.1:8848</nacos.addr>
<nacos.config.prefix>gitegg-cloud-config</nacos.config.prefix>
<nacos.config.group>GITEGG_CLOUD</nacos.config.group>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
<nacos.addr>測試環境地址:8848</nacos.addr>
<nacos.config.prefix>gitegg-cloud-config</nacos.config.prefix>
<nacos.config.group>GITEGG_CLOUD</nacos.config.group>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
<nacos.addr>生產環境地址:8848</nacos.addr>
<nacos.config.prefix>gitegg-cloud-config</nacos.config.prefix>
<nacos.config.group>GITEGG_CLOUD</nacos.config.group>
</properties>
</profile>
</profiles>
這樣,通過在pom.xml裡面不同profile的配置,就可以實現修改一處,使所有微服務讀取Nacos的配置檔案同時修改。
修改完之後,可能會有這樣的疑惑:現在我們三個檔案bootstrap-dev.yml、bootstrap-test.yml、bootstrap-prod.yml內容配置基本是一樣的,只有profiles的值不同,那麼實際可以直接寫在bootstrap.yml一個檔案中,通過pom.xml來配置區分不同環境即可。那麼這裡做的目的和意義:主要是為了後續可擴充套件定製,某個環境特定的配置。
2、Maven打包配置
在編寫pom.xml之前,我們先了解一下幾個常用Maven打包外掛的區別和聯絡:
- maven-compiler-plugin: 用於在編譯(compile)階段加入定製化引數,比如設定專案原始碼的jdk版本、編譯的jdk版本,以及專案編碼等。
- maven-jar-plugin: 將maven工程打成 jar 包,提供了manifest的配置,生成jar包中一般存放的是.class檔案和resources目錄下的配置,不會將依賴的jar包打包成一個可執行的jar包。
- spring-boot-maven-plugin: 其在Maven的package生命週期階段,能夠將mvn package生成的軟體包,再次打包為可執行的軟體包,並將mvn package生成的軟體包重新命名為*.original。 其主要作用就是將SpringBoot工程程式碼和依賴的jar包全部打包為可執行的jar或war檔案,可以直接在jre環境下執行。
因為maven-jar-plugin打包的jar是把打包的jar和lib放在同一目錄下,不是打成一個包,所以這樣打的jar包檔案很小。spring-boot-maven-plugin打包是把maven-jar-plugin打的jar包和依賴庫repackage一個可執行的jar包,這個jar包檔案很大。如果考慮到系統升級時的網路因素,那麼使用maven-jar-plugin是最好不過了,當依賴庫不改變的時候,只升級很小的jar包即可。這裡因為是企業級微服務應用開發框架,不考慮網路傳輸的影響,考慮系統升級穩定性,不至於開發時依賴庫修改了版本,而生產環境依賴庫版本升級導致所有微服務受到影響,所以我們選擇使用spring-boot-maven-plugin外掛進行打包。
在GitEgg工程的父級pom.xml裡配置如下:
<properties>
<!-- jdk版本1.8 -->
<java.version>1.8</java.version>
<!-- maven-compiler-plugin外掛版本,Java程式碼編譯 -->
<maven.plugin.version>3.8.1</maven.plugin.version>
<!-- maven編譯時指定編碼UTF-8 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
<build>
<finalName>${project.name}</finalName>
<resources>
<!-- 增加分環境讀取配置 -->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.jks</exclude>
</excludes>
</resource>
<!-- 解決jks被過濾掉的問題 -->
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.jks</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<!-- 用於在編譯(compile)階段加入定製化引數,比如設定專案原始碼的jdk版本、編譯的jdk版本,以及專案編碼等 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${maven.compiler.encoding}</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<!-- 能夠將Spring Boot應用打包為可執行的jar或war檔案,然後以通常的方式執行Spring Boot應用 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<configuration>
<fork>true</fork>
<finalName>${project.build.finalName}</finalName>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<activation>
<!--預設為dev環境打包方式-->
<activeByDefault>true</activeByDefault>
</activation>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
<nacos.addr>127.0.0.1:8848</nacos.addr>
<nacos.config.prefix>gitegg-cloud-config</nacos.config.prefix>
<nacos.config.group>GITEGG_CLOUD</nacos.config.group>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
<nacos.addr>127.0.0.1:8848</nacos.addr>
<nacos.config.prefix>gitegg-cloud-config</nacos.config.prefix>
<nacos.config.group>GITEGG_CLOUD</nacos.config.group>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
<nacos.addr>127.0.0.1:8848</nacos.addr>
<nacos.config.prefix>gitegg-cloud-config</nacos.config.prefix>
<nacos.config.group>GITEGG_CLOUD</nacos.config.group>
</properties>
</profile>
</profiles>
以上Maven配置完成之後,就可以進行正常的打可執行的SpringBoot包了。通常情況下,如果不使用docker和k8s叢集,那麼就可以直接使用Jenkins一鍵打包部署到測試或生產環境了。
我們下面將一步步介紹如何實現將微服務打包為Docker檔案,進而釋出到Docker映象倉庫私服Harbor上,k8s拉取私服Harbor上的Docker檔案進行分散式部署。
- Docker: 開源的應用容器引擎,打包應用以及依賴包到一個可移植的映象中,可以釋出到任何流行的 Linux或Windows作業系統的機器上。
- Harbor: 區別於Docker官方提供的公共的映象倉庫,可以用於本地部署的私有Docker映象倉庫。
- Kubernetes(k8s): 用於自動部署,擴充套件和管理容器化應用程式的開源系統,可以自由地部署在企業內部,私有云、混合雲或公有云
3、Docker打包配置
目前,網上有多種Docker打包外掛使用說明,講解最多的是Spotify開源的,Spotify官方已不再推薦使用docker-maven-plugin外掛進行打包,而是推薦其最新的docker打包外掛dockerfile-maven-plugin,但是dockerfile-maven-plugin也已經很久沒有更新了,在使用方面也有侷限性,比如:只支援在本機Docker的映象build、tag、push。經過在網上搜尋,發現Google開源的Jib外掛功能更強大,它可以不寫Dockerfile,不需要在本地安裝Docker環境就能實現Docker打包,而且一直在更新,所以這裡選擇這個外掛作為我們的Docker打包外掛。
SpringBoot打包會將所有的依賴和資原始檔等打包到一起,生成一個Fat Jar,這個Fat Jar的檔案大小往往高達百兆,如果受制於網路環境,那麼釋出時,會傳輸較慢;同時,釋出多次後,會佔用大量的磁碟空間。尤其微服務架構下,會有一堆的Far Jar,那麼,我們可以利用Docker映象的分層結構特性,將應用程式的公共依賴打包為源映象層,釋出應用時,只發布業務修改層的程式碼。下面介紹Jib( jib-maven-plugin外掛 )如何將SpringBoot應用程式分層打包Docker映象,充分利用Docker的映象分層複用機制,解決網路限制和佔用大量磁碟空間的問題。
Jib( jib-maven-plugin外掛 )構建的三個引數:
-
buildTar:本地構建,不需要Docker daemon就可以將映象生成tar檔案,儲存在工程的target目錄下
-
dockerBuild:將構建的映象存到當前環境的Docker daemon
-
build:將構建的映象推送到遠端倉庫,官方倉庫或者Harbor私有倉庫
-
在GitEgg工程的父級pom.xml裡配置jib-maven-plugin如下:
<properties>
......
<!-- jib-maven-plugin外掛版本,程式碼打包docker -->
<jib.maven.plugin.version>3.1.4</jib.maven.plugin.version>
......
</properties>
<pluginManagement>
<plugins>
......
<!-- Docker 打包外掛 -->
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>${jib.maven.plugin.version}</version>
<!-- 繫結到Maven的install生命週期 ,此處如果不使用https,會有問題,需要設定sendCredentialsOverHttp=true-->
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--允許非https-->
<allowInsecureRegistries>true</allowInsecureRegistries>
<!-- 相當於Docerkfile中的FROM -->
<from>
<image>openjdk:8-jdk-alpine</image>
</from>
<to>
<image>${docker.harbor.addr}/${docker.harbor.project}/${project.artifactId}:${project.version}</image>
<auth>
<username>${docker.harbor.username}</username>
<password>${docker.harbor.password}</password>
</auth>
</to>
<container>
<!--jvm記憶體引數-->
<jvmFlags>
<jvmFlag>-Xms512m</jvmFlag>
<jvmFlag>-Xmx4g</jvmFlag>
</jvmFlags>
<volumes>/giteggData</volumes>
<workingDirectory>/gitegg</workingDirectory>
<environment>
<TZ>Asia/Shanghai</TZ>
</environment>
<!--使用該引數保證映象的建立時間與系統時間一致-->
<creationTime>USE_CURRENT_TIMESTAMP</creationTime>
<format>OCI</format>
</container>
</configuration>
</plugin>
</plugins>
</pluginManagement>
......
<profiles>
<profile>
<activation>
<!--預設為dev環境打包方式-->
<activeByDefault>true</activeByDefault>
</activation>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
<nacos.addr>172.16.20.188:8848</nacos.addr>
<nacos.config.prefix>gitegg-cloud-config</nacos.config.prefix>
<nacos.config.group>GITEGG_CLOUD</nacos.config.group>
<docker.harbor.addr>172.16.20.175</docker.harbor.addr>
<docker.harbor.project>gitegg</docker.harbor.project>
<docker.harbor.username>robot$gitegg</docker.harbor.username>
<docker.harbor.password>Jqazyv7vvZiL6TXuNcv7TrZeRdL8U9n3</docker.harbor.password>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
<nacos.addr>127.0.0.1:8848</nacos.addr>
<nacos.config.prefix>gitegg-cloud-config</nacos.config.prefix>
<nacos.config.group>GITEGG_CLOUD</nacos.config.group>
<docker.harbor.addr>172.16.20.175</docker.harbor.addr>
<docker.harbor.project>gitegg</docker.harbor.project>
<docker.harbor.username>robot$gitegg</docker.harbor.username>
<docker.harbor.password>Jqazyv7vvZiL6TXuNcv7TrZeRdL8U9n3</docker.harbor.password>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
<nacos.addr>127.0.0.1:8848</nacos.addr>
<nacos.config.prefix>gitegg-cloud-config</nacos.config.prefix>
<nacos.config.group>GITEGG_CLOUD</nacos.config.group>
<docker.harbor.addr>172.16.20.175</docker.harbor.addr>
<docker.harbor.project>gitegg</docker.harbor.project>
<docker.harbor.username>robot$gitegg</docker.harbor.username>
<docker.harbor.password>Jqazyv7vvZiL6TXuNcv7TrZeRdL8U9n3</docker.harbor.password>
</properties>
</profile>
</profiles>
在需要docker打包的工程pom.xml裡面新增外掛引用
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
在不需要docker打包的工程pom.xml裡面需要配置skip=true
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<configuration>
<!--此模組不打可執行的jar包,打普通jar包即可-->
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
Docker本地打映象tar包命令:
clean package -Ptest jib:buildTar -f pom.xml
Docker把映象push到本地docker命令:
clean package -Ptest jib:dockerBuild -f pom.xml
Docker把映象push到遠端映象倉庫命令:
clean package -Ptest jib:build -Djib.httpTimeout=200000 -DsendCredentialsOverHttp=true -f pom.xml
Jib( jib-maven-plugin外掛 )的構建可以繫結到maven生命週期,以上例項中,已經繫結到maven的install生命週期,在實際使用時,因為安全方面的考慮,不支援http傳送使用者名稱密碼,需要設定sendCredentialsOverHttp=true。
常見問題
- 在bootstrap.yml中無法讀取@spring.profiles.active@,且提示found character '@' that cannot start any token.
解決:專案中如果沒有指定spring-boot-starter-parent,resources->resource->filtering一定要設定為true才能夠解析@,如下所示:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
- GitEgg-Platform作為平臺jar包,不需要打docker檔案,在GitEgg-Cloud打包時會引入GitEgg-Platform的jar包,所以上面的配置只需要在GitEgg-Cloud工程下配置。
- K8S部署yaml,Jenkins指令碼會首先讀取子工程是否有配置部署的yaml,如果有則使用,如果沒有則讀取根目錄下的部署yaml。
apiVersion: apps/v1
kind: Deployment
metadata:
name: {APP_NAME}-deployment
labels:
app: {APP_NAME}
spec:
replicas: 1
revisionHistoryLimit: 3
selector:
matchLabels:
app: {APP_NAME}
template:
metadata:
labels:
app: {APP_NAME}
spec:
hostNetwork: true
containers:
- name: {APP_NAME}
image: {IMAGE_URL}/{IMAGE_PROGECT}/{APP_NAME}:{IMAGE_TAG}
imagePullPolicy: Always
resources:
limits:
cpu: 300m
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: {APP_PORT}
env:
- name: SPRING_PROFILES_ACTIVE
value: {SPRING_PROFILE}
imagePullSecrets:
- name: harbor-key
---
kind: Service
apiVersion: v1
metadata:
name: {APP_NAME}-service
labels:
app: {APP_NAME}
spec:
selector:
app: {APP_NAME}
ports:
- protocol: TCP
port: {APP_PORT}
targetPort: {APP_PORT}
- docker安裝啟動命令
docker pull 172.16.20.175/gitegg/gitegg-service-system:1.0-SNAPSHOT
# --restart=always 自動重新啟動 , /opt/gitegg 是配置 jar包執行的位置
docker run -d imageId --restart=always --name=gitegg-service-system -p 8006:8006 /opt/gitegg
# 檢視是否啟動
docker ps
# 檢視日誌
docker logs --tail 100 -f gitegg-service-system
- docker-compose配置啟動
docker-compose up -d
- docker使用容器內網路,當服務註冊中心Nacos使用docker-compose安裝時使用,註冊到Nacos的地址為docker容器內ip
......
networks:
- giteggNetworks
......
networks:
giteggNetworks:
driver: bridge
......
完整yaml
version: '3'
services:
gitegg-service-system:
image: 172.16.20.175/gitegg/gitegg-service-system:1.0-SNAPSHOT
container_name: gitegg-service-system
ports:
- 8001:8001
volumes:
- "/data/gitegg/gateway/gitegg-service-system.jar:/app.jar"
- "/data/gitegg/gateway/logs:/logs"
logging:
options:
max-size: "100m"
networks:
- giteggNetworks
gitegg-service-base:
image: 172.16.20.175/gitegg/gitegg-service-base:1.0-SNAPSHOT
container_name: gitegg-service-base
ports:
- 8002:8002
volumes:
- "/data/gitegg/base/gitegg-service-base.jar:/app.jar"
- "/data/gitegg/base/logs:/logs"
networks:
- giteggNetworks
gitegg-oauth:
image: 172.16.20.175/gitegg/gitegg-oauth:1.0-SNAPSHOT
container_name: gitegg-oauth
ports:
- 8003:8003
volumes:
- "/data/gitegg/oauth/gitegg-oauth.jar:/app.jar"
- "/data/gitegg/oauth/logs:/logs"
networks:
- giteggNetworks
gitegg-service-extension:
image: 172.16.20.175/gitegg/gitegg-service-extension:1.0-SNAPSHOT
container_name: gitegg-service-extension
ports:
- 8005:8005
volumes:
- "/data/gitegg/extension/gitegg-service-extension.jar:/app.jar"
- "/data/gitegg/extension/logs:/logs"
networks:
- giteggNetworks
gitegg-code-generator:
image: 172.16.20.175/gitegg/gitegg-code-generator:1.0-SNAPSHOT
container_name: gitegg-code-generator
ports:
- 8006:8006
volumes:
- "/data/gitegg/generator/gitegg-code-generator:/app.jar"
- "/data/gitegg/generator/logs:/logs"
networks:
- giteggNetworks
gitegg-gateway:
image: 172.16.20.175/gitegg/gitegg-gateway:1.0-SNAPSHOT
container_name: gitegg-gateway
ports:
- 801:80
volumes:
- "/data/gitegg/gateway/gitegg-gateway:/app.jar"
- "/data/gitegg/gateway/logs:/logs"
networks:
- giteggNetworks
networks:
giteggNetworks:
driver: bridge
- docker使用宿主機網路,不能和上面的使用容器內網路同時使用。當服務註冊中心Nacos單獨部署時使用,Nacos獲取到的是docker宿主機的ip
......
network_mode: "host"
......
完整yaml,使用了network_mode: "host"之後,不能再使用ports埠對映
version: '3'
services:
gitegg-service-system:
image: 172.16.20.175/gitegg/gitegg-service-system:1.0-SNAPSHOT
container_name: gitegg-service-system
network_mode: "host"
volumes:
- "/data/gitegg/gateway/gitegg-service-system.jar:/app.jar"
- "/data/gitegg/gateway/logs:/logs"
logging:
options:
max-size: "100m"
gitegg-service-base:
image: 172.16.20.175/gitegg/gitegg-service-base:1.0-SNAPSHOT
container_name: gitegg-service-base
network_mode: "host"
volumes:
- "/data/gitegg/base/gitegg-service-base.jar:/app.jar"
- "/data/gitegg/base/logs:/logs"
gitegg-oauth:
image: 172.16.20.175/gitegg/gitegg-oauth:1.0-SNAPSHOT
container_name: gitegg-oauth
network_mode: "host"
volumes:
- "/data/gitegg/oauth/gitegg-oauth.jar:/app.jar"
- "/data/gitegg/oauth/logs:/logs"
gitegg-service-extension:
image: 172.16.20.175/gitegg/gitegg-service-extension:1.0-SNAPSHOT
container_name: gitegg-service-extension
network_mode: "host"
volumes:
- "/data/gitegg/extension/gitegg-service-extension.jar:/app.jar"
- "/data/gitegg/extension/logs:/logs"
gitegg-code-generator:
image: 172.16.20.175/gitegg/gitegg-code-generator:1.0-SNAPSHOT
container_name: gitegg-code-generator
network_mode: "host"
volumes:
- "/data/gitegg/generator/gitegg-code-generator:/app.jar"
- "/data/gitegg/generator/logs:/logs"
gitegg-gateway:
image: 172.16.20.175/gitegg/gitegg-gateway:1.0-SNAPSHOT
container_name: gitegg-gateway
network_mode: "host"
volumes:
- "/data/gitegg/gateway/gitegg-gateway:/app.jar"
- "/data/gitegg/gateway/logs:/logs"
原始碼地址: