springboot 项目生成docker镜像

本文介绍如何使用SpringBoot创建应用并部署到Docker容器中。主要内容包括:设置Maven配置来构建可执行JAR包,编写Dockerfile来定义容器环境,并通过Maven插件构建Docker镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dockerfile 介绍

Dockerfile 是用于定义 Docker 镜像构建过程的文本文件。它包含了一系列指令,这些指令按照顺序执行以创建一个自定义的 Docker 镜像。

常用指令

指令说明示例
FROM指定基础镜像,所有 Dockerfile 必须以 FROM 开头。FROM ubuntu:20.04
LABEL设置镜像元数据标签,替代已废弃的 MAINTAINER 指令。LABEL maintainer="John Doe <john.doe@example.com>"
RUN执行命令并创建新的层,常用来安装软件包。RUN apt-get update && apt-get install -y curl vim && rm -rf /var/lib/apt/lists/*
COPY将文件从主机复制到镜像中,仅做简单复制操作。COPY ./app /usr/src/app/
ADD类似于 COPY,但还支持远程 URL 和自动解压 tar 文件。ADD http://example.com/file.tar.gz /usr/src/file.tar.gz
WORKDIR设置工作目录,即后续命令的工作路径。WORKDIR /usr/src/app
ENV设置环境变量,可以在后续指令中引用。ENV APP_HOME=/usr/src/app NODE_ENV=production
EXPOSE声明容器运行时打算使用的网络端口。EXPOSE 8080
CMD定义容器启动时要执行的命令,默认参数可以被命令行覆盖。CMD ["node", "server.js"]
ENTRYPOINT更固定的命令定义,通常与 CMD 结合使用来传递参数。ENTRYPOINT ["java", "-jar"]
VOLUME创建挂载点,允许外部卷映射到容器内部位置。VOLUME ["/var/log"]
USER切换用户身份,默认情况下是以 root 用户执行命令。USER appuser
ARG定义构建时变量,可以在构建过程中通过 --build-arg 参数传入值。ARG BUILD_DATE
LABEL build-date=$BUILD_DATE
HEALTHCHECK配置健康检查命令,确保容器正常运行。`HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/

具体实现

创建springboot项目

在这里插入图片描述

修改项目pom.xml文件

在这里插入图片描述
在这里插入图片描述

	<properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <docker.image.prefix>demo-docker</docker.image.prefix>
        <!--跳过单元测试-->
        <skipTests>true</skipTests>
    </properties>
	<build>
        <finalName>docker-cloud-demo</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--需要加这个,不然打包镜像找不到启动文件-->
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.10</version>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

在src同级创建 Dockerfile 文件

在这里插入图片描述

Dockerfile文件配置

FROM  adoptopenjdk/openjdk8:jre8u-nightly
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

创建一个测试controller

在这里插入图片描述

启动项目访问返回

在这里插入图片描述

执行项目编译

mvn clean package dockerfile:build

注意: 执行项目生成镜像,默认连接的是本机docker服务的2375端口,如果本机未开通端口需要开通才能正常打包成镜像,如需要远程打包,需要添加环境变量DOCKER_HOST,并指向远程服务的2375端口.

DOCKER_HOST  tcp://192.168.2.104:2375

在这里插入图片描述

编译完成

在这里插入图片描述

项目打包的镜像

在这里插入图片描述

启动镜像测试功能

在这里插入图片描述
在这里插入图片描述

访问数据

在这里插入图片描述

### 创建 Spring Boot 应用程序的 Docker 镜像 为了使 Spring Boot 应用程序能够更便捷地部署并提升其可移植性和可扩展性,可以通过 Docker 容器化技术来实现这一目标。以下是为 Spring Boot 应用程序构建 Docker 镜像的具体方法。 #### 使用 Maven 插件进行分层构建 通过 `spring-boot-maven-plugin` 插件支持的分层构建功能,可以有效减少最终生成Docker 镜像大小,从而加快传输速度和启动时间。这种方式相较于传统的仅使用 Dockerfile 的做法更加高效[^2]。 ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <name>${docker.image.prefix}/${project.artifactId}:${project.version}</name> <publish>true</publish> </image> </configuration> </plugin> </plugins> </build> ``` 此配置允许开发者利用 Maven 生命周期中的特定阶段自动完成镜像的构建工作,并且可以根据实际需求调整镜像名称和其他属性设置。 #### 编写 Dockerfile 文件 对于那些希望手动控制整个流程或者不具备上述插件条件的情况,则需编写一个简单的 Dockerfile 来描述如何组装所需的环境以及运行应用程序: ```Dockerfile FROM openjdk:8-jdk-alpine VOLUME /tmp EXPOSE 8080 ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 这段脚本指定了基础镜像、挂载卷路径、暴露端口等基本信息;并通过复制编译好的 jar 包至容器内部指定位置,最后设置了启动命令以便于容器初始化完成后立即执行业务逻辑[^5]。 #### 利用 docker-compose 工具简化操作 如果项目结构较为复杂或存在多个微服务组件相互协作的需求时,还可以借助 `docker-compose.yml` 文件进一步简化多容器应用集群管理任务。该文件定义了一系列服务之间的关系及其各自的资源配置情况,使得一键式搭建测试环境成为可能[^4]。 ```yaml version: '3' services: springboot-app: build: . ports: - "8080:8080" environment: SPRING_PROFILES_ACTIVE: dev ``` 以上就是关于如何为 Spring Boot 应用程序创建 Docker 镜像的相关介绍和技术细节说明。值得注意的是,在实践过程中还需要考虑诸如安全加固措施等方面的内容以确保生产环境下稳定可靠的服务提供能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Yweir

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值