找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1186

积分

0

好友

210

主题
发表于 3 天前 | 查看: 5| 回复: 0

掌握 Docker 与 Docker Compose 的配置方法,是将应用容器化、实现快速部署的关键一步。本文将详细介绍如何为 SpringBoot 应用编写 Dockerfiledocker-compose.yaml 文件,实现从构建镜像到一键启动服务的完整流程。

一、编写 Dockerfile 文件

Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。

1.1 基础 Dockerfile 示例

以下是一个标准的用于部署 SpringBoot 应用的 Dockerfile 文件:

# 使用 OpenJDK 11 作为基础镜像
FROM openjdk:11-jre-slim

# 在镜像中创建一个目录来存放应用
RUN mkdir /app

# 将构建好的 SpringBoot Jar 包复制到镜像中
COPY target/*.jar /app/app.jar

# 声明容器运行时监听的端口(SpringBoot 应用默认 8080)
EXPOSE 8080

# 指定容器启动时运行的命令
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

1.2 各指令详解

  • FROM:指定基础镜像。对于 Java 应用,通常选择官方的 openjdk 镜像,-jre-slim 版本体积更小。
  • RUN:在构建镜像时执行的命令,常用于安装软件、创建目录。
  • COPY:将宿主机文件或目录复制到镜像内的指定路径。这里假设 Jar 包位于项目的 target 目录下。
  • EXPOSE:声明容器运行时监听的端口号,这只是一个元数据,实际的端口映射在运行容器时定义。
  • ENTRYPOINT:指定容器启动为可执行文件时的默认命令,即启动 Java 应用。

二、编写 docker-compose.yaml 文件

docker-compose.yaml 文件用于定义和运行多容器的 Docker 应用。它简化了通过命令管理多个容器的复杂性,特别适合定义服务间的依赖关系。

2.1 基础 docker-compose.yaml 示例

假设你的 SpringBoot 应用依赖于 MySQL 数据库,一个基础的 docker-compose.yaml 配置如下:

version: '3.8'
services:
  # 定义 MySQL 数据库服务
  mysql:
    image: mysql:8.0
    container_name: my-mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: userpassword
    volumes:
      - mysql-data:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - app-network
    restart: unless-stopped

  # 定义 SpringBoot 应用服务
  app:
    build: .  # 使用当前目录下的 Dockerfile 构建镜像
    container_name: my-springboot-app
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydb?useSSL=false&serverTimezone=UTC
      SPRING_DATASOURCE_USERNAME: user
      SPRING_DATASOURCE_PASSWORD: userpassword
    depends_on:
      - mysql
    networks:
      - app-network
    restart: unless-stopped

# 定义数据卷,用于持久化 MySQL 数据
volumes:
  mysql-data:

# 定义网络,使服务能够在隔离的网络中通信
networks:
  app-network:
    driver: bridge

2.2 核心配置项说明

  • version:指定 Compose 文件的版本。
  • services:定义所有需要运行的服务(容器)。
    • image / buildimage 指定从现有镜像运行,build 则指定上下文路径来基于 Dockerfile 构建镜像。
    • container_name:为容器指定一个自定义名称。
    • environment:设置容器内的环境变量,这对于传递数据库连接等配置至关重要。
    • ports:将主机端口映射到容器端口,格式为 "主机端口:容器端口"
    • volumes:将主机路径或命名卷挂载到容器内,用于数据持久化。
    • networks:指定服务加入的网络,同一个网络下的服务可以直接使用服务名进行通信(如 mysql://mysql:3306)。
    • depends_on:声明服务之间的依赖关系,Compose 会先启动依赖的服务。
    • restart:定义容器的重启策略,unless-stopped 表示除非手动停止,否则总是重启。

三、使用与操作流程

完成文件编写后,即可通过 Docker Compose 命令进行一键式操作。

3.1 启动所有服务

在包含 docker-compose.yaml 文件的目录下,执行以下命令:

docker-compose up -d

-d 参数表示在后台运行。

3.2 查看服务状态与日志

# 查看运行中的服务状态
docker-compose ps

# 查看指定服务(如 app)的实时日志
docker-compose logs -f app

3.3 停止并移除服务

# 停止所有服务,但保留容器和数据卷
docker-compose stop

# 停止并移除所有容器、网络(但默认保留数据卷)
docker-compose down

# 停止并移除所有容器、网络、以及在 compose 文件中定义的数据卷
docker-compose down -v

通过以上步骤,你就完成了 SpringBoot 应用从镜像构建到多服务编排的完整 云原生 部署配置。这种方式极大地简化了在开发、测试和生产环境中部署复杂应用的工作流程,是现代化应用交付的标准实践。掌握 SpringBoot 与 Docker 的整合,能够有效提升开发部署效率。




上一篇:AI编程实战:基于Transformer模型实现代码自动生成的Python方案
下一篇:基于Spring Boot和Vue的图书管理系统设计与实现
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-17 16:02 , Processed in 0.207400 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表