由于Spring Boot默认集成了Tomcat,因此启动一个Spring Boot项目非常的简单,部署的时候也可以直接打成jar包使用java -jar命令部署。但是在生产环境下直接使用jar包部署会带来一些问题,比如只有一台服务器但是又想搞集群,再比如项目想要往自动化运维方向发展,这个时候就不得不把docker技术提上日程了。
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.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}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
其中的${docker.image.prefix}
需要我们在pom.xml中的properties
节点中定义,用于作为docker镜像的名字。
dockerDirectory
路径),新建Dockerfile文件:FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD demo.jar app.jar
RUN sh -c 'touch /app.jar'
RUN echo "Asia/Shanghai" > /etc/timezone;
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /demo.jar" ]
其中的demo
为打出的jar包的名字,也就是pom.xml中配置的finalName
。
yum -y install docker-io
service docker start
mvn clean package docker:build
打包完成之后,使用docker命令docker images
查看所有镜像,可以看到我们刚刚打好的镜像。docker run -p xxxx:xxxx -t image-name
使用命令运行镜像,也就部署完成了。docker logs -f image-name
其中的image-name
为jar包的名字,也就是pom.xml中配置的finalName
。
这样就把docker集成到Spring Boot中了,为我们的DevOps迈出了一大步~