docker容器化逐渐流行,加上已经流行的spring boot2.0。那么两者如何结合一起呢?
首先为了偷懒,直接从https://start.spring.io/上面拉去一个spring boot2.0项目
可以看到, 官网的spring boot 版本 已经到了2.0.6.生成后,download下来导入我们的ide中。
然后,我们写一个简单的requestMapping
返回 “Hello Docker World”!写这个为了验证该项目部署到docker后 是否正常
接着在application.propertise或者application,yml中修改端口号为8090。因为8080实在用的太多啦!
重点来了 。在pom.xml中添加
<docker.image.prefix>hellospringbootdocker</docker.image.prefix>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
</configuration>
</plugin>
以及
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
上面那段maven中的配置是参考了官网中的说明:To ensure the jar is unpacked before the docker image is created we add some configuration for the dependency plugin。机翻就是:为确保在创建docker镜像之前解压缩jar,我们为依赖项插件添加一些配置。
然后是Dockerfile,该文件可以新建一个File,然后修改名字,并放到项目的根目录底下。内容是
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/hello-springboot-docker-0.1.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
hello-springboot-docker-0.1.0.jar就是我们的项目。这个项目JAR文件作为“app.jar”添加到容器中,然后在ENTRYPOINT中执行。
这里添加了一个指向“/ tmp”的VOLUME,因为这是Spring Boot应用程序默认为Tomcat创建工作目录的地方。效果是在服务器“/ var / lib / docker”下创建一个临时文件,并将其链接到“/ tmp”下的容器。
先来验证下项目是否正常,进入项目的目录。输入命令
./mvnw package && java -jar target/hello-springboot-docker-0.1.0.jar
如果输入localhost:8090输出了“Hello Docker World”!。那么可以继续。并且这个jar已经生成了
然后输入命令./mvnw install dockerfile:build。如果出现builde success那么就成功啦!
然后用docker images看镜像是否存在。存在则
docker run -p 8090:8090 -t hellospringbootdocker/hello-springboot-docker 运行该镜像。验证下看看!!