当前位置: 首页 > news >正文

关于 Spring Boot 部署到 Docker 容器的详细说明,涵盖核心概念、配置步骤及关键命令,并附上表格总结

以下是关于 Spring Boot 部署到 Docker 容器的详细说明,涵盖核心概念、配置步骤及关键命令,并附上表格总结:


1. Docker 核心概念

概念描述关系
镜像(Image)预定义的只读模板,包含运行环境和配置(如操作系统、依赖库、应用文件)。类似于类,是静态定义,用于创建容器。
容器(Container)镜像的运行实例,可启动、停止、删除。类似于对象,是动态的实例化实体。
仓库(Repository)存储镜像的中心(如 Docker Hub),支持版本管理和共享。镜像的存储和分发中心,便于协作和部署。

2. 环境准备(Ubuntu 18.04)

2.1 安装 Docker
# 更新系统
sudo apt-get update

# 安装依赖工具
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加 Docker 源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 重新更新并安装 Docker CE
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 验证安装
sudo docker run hello-world
2.2 配置项目目录
# 创建目录并进入
mkdir -p /data/deploy && cd /data/deploy

# 将项目 JAR 文件复制到目录(假设已通过 Maven 打包)
cp /path/to/graalvm-test-0.0.1-SNAPSHOT.jar ./graalvm-test.jar

3. Dockerfile 配置

# 使用官方 JDK 17 镜像作为基础镜像
FROM openjdk:17

# 在容器中创建临时目录并挂载为卷(可选)
VOLUME /tmp

# 将当前目录的 JAR 文件复制到容器根目录
COPY graalvm-test.jar /app/graalvm.jar

# 指定容器启动时执行的命令(运行 JAR 文件并设置端口)
ENTRYPOINT ["java", "-jar", "/app/graalvm.jar", "--server.port=9000"]

4. 构建和运行容器

4.1 构建 Docker 镜像
# 在项目目录下执行(确保 Dockerfile 在当前目录)
docker build -t graalvm-test .

# 查看镜像列表
docker images
4.2 运行容器
# 映射宿主机 8090 端口到容器 9000 端口,并后台运行
docker run -d \
  -p 8090:9000 \
  --name graalvm-container \
  graalvm-test

# 查看运行中的容器
docker ps

5. 验证访问

  • 访问 URL
    http://<宿主机IP>:8090/test
    (例如:http://192.168.80.138:8090/test
  • 预期输出
    若配置正确,返回应用响应(如 "Hello GraalVM!")。

6. 关键命令总结

命令描述
docker build -t <镜像名> .根据 Dockerfile 构建镜像
docker images列出本地所有镜像
docker run -d -p <宿主机端口>:<容器端口> <镜像名>以后台模式运行容器并映射端口
docker ps查看正在运行的容器
docker stop <容器ID>停止指定容器
docker rm <容器ID>删除指定容器

7. 配置文件与参数说明

7.1 Dockerfile 指令
指令作用示例
FROM指定基础镜像(如 openjdk:17FROM openjdk:17
VOLUME创建可持久化存储的卷(如 /tmpVOLUME /tmp
COPY将文件从本地复制到容器指定路径COPY graalvm-test.jar /app/graalvm.jar
ENTRYPOINT容器启动时执行的命令(固定命令)ENTRYPOINT ["java", "-jar", "/app/graalvm.jar"]
7.2 docker run 参数
参数描述
-d后台运行容器(守护模式)
-p映射宿主机端口到容器端口(格式:宿主机端口:容器端口
--name指定容器名称
-v挂载宿主机目录到容器(如 -v /data:/app/data

8. 常见问题与解决方案

问题解决方法
容器启动失败,端口冲突检查宿主机端口是否被占用,修改 -p 参数中的宿主机端口。
镜像构建失败,缺少依赖确保 Dockerfile 中的基础镜像包含必要依赖(如 openjdk:17 包含 Java 环境)。
无法访问应用,返回 503 错误检查容器日志:docker logs <容器ID>,确认应用端口是否正确暴露。

9. 总结表格

步骤操作命令示例
安装 Docker安装并验证 Dockersudo apt-get install docker-ce && docker run hello-world
构建镜像根据 Dockerfile 生成镜像docker build -t graalvm-test .
运行容器启动容器并映射端口docker run -d -p 8090:9000 --name graalvm-container graalvm-test
访问应用通过宿主机 IP 和映射端口访问curl http://<宿主机IP>:8090/test

10. 注意事项

  1. 端口映射

    • 宿主机端口(如 8090)需与容器暴露的端口(如 9000)一致。
  2. 权限问题

    • 若需持久化数据,使用 -v 参数挂载目录(如 -v /data:/app/data)。
  3. 优化建议

    • 使用多阶段构建减少镜像体积:
      # 第一阶段:编译应用
      FROM maven:3.8.4 AS builder
      COPY src /app/src
      COPY pom.xml /app
      WORKDIR /app
      RUN mvn clean package
      
      # 第二阶段:运行环境
      FROM openjdk:17
      COPY --from=builder /app/target/graalvm-test.jar /app/
      ENTRYPOINT ["java", "-jar", "/app/graalvm-test.jar"]
      
  4. 日志调试

    • 查看容器日志:docker logs -f <容器ID>
    • 进入容器终端:docker exec -it <容器ID> /bin/bash

通过以上步骤,开发者可以快速将 Spring Boot 应用容器化,实现轻量级部署、快速启动和跨环境一致性。Docker 的标准化镜像和容器化技术极大简化了微服务的运维和扩展。

相关文章:

  • Python-控制语句
  • 热管理设计与 PCBA 长期可靠性的深度关联
  • 让DeepSeek API支持联网搜索
  • Lock 与 Synchronized:Java 并发控制的深度对比与实践
  • 什么是继承?js中有哪儿些继承?
  • 基于RISC-V内核的嵌入式系统在机器人关节控制中的应用研究
  • 1. CEF 下载及wrapper编译
  • 第四篇:Python文件操作与异常处理
  • PromptUp 网站介绍:AI助力,轻松创作
  • daz dForce 模拟后布料的变化不大,如何增强模拟的效果
  • 2025.04.12【生物信息学新工具】| SPADE:高效聚类与降维分析的利器
  • dify报错 Expecting value: line 1 column 1 (char 0)
  • 计算轴承|滚动轴承故障频率
  • 消失的它:揭开 CoreData 托管对象神秘的消失之谜(上)
  • 26考研——数据的表示和运算_运算方法和运算电路_定点数的加减运算 定点数的乘除运算(2)
  • 什么是原型、原型链?
  • Linux网络编程——数据链路层详解,以太网、MAC地址、MTU、ARP、DNS、NAT、代理服务器......
  • 屏幕模块解析
  • 数据分析-数据预处理
  • 【KWDB 创作者计划】第二卷:开发者实战篇
  • 昆山普立斯特做的有网站/软件推广的渠道是哪里找的
  • 上传网站需要什么软件/电商网站上信息资源的特点包括
  • wordpress webfont.js/seo 服务
  • 免费网站建站申请/班级优化大师学生版
  • html可以做动态网站吗/哈尔滨最新消息
  • 网站做打鱼游戏挣钱吗/seo网络推广机构