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”