springboot打包成docker镜像

springboot打包成docker镜像

dockerFile编写

普通dockerFile
FROM java:8
#此处的*为正则表达式,表示以.jar结尾的同步录下的文件(这里的jar是maven打包好的)
COPY *.jar /app.jar

CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

这种方法有缺点:

  1. 镜像中的jar包是压缩文件,在容器环境中运行需要解压,造成比较大的开销
  2. 将依赖和程序都放在一个层中,更新程序后编译新的镜像效率低。一般来说,依赖是基本不变的,只需要更新程序代码。

spring官方推荐,构建镜像时,不要直接使用压缩的jar,而应该解压后构建镜像。

解压方式打包的dockerFile的编写有版本分界线:springboot-2.3,在2.3以后的版本中,可以使用spring-boot-jarmode-layertools来帮助解压构建。

2.3之前,需要手动分层解压
  1. 将spring-boot项目打成jar包

  2. 将jar解压到target/dependency

  3. dockerFile文件

    FROM openjdk:8-jdk-alpine
    VOLUME /tmp
    ARG DEPENDENCY=target/dependency # jar包解压位置
    COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
    COPY ${DEPENDENCY}/META-INF /app/META-INF
    COPY ${DEPENDENCY}/BOOT-INF/classes /app
    ENTRYPOINT ["java","-cp","app:app/lib/*","com.example.MyApplication"]
    
2.3以后

使用spring-boot-jarmode-layertools,更加方便

# 指定基础镜像,这是分阶段构建的前期阶段
FROM openjdk:8 as builder
# 执行工作目录
WORKDIR application
# 配置参数
ARG JAR_FILE=target/*.jar
# 将编译构建得到的jar文件复制到镜像空间中
COPY ${JAR_FILE} application.jar
# 通过工具spring-boot-jarmode-layertools 从application.jar 中提取拆分后的构建结果
RUN java -Djarmode=layertools -jar application.jar extract

# 正式构建镜像
FROM openjdk:8
WORKDIR application
# 前一阶段从jar中提取除了多个文件,这里分别执行COPY命令将他们复制到镜像空间中,每次COPY都是一个layer
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java","-Duser.timezone=GMT+8","org.springframework.boot.loader.JarLauncher"]

使用dockerFile打包镜像

# '-t' 设置打包镜像tag, '-f' 设置DockerFile文件, '.'选择当前目录
docker build -t test:1.0 -f .\DockerFile . 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是一个开源的应用程序框架,它可以帮助开发者快速构建独立的、可部署的Spring应用程序。Docker 是一个开源的容器化技术,可以将应用程序和其依赖项打包为一个独立的、运行在任何环境中的镜像。 要将Spring Boot 应用程序打Docker镜像包,需要按照以下步骤进行操作: 1. 首先,我们需要在pom.xml文件中添加Docker Maven插件依赖。 ```xml <build> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.2.0</version> </plugin> </plugins> </build> ``` 2. 在Dockerfile中定义打包镜像的指令。可以在项目的根目录下创建一个名为Dockerfile的文件,并使用以下内容: ```dockerfile FROM openjdk:8-jdk-alpine COPY target/my-app.jar /app.jar CMD ["java","-jar","/app.jar"] ``` 上述Dockerfile会指定使用OpenJDK 8的JDK基础镜像,并将编译好的Spring Boot应用程序包拷贝到镜像中。然后在启动容器时执行CMD命令运行应用程序。 3. 最后,在终端中进入项目的根目录,执行如下命令来构建Docker镜像: ```bash mvn clean package docker:build ``` 这个命令会使用Docker Maven插件来打包Spring Boot应用程序,并将其构建为Docker镜像。 4. 构建功后,可以使用以下命令来运行Docker容器: ```bash docker run -p 8080:8080 -t imageName:tag ``` 其中,-p选项用于将容器的8080端口映射到主机的8080端口,imageName:tag则为构建出来的镜像的名称和标签。 以上就是将Spring Boot应用程序打Docker镜像包的步骤。通过这种方式,可以方便地将应用程序部署到任何支持Docker的环境中,简化了部署的过程,提高了应用程序的可移植性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值