springboot打包docker镜像部署

 

回顾上一章的整个部署过程:

  • 使用"mvn install"进行打包jar
  • jar移动到与Dockerfile文件相同的文件夹下
  • 编写Dockerfile文件
  • 使用"docker build -t="zjg/myservice1docker:v1.1" /Users/enniu1/Desktop/docker-data/file"命令进行打包
    • 需要手动指定生成的imagesnametag,以及dockerfile所在的文件夹
  •  

本章使用docker-maven-plugin实现。

一、Dockerfile位置:与上一章完全相同

  • 放在了一个单独的文件夹下src/main/docker/(这里是放在了项目的根路径下,pom.xml同级)

#FROM java:8

#ADD config-server-Brixton.SR4.jar app.jar

#VOLUME /tmp

#VOLUME /target

#RUN bash -c 'touch /app.jar'

#EXPOSE 8888

#ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 

 

#基础镜像:仓库是java,标签用8u66-jdk

FROM java:8u66-jdk

#当前镜像的维护者和联系方式

MAINTAINER duqi duqi@example.com

#将打包好的springboot程序拷贝到容器中的指定位置(如下两条命令都可执行)

#ADD netbar_service-1.0.0-SNAPSHOT.jar /opt/netbar_service.jar

COPY netbar_service-1.0.0-SNAPSHOT.jar netbar_service.jar

#容器对外暴露8889端口

EXPOSE 8889

#容器启动后需要执行的命令(如下两条命令都可执行)

#CMD java -Djava.security.egd=file:/dev/./urandom -jar /opt/netbar_service.jar

ENTRYPOINT ["java","-jar","netbar_service.jar"]

二、pom.xml

引入docker-maven-plugin插件

<!-- docker 打包 -->

           <plugin>

              <groupId>com.spotify</groupId>

              <artifactId>docker-maven-plugin</artifactId>

              <configuration>

                  <!-- 指定了镜像的名字  -->

                  <imageName>${project.name}:${project.version}</imageName>

                  <imageTags>

                     <imageTag>1.0.0</imageTag>

                  </imageTags>

                  <!-- 指定Dockerfile的位置为项目的根目录下   -->

                  <dockerDirectory>${project.basedir}</dockerDirectory>

                  <skipDockerBuild>false</skipDockerBuild>

                  <!-- 指那些需要和Dockerfile放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入。本例,只需一个 jar 文件   -->

                  <resources>

                     <resource>

                         <!-- 项目构建输出目录,默认为target -->

                         <directory>${project.build.directory}</directory>

                         <!-- 打包出来的jar名称 -->

                         <include>${project.build.finalName}.jar</include>

                     </resource>

                  </resources>

              </configuration>

 

              <!--直接在package的时候执行docker build -->

              <!--<executions> -->

              <!--<execution> -->

              <!--<phase>package</phase> -->

              <!--<goals> -->

              <!--<goal>build</goal> -->

              <!--</goals> -->

              <!--</execution> -->

              <!--</executions> -->

           </plugin>

 

还必须引入如下插件(不然,打包是没问题,但运行起来报nio的错误):

<plugin>

                                     <groupId>org.springframework.boot</groupId>

                                     <artifactId>spring-boot-maven-plugin</artifactId>

                            </plugin>

                            <!-- 用于将应用打成可直接运行的jar(该jar就是用于生产环境中的jar) 值得注意的是,如果没有引用spring-boot-starter-parent做parent,

                                     且采用了上述的第二种方式,这里也要做出相应的改动 -->

                            <plugin>

                                     <groupId>org.springframework.boot</groupId>

                                     <artifactId>spring-boot-maven-plugin</artifactId>

                                     <configuration>

                                               <!--fork : 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart -->

                                               <fork>true</fork>

                                     </configuration>

                            </plugin>

 

执行下边的命令后,

  • dockerDirectory目录下的内容(这里只有Dockerfile)拷贝到项目的/target/docker/文件夹下(这里就是/target/docker/Dockerfile
  • resource中的include下的文件(这里就是${project.build.finalName}.jar)拷贝到/target/docker/文件夹下(这里就是/target/docker/myservice1-docker-1.0-SNAPSHOT.jar
    • 经过上述两个拷贝,将jarDockerfile拷贝到同一个文件夹下了
  •  

三、运行命令

clean package -Dmaven.test.skip=true  docker:build

工程右键 Run As Maven build…

关键日志:

1 [INFO] --- maven-jar-plugin:2.5:jar (default-jar) @ myservice1-docker ---

 2 [INFO] Building jar: /Users/enniu1/Desktop/project/myservice1-docker/target/myservice1-docker-1.0-SNAPSHOT.jar

 3 [INFO]

 4 [INFO] --- spring-boot-maven-plugin:1.3.0.RELEASE:repackage (default) @ myservice1-docker ---

 5 [INFO]

 6 [INFO] --- docker-maven-plugin:0.4.13:build (default-cli) @ myservice1-docker ---

 7 [INFO] Copying /Users/enniu1/Desktop/project/myservice1-docker/target/myservice1-docker-1.0-SNAPSHOT.jar -> /Users/enniu1/Desktop/project/myservice1-docker/target/docker/myservice1-docker-1.0-SNAPSHOT.jar

 8 [INFO] Copying /Users/enniu1/Desktop/project/myservice1-docker/src/main/docker/Dockerfile -> /Users/enniu1/Desktop/project/myservice1-docker/target/docker/Dockerfile

 9 [INFO] Building image myservice1-docker:1.0-SNAPSHOT

10 Step 1 : FROM zhaojigang/jdk8:c7_j8

11  ---> e7b4cf41e531

12 Step 2 : ADD myservice1-docker-1.0-SNAPSHOT.jar /opt/jar/

13  ---> 771c895968f6

14 Removing intermediate container 12392489f5a4

15 Step 3 : ENV JAVA_HOME /opt/jdk

16  ---> Running in a81ffe207dfa

17  ---> 7aded06bc5be

18 Removing intermediate container a81ffe207dfa

19 Step 4 : ENV PATH $PATH:$JAVA_HOME/bin

20  ---> Running in b2598b5eee7c

21  ---> 5c282af98ab3

22 Removing intermediate container b2598b5eee7c

23 Step 5 : CMD java -jar /opt/jar/myservice1-docker-1.0-SNAPSHOT.jar

24  ---> Running in 51881dd70cd2

25  ---> 5e86ecc155d8

26 Removing intermediate container 51881dd70cd2

27 Successfully built 5e86ecc155d8

 

说明:

  • maven-jar-plugin进行package
  • spring-boot-maven-plugin进行repackage
  • jarDockerfile拷贝到同一个目录(target/docker/
  • 执行Dockerfile进行build

四、查看镜像

  • docker images

1 REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE

2 myservice1-docker      1.0-SNAPSHOT        5e86ecc155d8        21 seconds ago      575.8 MB

 

五、启动镜像

  • docker run -d -p 8014:8080 5e86ecc155d8

浏览器访问:localhost:8014/health

注意:

  • 多次指定build去构建的话,之前构建出来的REPOSITORYTAG都会变为<none>

1 REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE

2 myservice1-docker      1.0-SNAPSHOT        5e86ecc155d8        21 seconds ago      575.8 MB

3<none><none>              f0f5b0df8ecf        4 minutes ago       575.8 MB

 

  • 使用docker-maven-plugin构建项目,可以避免手工移动jar,并且可以很方便的自己做成archetyp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中国首席搬砖师vip

做最详细的原创

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值