Java Web开发高级——Spring Boot与Docker容器化部署

随着云计算和微服务架构的快速发展,容器化已成为现代应用部署的重要手段。Docker作为最受欢迎的容器化技术之一,使得开发者能够将应用及其所有依赖打包到一个可移植的容器中,简化了开发、测试、部署和运维的流程。本篇文章将通过以下内容讲解如何使用Docker将Spring Boot应用容器化,并深入介绍Docker Compose在多容器应用中的使用。


1. Docker基础与容器化概念
1.1 Docker简介

Docker是一个开源平台,旨在通过将应用及其依赖打包到一个标准化的容器中来简化应用的开发、交付和运行。容器是一种轻量级、可移植、封装的执行环境,能够在开发、测试、生产等不同环境中保持一致性。

  • 容器:类似于虚拟机,但不需要完整的操作系统,资源开销更小。
  • 镜像:容器的运行实例是从镜像创建的,镜像包含应用及其所有依赖和配置。
  • Docker引擎:Docker的核心组件,负责容器的构建、运行和管理。
1.2 容器化与传统虚拟化的区别
  • 虚拟化:每个虚拟机都运行一个完整的操作系统,这增加了资源开销。虚拟化适用于需要隔离的多个操作系统实例。
  • 容器化:容器共享宿主操作系统的内核,只隔离应用和其依赖,因此相较虚拟化更加高效、轻量。
1.3 Docker容器的优势
  • 轻量级:容器启动速度快,占用资源少。
  • 高可移植性:通过Docker镜像,应用可在任何支持Docker的环境中运行。
  • 一致性:Docker可以确保在不同环境中运行的应用一致,解决了“在我机器上能跑”的问题。
1.4 Docker基本概念
  1. Dockerfile:描述如何构建一个Docker镜像的文件,包含了操作系统、应用依赖、配置等信息。
  2. 镜像(Image):一个只读的模板,用于创建容器。每次启动容器时,都会基于镜像创建一个新的实例。
  3. 容器(Container):容器是镜像的运行实例。它包括应用、运行时、系统工具和库等,完全独立于宿主机运行。
  4. Docker Hub:一个公共的Docker镜像仓库,用户可以在其中下载和上传镜像。

2. 使用Docker容器化Spring Boot应用
2.1 准备Spring Boot应用

在容器化Spring Boot应用之前,确保你有一个可运行的Spring Boot应用。如果还没有,可以创建一个简单的Spring Boot应用。例如,一个简单的Hello World应用:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @RestController
    public class HelloController {
        @GetMapping("/")
        public String hello() {
            return "Hello, Docker!";
        }
    }
}
2.2 创建Dockerfile

Dockerfile是Docker镜像的构建文件,定义了从构建Spring Boot应用镜像到如何运行容器的步骤。首先,确保在项目根目录下创建一个Dockerfile文件。

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

# 将构建好的Spring Boot jar包复制到容器中
COPY target/myapp.jar /app/myapp.jar

# 设置容器启动时执行的命令
ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]

# 容器默认暴露8080端口
EXPOSE 8080

这个Dockerfile的作用:

  1. 从官方的OpenJDK基础镜像中构建一个新的镜像。
  2. 将本地构建好的Spring Boot应用(myapp.jar)复制到容器中的/app目录。
  3. 设置容器启动时执行java -jar命令来启动应用。
  4. 将8080端口暴露出来,以便与外部进行通信。
2.3 构建Docker镜像

使用Dockerfile构建Spring Boot应用的镜像,进入Spring Boot应用的项目目录,执行以下命令:

# 通过Dockerfile构建镜像
docker build -t myapp .
  • -t myapp:为构建的镜像指定一个标签(这里是myapp)。
  • .:指定Dockerfile所在的目录(当前目录)。

构建完成后,使用以下命令查看已构建的镜像:

docker images
2.4 运行Docker容器

构建好镜像后,可以通过以下命令运行容器:

docker run -p 8080:8080 myapp
  • -p 8080:8080:将宿主机的8080端口映射到容器的8080端口。

此时,访问http://localhost:8080,你应该能看到Spring Boot应用输出的Hello, Docker!

2.5 Docker容器管理

Docker提供了一些常用命令来管理容器:

  • 查看正在运行的容器
    docker ps
  • 查看所有容器(包括停止的)
    docker ps -a
  • 停止容器
    docker stop <container_id>
  • 删除容器
    docker rm <container_id>

3. Docker Compose与多容器应用部署
3.1 Docker Compose简介

Docker Compose是一个工具,用于定义和运行多容器Docker应用。通过一个YAML文件,用户可以配置应用所需的所有服务,然后使用一个命令就能启动多个容器。它非常适用于微服务架构的部署,尤其是在应用涉及多个服务(如Web应用、数据库、缓存等)时。

3.2 安装Docker Compose

如果没有安装Docker Compose,可以通过以下命令安装:

# 使用curl命令安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 给docker-compose添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
3.3 使用Docker Compose部署Spring Boot应用

假设你的Spring Boot应用与数据库(如MySQL)共同运行,你可以通过Docker Compose来管理它们。

首先,创建一个docker-compose.yml文件:

version: '3'

services:
  app:
    image: myapp
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydb
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: password

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"

在上述docker-compose.yml中:

  • app服务:构建并运行Spring Boot应用,暴露8080端口,并且依赖于数据库服务db
  • db服务:运行MySQL数据库,暴露3306端口。
3.4 启动多容器应用

在同一目录下执行以下命令启动所有容器:

docker-compose up --build
  • --build:如果有更改Dockerfile或代码时,强制重新构建镜像。

使用docker-compose ps命令可以查看容器的运行状态。若要停止并清理容器,使用以下命令:

docker-compose down

总结

通过Docker容器化Spring Boot应用,可以有效简化部署流程并提高应用的可移植性。Docker Compose为多容器应用的管理提供了便捷的方式,尤其适用于微服务架构的场景。在本文中,我们详细介绍了如何使用Docker容器化Spring Boot应用,并通过Docker Compose部署多容器应用。通过这些实践,开发者可以轻松实现应用的容器化,并在不同环境中保持一致的运行效果。

关于作者:

15年互联网开发、带过10-20人的团队,多次帮助公司从0到1完成项目开发,在TX等大厂都工作过。当下为退役状态,写此篇文章属个人爱好。本人开发期间收集了很多开发课程等资料,需要可联系我

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSM宠物医院信息管理系统

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 宠…

【esp32小程序】小程序篇02——连接git

一、创建仓库 进入gitee官网&#xff0c;登录&#xff08;如果没有gitee账号的就自行注册一下&#xff09;。 点击号-->新建仓库 填写好必填信息&#xff0c;然后点击“创建” 二、微信开发者工具配置 在微信开发者工具打开我们的项目。按下面的步骤依次点击 三、验证 点…

回归人文主义,探寻情感本质:从文艺复兴到AI时代,我的情感探索之旅

回归人文主义&#xff0c;探寻情感本质&#xff1a;从文艺复兴到AI时代&#xff0c;我们的情感探索之旅 多年来&#xff0c;我们的团队一直关注人工智能&#xff0c;尤其是AI在音乐领域的应用研究。随着技术的不断演进&#xff0c;我们也不断反思&#xff1a;在“算法、代码、…

【2025 ODA teigha系列开发教程一】实现WPF ViewDirectX DWGDXF 模式图纸的预览查看,缩放

&#x1f3a8; CAD图纸查看器 下载Teigha SDK 21.6 FOR C# &#x1f4d6; 项目介绍 嗨&#xff01;欢迎来到CAD图纸查看器项目&#xff01;这是一个基于WPF和Teigha SDK开发的专业CAD文件查看工具。无论你是工程师、设计师&#xff0c;还是其他需要查看CAD图纸的专业人士&a…

【LeetCode100】--- 寻找重复数

题目传送门 方法一&#xff1a;暴力解法&#xff08;超时&#xff09; 算法原理 双重循环&#xff0c;每次固定一个数&#xff0c;再遍历别的数。比较这两个数是否相等&#xff0c; 若相等则返回这个数。就是重复数。 复杂度分析 时间复杂度&#xff1a;O&#xff08;N方&…

doris 2.1 Queries Acceleration-Hints 学习笔记

1 Hint Classification 1.1 Leading Hint:Specifies the join order according to the order provided in the leading hint. 1.2 Ordered Hint:A specific type of leading hint that specifies the join order as the original text sequence. 1.3 Distribute Hint:Speci…

【2024博客之星】我的年度技术总结:Netty渡劫指南--从线程暴走到百万长连接,这一年我踩过的坑比写的代码还多

时间过得真快&#xff0c;作为一名十年的技术老鸟&#xff0c;这一年来跟Netty打交道打得不少。今天就聊聊这一年来我跟Netty的那些事儿&#xff0c;还有我在学习它技术原理时的一些总结。 导读 Netty再相见&#xff1a;捡起来、用起来Netty原理学习&#xff1a;边啃边写变总结…

Tomcat下载配置

目录 Win下载安装 Mac下载安装配置 Win 下载 直接从官网下载https://tomcat.apache.org/download-10.cgi 在圈住的位置点击下载自己想要的版本 根据自己电脑下载64位或32位zip版本 安装 Tomcat是绿色版,直接解压到自己想放的位置即可 Mac 下载 官网 https://tomcat.ap…

【CSDN博客之星2024】主题创作《总结2024,为了遇见更好的2025》

【博客之星2024】主题创作《总结2024&#xff0c;为了更好的2025》 一、AI技术变革日新月异二、总结我的CSDN2024三、技术深耕&#xff0c;从实践中汲取力量3.1、在数据库技术方面3.2、在javavue前后端开发领域3.3、在项目运维领域3.4、在GIS开发方面 四、2025工作计划五、2025…

MySQL 事务及MVCC机制详解

目录 什么是事务 事务的隔离级别 数据库并发的三种场景 读-写 什么是事务 事务就是一组DML语句组成&#xff0c;这些语句在逻辑上存在相关性&#xff0c;这一组DML语句要么全部成功&#xff0c;要么全部失败&#xff0c;是一个整体。MySQL提供一种机制&#xff0c;保证我们…

数据库存储上下标符号,sqlserver 2008r2,dm8

sqlserver 2008r2&#xff1a; 数据类型需要用nvarchar插入数据时字符串前需要用N create table test( col1 varchar(50), col2 nvarchar(50) ) insert into test(col1,col2) values(U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀,U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀) insert into…

Java高频面试之SE-15

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本牛马baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; String 怎么转成 Integer 的&#xff1f;它的原理是&#xff1f; 在 Java 中&#xff0c;要将 String 转换为 Integer 类型&#xff0c;可…

nacos2.3.0 接入pgsql或其他数据库

首先尝试使用官方插件进行扩展&#xff0c;各种报错后放弃&#xff0c;不如自己修改源码吧。 一、官方解决方案 1、nocos 文档地址&#xff1a;Nacos 配置中心简介, Nacos 是什么 | Nacos 官网 2、官方解答&#xff1a;nacos支持postgresql数据库吗 | Nacos 官网 3、源码下载地…

城市电动出行的智慧升级:充电桩可视化管理

通过图扑可视化管理平台&#xff0c;实时监控与优化城市充电桩网络&#xff0c;提高运维效率与用户满意度&#xff0c;支撑绿色交通体系发展&#xff0c;为电动出行打造更加智能化的基础设施解决方案。

关于 Cursor 的一些学习记录

文章目录 1. 写在最前面2. Prompt Design2.1 Priompt v0.1&#xff1a;提示设计库的首次尝试2.2 注意事项 3. 了解 Cursor 的 AI 功能3.1 问题3.2 答案 4. cursor 免费功能体验5. 写在最后面6. 参考资料 1. 写在最前面 本文整理了一些学习 Cursor 过程中读到的或者发现的感兴趣…

idea中远程调试中配置的参数说明

Ⅰ 远程调试中配置的端口号与服务本身端口号区别 一、远程调试中配置端口号的作用 在 IDEA 中进行远程调试时配置的端口号主要用于建立开发工具&#xff08;如 IDEA&#xff09;和远程服务之间的调试连接。当你启动远程调试时&#xff0c;IDEA 会监听这个配置的端口号&#xf…

基于 MDL 行情插件的中金所 L1 数据处理最佳实践

本文介绍了如何通过 DolphinDB 的 MDL 插件订阅并处理中金所 Level 1 实时数据。首先&#xff0c;文章简要介绍了 MDL 插件的功能和作用。它是基于 MDL 官方提供的行情数据服务 C SDK&#xff08;即 TCP 版本 MDL &#xff09;实现&#xff0c;提供了实时数据获取和处理的能力。…

JupyterLab 安装以及部分相关配置

安装 JupyterLab pip install jupyter启动 JupyterLab jupyter lab [--port <指定的端口号>] [--no-browser] # --port 指定端口 # --no-browser 启动时不打开浏览器安装中文 首先安装中文包 pip install jupyterlab-language-pack-zh-CN安装完成后重启 JupyterLab 选…

LabVIEW电源纹波补偿

在电子设备的电源管理中&#xff0c;电源纹波的存在可能会对设备的稳定性和性能产生负面影响。以某精密电子仪器的电源纹波补偿为例&#xff0c;详细阐述如何运用 LabVIEW 编写程序进行电源纹波补偿。将从电源纹波特点、测量采样、滤波、反馈控制等多个方面展开介绍。 ​ 电源…

嵌入式硬件篇---基本组合逻辑电路

文章目录 前言基本逻辑门电路1.与门&#xff08;AND Gate&#xff09;2.或门&#xff08;OR Gate&#xff09;3.非门&#xff08;NOT Gate&#xff09;4.与非门&#xff08;NAND Gate&#xff09;5.或非门&#xff08;NOR Gate&#xff09;6.异或门&#xff08;XOR Gate&#x…