本 demo 主要演示了如何容器化一个 Spring Boot 项目。通过
Dockerfile
的方式打包成一个 images 。
# 基础镜像
FROM openjdk:8-jdk-alpine
# 作者信息
MAINTAINER "Yangkai.Shen 237497819@qq.com"
# 添加一个存储空间
VOLUME /tmp
# 暴露8080端口
EXPOSE 8080
# 添加变量,如果使用dockerfile-maven-plugin,则会自动替换这里的变量内容
ARG JAR_FILE=target/spring-boot-demo-docker.jar
# 往容器中添加jar包
ADD ${JAR_FILE} app.jar
# 启动镜像自动运行程序
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/urandom","-jar","/app.jar"]
前往 Dockerfile 目录,打开命令行执行
$ docker build -t spring-boot-demo-docker .
查看生成镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
spring-boot-demo-docker latest bc29a29ffca0 2 hours ago 119MB
openjdk 8-jdk-alpine 97bc1352afde 5 weeks ago 103MB
运行
$ docker run -d -p 9090:8080 spring-boot-demo-docker
pom.xml 中添加插件
<properties>
<dockerfile-version>1.4.9</dockerfile-version>
</properties>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-version}</version>
<configuration>
<repository>${project.build.finalName}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
<executions>
<execution>
<id>default</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
执行mvn打包命令,因为插件中 execution
节点配置了 package,所以会在打包的时候自动执行 build 命令。
$ mvn clean package -Dmaven.test.skip=true
查看镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
spring-boot-demo-docker 1.0.0-SNAPSHOT bc29a29ffca0 2 hours ago 119MB
openjdk 8-jdk-alpine 97bc1352afde 5 weeks ago 103MB
运行
$ docker run -d -p 9090:8080 spring-boot-demo-docker:1.0.0-SNAPSHOT