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

news2025/4/13 5:30:05

以下是关于 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 的标准化镜像和容器化技术极大简化了微服务的运维和扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2333569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PowerBI 条形图显示数值和百分比

数据表: 三个度量值 销售额 SUM(销量表[销售量])//注意, 因为Y轴显示的产品&#xff0c;会被筛选&#xff0c;所以用ALLSELECTED来获取当前筛选条件下&#xff0c;Y轴显示的产品 百分比 FORMAT(DIVIDE([销售额],CALCULATE([销售额],ALLSELECTED(销量表[产品编码]))),"0…

基于YOLOv8的火车轨道检测识别系统:技术实现与应用前景

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 引言&#xff1a;火车轨道检测领域概述 铁路运输作为国民经济的大动脉&#xff0c;其安全运行至关重要…

css使用mix-blend-mode的值difference实现内容和父节点反色

1. 使用场景 往往开发过程中&#xff0c;经常遇到产品说你这个背景图和文字颜色太接近了&#xff0c;能不能适配下背景图&#xff0c;让用户能够看清具体内容是啥。 这么说吧&#xff0c;这种需求场景非常合理&#xff0c;因为你做开发就是要给用户一个交代&#xff0c;给他们…

Pytest多环境切换实战:测试框架配置的最佳实践!

你是否也遇到过这种情况&#xff1a;本地测试通过&#xff0c;一到测试环境就翻车&#xff1f;环境变量错乱、接口地址混乱、数据源配置丢失……这些「环境切换」问题简直像定时炸弹&#xff0c;随时引爆你的测试流程&#xff01; 测试人员每天都跟不同的环境打交道&#xff0…

单细胞多组学及空间组学数据分析与应用

一、引言 生命科学研究正处于快速发展的阶段&#xff0c;随着技术的不断革新&#xff0c;对生物系统的理解也在逐步深入到单细胞和空间层面。单细胞多组学及空间组学技术应运而生&#xff0c;它们突破了传统研究手段在细胞异质性和空间结构解析上的局限&#xff0c;为我们打开…

[ctfshow web入门] web39

信息收集 题目发生了微妙的变化&#xff0c;只过滤flag&#xff0c;include后固定跟上了.php。且没有了echo $flag;&#xff0c;虽说本来就没什么用 if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){include($c.".php");} }else{…

HarmonyOS-ArkUI 装饰器V2 @ObservedV2与@Trace装饰器

参考文档: 文档中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V14/arkts-new-observedv2-and-trace-V14#trace%E8%A3%85%E9%A5%B0%E5%AF%B9%E8%B1%A1%E6%95%B0%E7%BB%84由于V2的装饰器比V1的装饰器更加易用,尽管学习的过程中用到的都是V1的装饰器,但…

基于ImGui+FFmpeg实现播放器

基于ImGuiFFmpeg实现播放器 演示&#xff1a; ImGui播放器 继续研究FFmpeg&#xff0c;之前做了一个SDL的播放器&#xff0c;发现SDL的可视化UI界面的功能稍微差了点&#xff0c;所以今天我们换了一个新的工具&#xff0c;也就是ImGui。 ImGui官方文档&#xff1a;https://g…

python的web框架flask(hello,world版)

问题 最近需要基于一个开源项目进行二次开发&#xff0c;但是&#xff0c;现在的我主修java&#xff0c;从来没有接触过python的web开发。所以&#xff0c;我现在需要学习一下flask的hello&#xff0c;world。 python版本选择 通过这个Python版本状态页面Status of Python v…

Java面试39-Zookeeper中的Watch机制的原理

Zookeeper是一个分布式协调组件&#xff0c;为分布式架构下的多个应用组件提供了顺序访问控制能力。它的数据存储采用了类似于文件系统的树形结构&#xff0c;以节点的方式来管理存储在Zookeeper上的数据。 Zookeeper提供了一个Watch机制&#xff0c;可以让客户端感知到Zooke…

同时打开多个Microchip MPLAB X IDE

0.引用 Microchip 32位MCU CAN驱动图文教程-附源码 - 哔哩哔哩 https://bbs.21ic.com/icview-3391426-1-1.html https://bbs.21ic.com/icview-3393632-1-1.html 1.前言 工作中接触到使用Microchip 的 MPLAB X IDE 开发工具&#xff0c;使用的MCU是Microchip SAMD21J18A MCU…

达梦数据库使用druid提示:dbType not support : dm

简单处理&#xff1a; 移除wall即可 &#xff08;但是用druid那都希望能用上它的功能的&#xff0c;不然为什么不用其他没带检查的jdbc呢。&#xff09; 中等复杂处理&#xff1a; druid 是阿里开源的项目&#xff0c;所以去github上找对应版本的源码下载&#xff1a;https:/…

[定位器]晶艺LA1823,4.5V~100V, 3.5A,替换MP9487,MP9486A,启烨科技

Features  4.5V to 100V Wide Input Range  3.5A Typical Peak Current Limit  Integrated 500mΩ low resistance high side power MOS.  Constant On Time Control with Constant Switching Frequency.  180μA Low Quiescent Current  150kHz/240kHz/420kHz Swi…

难度偏低,25西电人工智能学院821、833、834考研录取情况

1、人工智能学院各个方向 2、人工智能学院近三年复试分数线对比 学长、学姐分析 由表可看出&#xff1a; 1、智能院25年院线相对于24年院线 全部专业下降比较多&#xff0c;其中控制科学与工程下降20分&#xff0c;计算机科学与技术下降20分&#xff0c;计算机技术[专硕]下降…

使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第七讲)

这一期来讲解与文本框配套使用的键盘&#xff0c;以及键盘如何在项目中开启。 打开GUI_guider软件平台&#xff0c;在左上角点开工程选项&#xff0c;在该栏目的最下方点击系统设置。 随后在系统设置界面中点击项目选项&#xff0c;选择显示键盘。 在该界面中可以设置键盘文字…

通过AWS EKS 生成并部署容器化应用

今天给大家分享一个实战例子&#xff0c;如何在EKS上创建容器化应用并通过ALB来发布。先介绍一下几个基本概念&#xff1a; IAM, OpenID Connect (OIDC) 2014 年&#xff0c;AWS Identity and Access Management 增加了使用 OpenID Connect (OIDC) 的联合身份支持。此功能允许…

nginx入门,部署静态资源,反向代理,负载均衡使用

Nginx在linux上部署静态资源 概念介绍 Nginx可以作为静态web服务器来部署静态资源。这里所说的静态资源是指在服务端真实存在&#xff0c;并且能够直接展示的一些文件&#xff0c;比如常见的html页面、css文件、js文件、图片、视频等资源。 相对于Tomcat&#xff0c;Nginx处理…

智膳优选 | AI赋能的智慧食堂管理专家 —— 基于飞书多维表格和扣子(Coze)的智能解决方案

智膳优选 | AI赋能的智慧食堂管理专家 基于飞书多维表格和扣子&#xff08;Coze&#xff09;的智能解决方案 数据驱动餐饮管理&#xff0c;让每一餐都是营养与经济的完美平衡&#xff01; “智膳优选”通过整合飞书与Coze&#xff0c;将数据智能引入校园餐饮管理&#xff0…

最新的es版本忘记密码,重置密码

刚刚安装了最新的es版本,就忘了密码,怎么重置密码呢? 一、进入es的斌目录 #进入es文件/bin 目录 ./elasticsearch-reset-password -u elastic 二 、输入对应的密码 然后再次访问 我的是去掉了ssl的访问 三、如果报错:解决 [main] WARN

Compose Multiplatform+Kotlin Multiplatfrom 第五弹跨平台 截图

截图功能 Compose MultiplatformKotlin Multiplatfrom下实现桌面端的截图功能&#xff0c;起码搞了两星期&#xff0c;最后终于做出来了&#xff0c;操作都很流畅&#xff0c;截取的文件大小也正常&#xff0c;可参考支持讨论&#xff01; 功能效果 代码实现 //在jvmMain下创…