当前位置:   article > 正文

spring boot 项目打包镜像方式以及区分环境打包_开发中打镜像怎么打

开发中打镜像怎么打

springboot项目打包成docker镜像

方法一:将项目jar包手动推送到docker服务器上

1.用maven对项目进行打包,打包成功后会有一个target目录,目录下有打好的项目jar包
2.将jar包上传到服务器上,我用的是finalshell工具,大家可以自己根据自己使用的工具将文件传送到服务器上
3.在跟jar包同级目录下写Dockerfile文件

dockerfile文件具体内容

  1. FROM openjdk:11 #基于哪些镜像进行构建
  2. MAINTAINER gpj #作者名称
  3. #
  4. # 将jar包添加到容器中,并命名为 springboot_docker.jar
  5. ADD demo-0.0.1-SNAPSHOT.jar /demo.jar
  6. # 运行jar包
  7. RUN bash -c 'touch demo.jar'
  8. ENTRYPOINT ["java", "-jar", "demo.jar"]
  9. # 设置时区
  10. RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
  11. # SpringBoot项目配置的端口号为9999,需要将9999暴露出去
  12. EXPOSE 9999
4.执行docker build命令

docker build -f Dockerfile -t demo:1.0 .

5.查看镜像

docker images

可以看到刚刚打包的镜像

6.运行容器

docker run -d --name dmeo -p 9999:9999 demo:1.0

查看容器是否在运行

docker ps

服务器开放9999端口

firewall-cmd --zone=public --add-port=9999/tcp --permanent

systemctl restart firewalld

调用后端方法

方法二:在idea中安装docker插件,通过插件部署

1.安装docker插件

进入项目,点击File->Settings->Plugins,docker插件是默认安装上的,可以先去Installed中查看是否已经安装

如果未安装可以点击Marketplace,在搜索框中搜索docker,点击Installed进行安装

2.打开docker远程访问

修改docker.service文件

Docker 安装成功之后,首先需要修改 Docker 配置来开启允许远程访问 Docker 的功能。

文件位置:/lib/systemd/system/docker.service

修改内容: 加入如下内容:

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

服务器开放2375端口

firewall-cmd --zone=public --add-port=2375/tcp --permanent

systemctl restart firewalld

重启docker

systemctl daemon-reload

systemctl restart docker

3.在idea的docker插件中配置docker远程访问的地址

在idea项目中点击File->settings->Build->Docker

4.在项目根目录和pom文件同级的地方写Dockerfile文件

dockerfile文件的具体内容

FROM openjdk:11

MAINTAINER jyz

#

# 将jar包添加到容器中,并命名为 springboot_docker.jar

ADD demo-0.0.1-SNAPSHOT.jar /demo.jar

# 运行jar包

RUN bash -c 'touch demo.jar'

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

# 设置时区

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

# SpringBoot项目配置的端口号为9999,需要将9999暴露出去

EXPOSE 9999

5.在启动配置那里编辑docker配置
之后点击执行

可以根据方法一中的最后两步进行验证

方法三:用maven插件进行构建

开启docker远程访问,详细步骤见方法二

将dockerfile文件放到resource文件夹下

1.在pom文件中引入docker插件

pom文件详细内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.3.12.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example</groupId>
  12. <artifactId>demo</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>demo</name>
  15. <description>demo</description>
  16. <properties>
  17. <java.version>11</java.version>
  18. <docker-ip>服务器IP</docker-ip>
  19. <docker-url>http://${docker-ip}:2375</docker-url>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-web</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-test</artifactId>
  33. <scope>test</scope>
  34. </dependency>
  35. </dependencies>
  36. <build>
  37. <finalName>${project.artifactId}-${project.version}</finalName>
  38. <plugins>
  39. <plugin>
  40. <groupId>org.springframework.boot</groupId>
  41. <artifactId>spring-boot-maven-plugin</artifactId>
  42. </plugin>
  43. <plugin>
  44. <groupId>com.spotify</groupId>
  45. <artifactId>docker-maven-plugin</artifactId>
  46. <version>1.2.2</version>
  47. <configuration>
  48. <dockerHost>${docker-url}</dockerHost>
  49. <imageName>${project.artifactId}:${project.version}</imageName>
  50. <!-- 在生成图像后将其推入的标志。默认为false -->
  51. <pushImage>true</pushImage>
  52. <imageTags>
  53. <!-- 指定镜像标签,可以排至多个标签 -->
  54. <imageTag>${project.version}</imageTag>
  55. </imageTags>
  56. <!--是否强制覆盖已有镜像-->
  57. <forceTags>true</forceTags>
  58. <!--方式一:1、指定Dockerfile文件所在目录,通过文件执行打包上传nexus私服-->
  59. <dockerDirectory>src/main/resources</dockerDirectory>
  60. <!-- 指定docker镜像打包参数,即dockerfile中使用的参数,通过${参数名}取值 -->
  61. <resources>
  62. <resource>
  63. <targetPath>/</targetPath>
  64. <!--指定需要复制的根目录,${project.build.directory}表示target目录-->
  65. <directory>${project.build.directory}</directory>
  66. <!--用于指定需要复制的文件,${project.build.finalName}.jar表示打包后的jar包文件-->
  67. <include>${project.build.finalName}.jar</include>
  68. </resource>
  69. </resources>
  70. </configuration>
  71. </plugin>
  72. </plugins>
  73. </build>
  74. </project>

2.运行mvn build命令
mvn docker:build

成功打包成镜像

可以根据方法一中的最后两步进行验证

基于第三步的配置进行镜像区分环境

以下文件需要配置到pom文件中,这里的配置每一个profile标签都是独立的,只有在打包的时候才会用到,也就是执行 mvn命令时通过 -P这个指令指定profile标签的id那么打包所用的一些参数配置会以你制定的profile为准。

  1. <profiles>
  2. <profile>
  3. <!--不同环境Profile的唯一id-->
  4. <id>dev</id>
  5. <properties>
  6. <!--profiles.active是自定义的字段(名字随便起),自定义字段可以有多个-->
  7. <profiles.active>dev</profiles.active>
  8. </properties>
  9. </profile>
  10. <profile>
  11. <id>prod</id>
  12. <!--properties标签下定义的标签是个性化的,根据业务项目需要定制不同标签,-->
  13. <properties>
  14. <profiles.active>prod</profiles.active>
  15. <docker-url>服务器IP:2375</docker-url>
  16. </properties>
  17. </profile>
  18. <profile>
  19. <id>test</id>
  20. <properties>
  21. <profiles.active>test</profiles.active>
  22. <docker-url>服务器IP:2375</docker-url>
  23. </properties>
  24. <activation>
  25. <activeByDefault>true</activeByDefault>
  26. </activation>
  27. </profile>
  28. </profiles>

此时把之前在pom中<properties>定义的docker-url删除,在执行mvn打包镜像命令时添加 -P

  1. <!--这里如果镜像统一都是由一个docker服务器打包的话,在镜像的名字中添加上test或者prod,再或者其他标识不同环境的信息即可,我这里是使用的profiles.active作区分,对应的是我上面声明的环境信息-->
  2. <imageName>${project.artifactId}-${profiles.active}:${project.version}</imageName>
mvn -Ptest docker:build

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/57885
推荐阅读
相关标签
  

闽ICP备14008679号