docker和springboot的组合案例

Owen Jia 2019年03月25日 861次浏览

重点是docker和springboot组合使用。

maven-plugins

maven-plugins

dockerfile

Dockerfile文件需要放在项目的根目录,和pom.xml在同一个目录中。

  1. FROM openjdk:8

  2. MAINTAINER "Owen Jia"

  3. LABEL email="xxxx@outlook.com"

  4. ARG JAR_FILE

  5. ENV ENVS="qa"

  6. VOLUME /tmp

  7. COPY ${JAR_FILE} /data/app.jar

  8. RUN echo 'docker image is building'

  9. WORKDIR /data/

  10. EXPOSE 8080

  11. ENTRYPOINT ["java", "-jar", "-Xmx350MB -Xms150MB", "./app.jar", "-Denv=$ENVS"]

maven pom

dockerfile-maven-plugin是docker-maven-plugin的改进版,老版本的Dockerfile文件不是必须有的。推荐集成前者到项目中使用,最新版已经到“1.4.10”。

  1. <plugin>
  2. <groupId>com.spotify</groupId>
  3. <artifactId>dockerfile-maven-plugin</artifactId>
  4. <version>1.4.8</version>
  5. <executions>
  6. <execution>
  7. <id>default</id>
  8. <goals>
  9. <goal>build</goal>
  10. </goals>
  11. </execution>
  12. </executions>
  13. <configuration>
  14. <repository>sample/${project.artifactId}</repository>
  15. <tag>${project.version}</tag>
  16. <buildArgs>
  17. <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
  18. </buildArgs>
  19. <buildDirectory>${project.basedir}/target</buildDirectory>
  20. </configuration>
  21. </plugin>

maven build

docker build通过命令行方式运行是本质。

docker build --build-arg JAR_FILE="target/sample-1.0.0.jar -t sample/cnlink .

集成到项目中,通过maven插件方式运行

mvn dockerfile:build or mvn package 会在target目录下生成 sample-1.0.0-SANPSHOT-docker-info.jar,同时在docker本地镜像库中会生成对于的image,可以用docker image ls查看。

Gradle中docker plugin使用

上面描述都是在maven基础上build image案例,我还写了个demo是基于gradle的,已经放在github上可以关注下载直接使用,项目如下地址:

案例:gradle-test

部分代码

  1. buildscript {
  2. ext{
  3. springBootVersion = '2.0.6.RELEASE'
  4. }
  5. repositories {
  6. jcenter()
  7. mavenCentral()
  8. }
  9. dependencies {
  10. classpath('org.springframework.boot:spring-boot-gradle-plugin:2.0.6.RELEASE')
  11. classpath("se.transmode.gradle:gradle-docker:1.2")
  12. }
  13. }
  14. // .....
  15. //自定义task构建image
  16. task dockerBuilder(type: Docker) {
  17. push = false
  18. baseImage 'openjdk:8'
  19. maintainer 'Owen Jia'
  20. applicationName = jar.baseName
  21. tagVersion = jar.version
  22. volume('/tmp')
  23. addFile("${jar.baseName}-${jar.version}.jar", "/data/app.jar")
  24. workingDir('/data/')
  25. entryPoint(["java", "-Denv=qa", "-jar", './app.jar'])
  26. exposePort(8080)
  27. doFirst {
  28. copy {
  29. from jar
  30. into stageDir
  31. }
  32. }
  33. }

dockerBuild-info

dockerBuild-info

image-ls

image-ls

友情链接

maven插件地址:dockerfile-maven-plugin

作者博客网站:Owen Blog