Docker部署SpringBoot项目(镜像部署)

目录

一、在pom.xml 文件中加入依赖

1.依赖内容

2.依赖说明和解释

3.使用流程

4.示例

5.注意

二、执行打包

1.使用命令打包

2.使用IDEA提供快捷方式

三、将jar包上传到服务器

 四、创建相关配置

 1.创建一个Dockerfile文件

 2.添加配置

3.举例 

五、生成Docker镜像

1.命令模版

 2.举例

(1)命令

(2)解释说明 

1. docker build

2. -t gateway:1.1

3. .

命令的工作流程:

 (3)注意点

3.运行效果

六、生成Docker容器

1.命令模版

2. 举例

(1)命令

(2). 解释说明

1. docker run

2. --name gateway

3. -p 8201:8201

4. -d

5. gateway:1.1

总结

后台运行:容器将在后台运行,不会占用当前的终端。

命令解析:

3. 运行结果


 


一、在pom.xml 文件中加入依赖

1.依赖内容

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version> <!-- Spring Boot 版本 -->
            <configuration>
                <mainClass>com.macro.mall.MallGatewayApplication</mainClass> <!-- 主类(启动类) -->
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal> <!-- 执行 repackage 目标 -->
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这个Maven 配置是用来配置 Spring Boot 项目的打包插件 spring-boot-maven-plugin,它会帮助你构建一个可执行的 JAR 文件(Spring Boot 可运行 JAR 文件),以及在 Maven 构建过程中执行重新打包的任务。

2.依赖说明和解释

  • <groupId>: 该插件的 Maven 组 ID。spring-boot-maven-plugin 是 Spring Boot 提供的插件,用于构建和打包 Spring Boot 应用程序。
  • <artifactId>: 插件的工件 ID,在这个案例中是 spring-boot-maven-plugin
  • <version>: 插件的版本。通常,这个版本应该和你使用的 Spring Boot 版本一致,这样可以确保兼容性。${spring-boot.version} 是一个变量,表示 Spring Boot 的版本号。你可以在 <properties> 部分定义该版本,如:
<properties>
    <spring-boot.version>2.7.0</spring-boot.version> <!-- 设置 Spring Boot 版本 -->
</properties>
  • <mainClass>: 指定你的 Spring Boot 应用程序的主类(即包含 main 方法的类)。在这个例子中是 com.macro.mall.MallGatewayApplication,你应该根据你的项目结构修改为正确的主类。
  • <executions>: 在构建过程中执行的目标任务。在这个例子中,repackage 目标会被执行,这意味着该插件将重新打包应用并生成可执行的 JAR 文件。
  • <goal>repackage</goal>: 这个目标会将你的项目重新打包成一个可执行的 JAR 文件,所有的依赖和资源都将被打包到该 JAR 中,以便你可以通过 java -jar 命令运行应用。

3.使用流程

  1. mvn clean install: 执行 Maven 构建命令,Maven 会通过 spring-boot-maven-plugin 插件自动将项目打包成一个可执行的 JAR 文件。
  2. java -jar target/<your-jar-file>.jar: 你可以通过执行生成的 JAR 文件来启动 Spring Boot 应用。

4.示例

假设你将 Spring Boot 版本设置为 2.7.0,并且主类是 com.macro.mall.MallGatewayApplication,那么在 <properties> 部分你可能会这样设置版本:

<properties>
    <spring-boot.version>2.7.0</spring-boot.version>
</properties>

项目主类(启动类) MallGatewayApplication 应该如下所示:

package com.macro.mall;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MallGatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(MallGatewayApplication.class, args);
    }
}

5.注意

  1. 确保 <mainClass> 标签中指定的主类路径是正确的,并且该类包含 public static void main(String[] args) 方法。
  2. 在构建前,确保你已经配置了正确的 Spring Boot 版本,避免版本不兼容的问题。
  3. repackage 目标的默认行为是将项目打包成一个 Spring Boot 可执行 JAR,你可以根据需要定制其他行为。

二、执行打包

1.使用命令打包

运行 mvn clean package 命令,Spring Boot 会自动使用 spring-boot-maven-plugin 重新打包项目,并将所有依赖和配置打包进一个单独的 JAR 文件。

2.使用IDEA提供快捷方式

IDEA中有提供的快捷方式,直接点击就行

 打包结果:

三、将jar包上传到服务器

我这使用的是FinalShell直接进入到指定目录拖拽上传即可(其他工具我电脑上没有,这里就不一一展示了)

 四、创建相关配置

 1.创建一个Dockerfile文件

在jar包的同一目录创建一个Dockerfile文件

vim Dockerfile

 2.添加配置

# 使用 OpenJDK 17 作为基础镜像,该镜像包含 JDK 17 环境
# 该镜像适用于需要编译或运行基于 JDK 17 的 Java 应用程序

FROM openjdk:17

# 设置容器中的工作目录为 /app
# 所有后续操作(如文件复制、命令执行等)都会基于该目录进行

WORKDIR /app

# 将本地的 JAR 文件 复制到容器的 /app 目录下
# COPY 命令将指定路径的文件从构建上下文复制到镜像中的目标路径

COPY jar包名称 /app/jar包名称

# 设置环境变量 JAR_FILE,指向 JAR 文件的名称
# 环境变量可以在容器运行时被应用程序或其他脚本访问
# 这里设置环境变量方便在 Dockerfile 中或运行时引用 JAR 文件

ENV JAR_FILE=jar包名称

# 暴露容器的 8201端口,使得主机能够与容器的指定端口进行通信
# 通常用于 Web 服务或应用程序监听端口
# 可以根据应用需要更改为其他端口号

EXPOSE 8201

# 定义容器启动时的默认命令,使用 ENTRYPOINT 设置为 java -jar 来启动应用
# 这行命令会在容器启动时运行 Java 应用,加载指定的 JAR 文件
# 如果没有其他命令传入,ENTRYPOINT 将执行默认的 java -jar jar包名称

ENTRYPOINT ["java", "-jar", "/app/jar包名称"]

3.举例 

这里拿我刚刚打包的项目举例

五、生成Docker镜像

1.命令模版

docker build -t 镜像名称:标签 .

 2.举例

 这里依旧拿我打包的gateway举例

(1)命令

docker build -t gateway:1.1 .

(2)解释说明 

1. docker build

docker build 是 Docker 的命令,用于根据 Dockerfile 文件和上下文构建镜像。Dockerfile 是描述如何构建镜像的脚本文件,包含了安装软件、设置环境、复制文件等步骤。

2. -t gateway:1.1

-t 选项用于给构建的镜像指定名称和标签。gateway:1.1 表示:

  • gateway 是镜像的名称(可以是你选择的任何名字)。
  • 1.1 是镜像的标签(也可以是任何有效的标签)。标签通常用于标识不同版本的镜像。常见的标签有 latest(表示最新版本)或其他版本号如 1.02.0 等。

因此,-t gateway:1.1 表示你构建的镜像将命名为 gateway,并标记为 1.1 版本。

3. .

. 代表当前目录,作为 Docker 构建的上下文(build context)。构建过程中,Docker 将从当前目录获取所有的文件(如果有 .dockerignore 文件,则会排除其中指定的文件)并传递给 Docker 引擎,供 Dockerfile 使用。

通常,Dockerfile 和构建过程中需要的文件会在同一目录下。如果你运行 docker build -t gateway:1.1 .,Docker 会从当前目录(包含 Dockerfile)读取相关的文件来构建镜像。

命令的工作流程:
  1. Docker 在当前目录查找 Dockerfile
  2. Docker 根据 Dockerfile 中的指令构建镜像(例如复制文件、安装依赖、设置环境变量等)。
  3. 构建完成后,Docker 将创建一个名为 gateway:1.1 的镜像,保存到本地的 Docker 镜像库中。

 (3)注意点

 在命令中 这个点不要忘了  “  .  ” 

3.运行效果

六、生成Docker容器

1.命令模版

用生成的Docker镜像生成Docker容器并运行

docker run --name 容器名称 -p 宿主机端口:容器端口 -d 镜像名称:镜像标签

2. 举例

 这里依旧拿我打包的gateway举例

(1)命令

docker run --name gateway -p 8201:8201 -d gateway:1.1

(2). 解释说明

1. docker run
  • 这是 Docker 中最常用的命令,用于运行一个新的容器。
  • docker run 会拉取指定镜像(如果本地没有的话),然后创建并启动一个容器。

2. --name gateway
  • --name 选项用于给启动的容器指定一个名称。
  • 在这个例子中,容器将被命名为 gateway
  • 使用容器名称可以方便你后续操作,比如查看日志、停止容器或删除容器等。例如,使用 docker stop gateway 来停止名为 gateway 的容器。

注意: 容器名称应该是唯一的,不能与其他正在运行的容器名称重复。如果你尝试给容器起一个已经存在的名称,Docker 会报错。

3. -p 8201:8201
  • -p 选项用于设置端口映射,将容器内部的端口映射到宿主机的端口,使你能够从外部访问容器提供的服务。
  • 8201:8201 表示将宿主机的 8201 端口映射到容器内的 8201 端口。
    • 容器内的服务监听在端口 8201
    • 你可以通过宿主机的 8201 端口来访问容器中的服务。

例子: 如果容器运行的是一个 Web 应用,并且该应用在容器内部的端口 8201 上监听,那么宿主机的 http://localhost:8201 就能访问到容器内的应用。

端口映射原理:

  • 容器内的服务可能仅能通过容器内的 IP 访问,但通过 -p 参数,将容器内部的端口暴露到宿主机后,外部网络请求就可以通过宿主机的指定端口访问到容器服务。

4. -d
  • -d 代表 detached mode(后台模式)。
  • 如果不加 -d,容器会在前台运行,并且你会看到容器的日志输出。如果加上 -d,容器会在后台运行,当前终端会被释放出来,可以继续执行其他命令。
  • 在后台运行时,Docker 会显示容器的唯一 ID,而不会显示容器的标准输出(日志)。

后台模式的优势: 当你希望容器在后台持续运行,不占用当前终端时,使用 -d 非常有用。

5. gateway:1.1
  • gateway:1.1 指定了要启动的 镜像名称 和 版本标签
    • gateway 是镜像的名称。
    • 1.1 是镜像的版本标签。Docker 默认使用 latest 标签,如果没有显式指定版本标签,Docker 会拉取 latest 标签的镜像。这里使用了 1.1 版本的镜像,表示启动的是该版本的镜像。

镜像和标签: gateway 是镜像名称,1.1 是版本标签。通过版本标签可以确保你运行的镜像是特定版本,而不是其他版本。

总结

这条命令的作用是:

  1. 创建并启动容器:基于 gateway:1.1 镜像,创建并启动一个名为 gateway 的新容器。
  2. 端口映射:将宿主机的 8201 端口映射到容器的 8201 端口,从而使容器内的服务能通过宿主机的端口进行访问。
  3. 后台运行:容器将在后台运行,不会占用当前的终端。

命令解析:

docker run --name gateway -p 8201:8201 -d gateway:1.1

  • --name gateway:容器名称为 gateway
  • -p 8201:8201:宿主机的 8201 端口映射到容器的 8201 端口。
  • -d:容器以后台模式运行。
  • gateway:1.1:使用 gateway 镜像的 1.1 版本启动容器。

这样,通过这个命令,你将能够在后台运行一个名为 gateway 的容器,并且通过宿主机的端口 8201 访问容器内部的服务。

3. 运行结果

ip+端口访问

如果不是出现拒接连接就成功了

我这里gateway网关所以访问找不到路径就出现404找不到路径的问题(属于正常现象) 

 出现一下页面就是错误的证明容器中项目报错,启动失败

又或者服务器ip端口没有放开

Spring Boot应用部署Docker容器并通过Jenkins持续集成服务器进行自动化构建是一个常见的DevOps实践。以下是简单的步骤: 1. **创建Dockerfile**: - Dockerfile是一个文本文件,包含了构建镜像所需的指令。首先,你需要添加基础镜像,如`spring:latest`,然后复制你的Spring Boot应用程序,设置环境变量,安装依赖,运行应用等。 ```Dockerfile FROM maven:3.8-jdk-11-slim AS build WORKDIR /app COPY . . RUN mvn clean package -DskipTests COPY target/${project.artifactId}-${project.version}.jar app.jar FROM openjdk:11-jre-slim VOLUME /tmp WORKDIR /app COPY --from=build /app/app.jar app.jar EXPOSE 8080 CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"] ``` 2. **构建Docker镜像**: - 使用`docker build -t my-spring-boot-app .`命令构建基于Dockerfile的镜像。 3. **推送到仓库**: - 如果你想在私有或公共仓库存储镜像,可以使用`docker push <your_username>/my-spring-boot-app:latest`命令推送。 4. **配置Jenkins**: - 在Jenkins中创建一个新的自由风格项目,选择Git作为源码管理工具,然后配置构建触发器、构建步骤,包括从仓库拉取代码、构建Docker镜像(使用插件如Docker Pipeline)以及将镜像推送到指定仓库。 5. **构建流程**: - Jenkins会自动检测代码变更并触发构建,执行mvn打包,然后构建Docker镜像,并将其推送到目标位置。 6. **部署应用**: - 构建完成后,你可以选择通过Jenkins Job DSL或者其他操作来自动部署到生产环境,比如Kubernetes集群。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值