目录
一、在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.使用流程
mvn clean install
: 执行 Maven 构建命令,Maven 会通过spring-boot-maven-plugin
插件自动将项目打包成一个可执行的 JAR 文件。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.注意
- 确保
<mainClass>
标签中指定的主类路径是正确的,并且该类包含public static void main(String[] args)
方法。 - 在构建前,确保你已经配置了正确的 Spring Boot 版本,避免版本不兼容的问题。
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.0
、2.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
)读取相关的文件来构建镜像。命令的工作流程:
- Docker 在当前目录查找
Dockerfile
。- Docker 根据
Dockerfile
中的指令构建镜像(例如复制文件、安装依赖、设置环境变量等)。- 构建完成后,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
是版本标签。通过版本标签可以确保你运行的镜像是特定版本,而不是其他版本。总结
这条命令的作用是:
- 创建并启动容器:基于
gateway:1.1
镜像,创建并启动一个名为gateway
的新容器。- 端口映射:将宿主机的
8201
端口映射到容器的8201
端口,从而使容器内的服务能通过宿主机的端口进行访问。后台运行:容器将在后台运行,不会占用当前的终端。
命令解析:
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端口没有放开