1,前言java
開發環境總須要調試,docker直接部署不須要調試,環境配置不同,這裏的目的只是,在docker文件環境與開發環境使用不一樣的配置文件,項目結構以下spring
2,設置項目配置文件docker
默認配置文件 application.yml apache
spring: profiles: active: ${spring.profiles.active}
這裏有個佔位符:${spring.profiles.active} 能夠在pom.xml,dockerfile,或 maven(mvn package –P dev)編譯時帶入,固然也可直接寫死 dev 或 prod等app
開發配置文件 application-dev.ymlmaven
# 開發配置 server: port: 8082
生成環境配置文件 application-prod.ymlide
# 生產配置 server: port: 8081
3,修改pom.xml文件測試
加入 profiles 環境配置,這裏用於測試 在profiles 組中加入 dev,test ,prod 分別表明,開發,測試,生成三個環境的配置ui
<profiles> <profile> <id>dev</id> <properties> <spring.profiles.active>dev</spring.profiles.active> </properties> <!--沒有指定其餘profile爲激活狀態時,該profile就默認會被激活--> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <spring.profiles.active>test</spring.profiles.active> </properties> </profile> <profile> <id>prod</id> <properties> <spring.profiles.active>prod</spring.profiles.active> </properties> </profile> </profiles>
build 中加入一個plugin節點內容以下,主要是爲了修改spring配置文件佔位符(注意是添加不是修改)。idea
<!-- 這個若是不配置,只能在application.yml中只能經過@...@帶入,docker又沒法經過@...@帶入 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <delimiters> <!-- 使用${..}做爲佔位符 --> <delimiter>${*}</delimiter> </delimiters> <!-- 同時還支持使用默認的佔位符(@..@) --> <useDefaultDelimiters>true</useDefaultDelimiters> </configuration> </plugin>
build 中加入一個plugin節點內容以下,這個主要用於docker 的編譯
<!-- Docker maven plugin --> <plugin> <!-- https://mvnrepository.com/artifact/com.spotify/docker-maven-plugin --> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.0</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.war</include> </resource> </resources> </configuration> </plugin> <!-- Docker maven plugin -->
3,建立一個Dockerfile文件
FROM openjdk:8-jdk-alpine VOLUME /tmp ADD demo-docker-0.0.1-SNAPSHOT.war app.war RUN sh -c 'touch /app.war' RUN echo "Asia/Shanghai" > /etc/timezone #這裏prod表明生產環境 ENV spring.profiles.active="prod" ENTRYPOINT ["java","-jar","/app.war"]
文件內容這裏很少作解釋
4,測試
(1)直接在idea中啓用調試
由於pom.xml的profiles節點中設置了「dev」爲默認,因此這裏,默認啓用調試時,走的是「dev」
(2)設置Run/Debug configurations 的Active profiles = prod 覆蓋 pom.xml默認配置dev爲「prod」
運行結果以下:
發現這裏已經修改成 prod
(3),使用marvn編譯命令覆蓋默認環境配置,在項目目錄執行命令以下:
mvn package -P prod
執行結果以下:
(4),執行docker編譯
啓動docker結果以下:
五,注意事項
1,application,Dokerfile,pom.xml 節點名稱要一致「spring.profiles.active」