使用 Spring Boot 构建 Docker 镜像并进行多模式部署

简介: 使用 Spring Boot 构建 Docker 镜像并进行多模式部署

在使用 Spring Boot 构建 Docker 镜像并进行多模式部署(如开发、测试、生产环境)时,通常会涉及到不同的配置文件、环境变量设置以及 Dockerfile 的编写。下面我将详细解释如何实现这些功能。

 

### 1. 使用不同的配置文件

 

Spring Boot 允许通过配置文件来管理不同环境的配置,如 `application.properties`、`application.yml` 等。通常,我们会创建以下几种环境的配置文件:

 

- `application.properties`(或 `application.yml`):通用配置,适用于所有环境。

- `application-dev.properties`(或 `application-dev.yml`):开发环境配置。

- `application-test.properties`(或 `application-test.yml`):测试环境配置。

- `application-prod.properties`(或 `application-prod.yml`):生产环境配置。

 

这些配置文件可以根据需要配置不同的数据库连接、端口号、日志级别等信息。

 

### 2. 使用不同的配置文件激活环境

 

在 Spring Boot 中,可以通过 `spring.profiles.active` 属性来指定当前激活的配置文件。例如,可以通过命令行参数或环境变量来设置:

```bash
java -jar -Dspring.profiles.active=dev your-application.jar
```

### 3. 编写 Dockerfile

 

下面是一个基本的 Spring Boot 应用的 Dockerfile 示例:

```dockerfile

# 使用官方的 OpenJDK 11 作为基础镜像

FROM openjdk:11-jdk-slim

# 将本地的 JAR 文件添加到容器中

COPY target/your-application.jar your-application.jar

# 暴露容器端口

EXPOSE 8080

# 启动 Spring Boot 应用

ENTRYPOINT ["java", "-jar", "/your-application.jar"]
```

### 4. 多模式 Dockerfile 配置

 

为了支持多模式部署,可以使用 Docker 的多阶段构建(multi-stage build)来分别构建不同环境的镜像。例如,可以创建一个专门用于生产环境的 Dockerfile 和一个用于开发环境的 Dockerfile。

 

#### 生产环境 Dockerfile 示例

 

```dockerfile

# 阶段1:构建阶段

FROM maven:3.8.4-openjdk-11-slim AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
 
COPY src ./src
RUN mvn package -DskipTests

# 阶段2:运行阶段

FROM openjdk:11-jre-slim
COPY --from=build /app/target/your-application.jar your-application.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/your-application.jar"]
```

#### 开发环境 Dockerfile 示例

```dockerfile
FROM openjdk:11-jdk-slim
WORKDIR /app
COPY . .
RUN ./mvnw package -DskipTests
EXPOSE 8080
CMD ["java", "-jar", "target/your-application.jar"]
```

### 5. 使用 Docker 构建和运行镜像

 

在构建和运行 Docker 镜像时,需要根据需要选择合适的 Dockerfile,并传递适当的构建参数或环境变量来激活相应的 Spring Boot 配置文件。

 

#### 构建镜像示例

 

```bash

# 构建生产环境镜像

docker build -t your-application:prod -f Dockerfile.prod .

# 构建开发环境镜像

docker build -t your-application:dev -f Dockerfile.dev .
```

#### 运行镜像示例

```bash

# 运行生产环境镜像

docker run -d -p 8080:8080 --name your-app-prod your-application:prod

# 运行开发环境镜像

docker run -d -p 8080:8080 --name your-app-dev your-application:dev
```
目录
相关文章
|
11月前
|
人工智能 前端开发 Docker
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
在 AI 智能体开发中,开发者常面临本地调试与云端部署的矛盾。本文介绍如何通过 Docker Compose 与 Docker Offload 解决这一难题,实现从本地快速迭代到云端高效扩容的全流程。内容涵盖多服务协同、容器化配置、GPU 支持及实战案例,助你构建高效、一致的 AI 智能体开发环境。
1002 2
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
|
11月前
|
JavaScript Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
594 100
|
11月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
604 99
|
11月前
|
安全 Go Docker
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
|
11月前
|
Java Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
422 8
|
10月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
973 6
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
697 16
|
Ubuntu 网络安全 PHP
如何使用vscode的Docker插件管理ubuntu 拉取服务器的镜像以及创建容器
本测试镜像旨在记录使用vscode的Docker插件拉取病创建Dockerfile,以及拉取镜像。
|
关系型数据库 MySQL Docker
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
820 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结

热门文章

最新文章