首页 > 分享 > springboot打包docker镜像部署

springboot打包docker镜像部署

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

使用"mvn install"进行打包jar将jar移动到与Dockerfile文件相同的文件夹下编写Dockerfile文件使用"docker build -t="zjg/myservice1docker:v1.1" /Users/enniu1/Desktop/docker-data/file"命令进行打包需要手动指定生成的images的name和tag,以及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进行packagespring-boot-maven-plugin进行repackage将jar和Dockerfile拷贝到同一个目录(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去构建的话,之前构建出来的REPOSITORY和TAG都会变为<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

相关知识

Docker[容器管理引擎]
Docker 0x01:Docker Container容器技术
容器化部署从入门到精通Docker技术详解
Dify 公司内网部署教程及踩坑记录
Docker容器技术入门(一)
深入理解容器化技术:Docker的应用与实践
Docker化JumpServer:从零到一的容器化堡垒机部署实战
花壳协议与Docker容器的兼容性
保姆级教程!Linux 内网环境离线安装 Docker(含 docker
2分钟速览Docker:快速理解容器技术

原文链接: springboot打包docker镜像部署 https://m.huajiangbk.com/newsview2606754.html

分类:花卉
上一篇: 花卉容器选择与布置.pptx下一篇: 国家电网准备花68亿买机器人,这...