Java 入门指南:使用 Docker 创建容器化 Spring Boot 应用程序

Alt

文章目录

    • 步骤 1: 准备工作
    • 步骤 2: 克隆 Spring Boot 应用程序
    • 步骤 3: 创建 Dockerfile
    • 步骤 4: 构建 Docker 映像
    • 步骤 5: 运行容器
    • 步骤 6: 链接到本地数据库
    • 步骤 7: 使用 Docker Compose 运行多个容器
    • 步骤 8: 设置 CI/CD 管道
    • 结论

🎈个人主页:程序员 小侯
🎐CSDN新晋作者
🎉欢迎 👍点赞✍评论⭐收藏
✨收录专栏:大数据系列
✨文章内容:Docker 创建 Spring Boot 应用程序
🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗

Docker 已经成为现代应用程序开发和部署的不可或缺的一部分。它使开发人员能够在不同环境中轻松部署应用程序,确保一致性和可重复性。本入门指南将教您如何使用 Docker 容器化一个简单的 Spring Boot 应用程序。您将学习如何使用 Maven 克隆和运行 Spring Boot 应用程序,创建一个包含构建 Java 映像所需指令的新 Dockerfile,将生成的映像作为容器运行,设置本地开发环境以连接到容器中的数据库,并使用 Docker Compose 运行 Spring Boot 应用程序。最后,我们还将使用 GitHub Actions 配置 CI/CD 管道以自动化构建和部署您的应用程序。

步骤 1: 准备工作

在开始之前,确保您已经安装了以下工具:

  • Docker:您需要在本地系统上安装 Docker。您可以从 Docker 官方网站 下载适合您操作系统的版本。

  • Maven:如果您尚未安装 Maven,可以在 Maven 官方网站 上找到安装说明。

  • Java 开发工具:您需要一个 Java 集成开发环境(IDE),如 Eclipse、IntelliJ IDEA 或 Visual Studio Code。

步骤 2: 克隆 Spring Boot 应用程序

首先,我们需要获取一个 Spring Boot 应用程序的源代码,以便后续容器化操作。您可以使用 Git 克隆一个示例项目,也可以使用您自己的 Spring Boot 项目。

# 使用 Git 克隆示例 Spring Boot 项目
git clone https://github.com/spring-projects/spring-petclinic.git
cd spring-petclinic

在这里插入图片描述

步骤 3: 创建 Dockerfile

接下来,我们需要创建一个 Dockerfile,其中包含了构建 Java 映像所需的指令。在 Spring Boot 项目的根目录下创建一个名为 Dockerfile 的文件,并将以下内容添加到其中:

# 使用官方的 OpenJDK 11 基础映像
FROM openjdk:11-jre-slim# 在容器中创建一个目录来存放应用程序文件
RUN mkdir /app# 复制应用程序 JAR 文件到容器中的 /app 目录
COPY target/*.jar /app/app.jar# 指定容器启动时要执行的命令
CMD ["java", "-jar", "/app/app.jar"]

这个 Dockerfile 基于官方的 OpenJDK 11 基础映像,将 Spring Boot 应用程序的 JAR 文件复制到容器中,并定义了容器启动时要执行的命令。
在这里插入图片描述

步骤 4: 构建 Docker 映像

现在,我们可以使用 Docker 命令构建我们的 Docker 映像。在 Spring Boot 项目的根目录中执行以下命令:

docker build -t spring-boot-app .

这将使用我们的 Dockerfile 构建一个名为 spring-boot-app 的 Docker 映像。确保在命令后面有一个 .,表示使用当前目录中的 Dockerfile。
在这里插入图片描述

步骤 5: 运行容器

一旦 Docker 映像构建完成,我们可以使用 Docker 运行容器。在命令行中执行以下命令:

docker run -p 8080:8080 spring-boot-app

这将在容器内运行我们的 Spring Boot 应用程序,并将容器的端口 8080 映射到主机的端口 8080。您可以通过浏览器访问 http://localhost:8080 来查看应用程序是否正常运行。

步骤 6: 链接到本地数据库

通常情况下,应用程序需要与数据库进行交互。

在容器化环境中,您可以链接到本地数据库或使用容器化的数据库。

如果您希望链接到本地数据库,请确保您的 Spring Boot 应用程序的配置文件中已经正确配置了数据库连接信息。容器内的应用程序可以访问主机上的本地数据库,因为它们共享相同的网络。

步骤 7: 使用 Docker Compose 运行多个容器

在实际应用中,通常需要多个容器来支持不同的服务和组件。Docker Compose 是一个用于定义和运行多个 Docker 容器的工具。

您可以创建一个名为 docker-compose.yml 的 Docker Compose 配置文件,其中定义了应用程序的各个服务、网络和卷。以下是一个示例 docker-compose.yml 文件:

version: '3'
services:app:build: .ports:- "8080:8080"database:image: mysql:latestenvironment:MYSQL_ROOT_PASSWORD: passwordMYSQL_DATABASE: mydb

这个示例使用 Docker Compose 同时运行我们的 Spring Boot 应用程序和一个 MySQL 数据库容器。
在这里插入图片描述

步骤 8: 设置 CI/CD 管道

最后,为了自动化构建和部署您的应用程序,您可以使用 CI/CD 管道。GitHub Actions 是一个流行的 CI/CD 工具,可以与 Docker 结合使用,以实现持续集成和持续交付。

通过在项目的 GitHub 存储库中配置 GitHub Actions,您可以设置自动构建 Docker 映像、运行测试、部署应用程序到生产环境等任务。
在这里插入图片描述

结论

Docker 提供了一种强大的方式来容器化应用程序,使其在不同环境中运行一致性和可重复性。本指南介绍了如何将一个简单的 Spring Boot 应用程序容器化,以及如何使用 Docker Compose 运行多个容器来支持应用程序的不同服务。此外,GitHub Actions 的集成使自动化构建和部署变得更加容易。希望这个指南对您的 Docker 容器化旅程有所帮助,让您更轻松地管理和部署应用程序。

后记 👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring更加简单的读取和存储对象

前言:在上篇文章中,小编写了一个Spring的创建和使用的相关博客:Spring的创建和使用-CSDN博客,但是,操作/思路比较麻烦,那么本文主要带领大家走进:Spring更加简单的读取和存储对象! 本…

水果FL Studio21.2体验版下载安装教程(增加云服务功能)

FL Cloud 音效库包含开放版权的Loop和采样,以及来自 FL Studio 著名用户的艺术家独家内容。更新后,现在还可以使用人工智能辅助母带处理和数字发行功能来制作音轨。FL Studio 由最初的 "Fruity Loops" DAW 发展而来,25 年来&#x…

让GPT替我写vue3代码,看的我血压升高

事情是这样子的,最近在写Vue3相关的代码,就想着能不能让GPT辅助我写代码,于是,我就先写了一个中文的prompt Prompt1: 使用vue3写一个用户登录的页面 分割线内部是GPT的回答: 使用 Vue 3 来创建一个用户登录页面需要涉…

反射率检测仪如何检测后视镜

后视镜反射率检测是评估后视镜质量的重要步骤,可以反映后视镜的反射效果是否满足设计要求。一般来说,后视镜的反射率越高,驾驶员观察车后的道路状况就越清晰,从而能够更好地判断与后方车辆的距离和速度差。 后视镜反射率检测的原理…

Agent 应用于提示工程

如果Agent模仿了人类在现实世界中的操作方式,那么,能否应用于提示工程即Prompt Engingeering 呢? 从LLM到Prompt Engineering 大型语言模型(LLM)是一种基于Transformer的模型,已经在一个巨大的语料库或文本数据集上进行了训练&…

单元测试到底测什么,怎么测?我来告诉你

前言: 以国内互联网的开发节奏,在前端业务项目中全面覆盖单元测试有时显得不太可行,主要是因为以下这些绊脚石: UI 交互复杂,路径难以覆盖全面 工期紧,开发对实践 TDD,BDD 所带来的长远效益没有…

基于机器视觉的银行卡识别系统 - opencv python 计算机竞赛

1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的银行卡识别算法设计 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng…

【UE】属性同步,源码详解一个勾选了Actor复制的Actor第一次被创建时经历了什么

本文参考https://zhuanlan.zhihu.com/p/640723352 准备工作 先准备一个勾选了复制的Actor,然后在游戏开始时Spawn这个Actor 源码过程详解 发送属性同步 在NetDriver的TickFlush中发送属性同步的数据 1、ServerReplicateActors_BuildConsiderList 去找到所有需…

c++ pcl 选取点云某一点反馈XYZ坐标的代码

看了看以前的代码,有一小段代码很有意思,是关于pcl点云处理的。 如有帮助,点赞收藏关注!!! 读取点云数据,想可视化点云数据,并根据选择,实时显示点云的空间坐标数值。 接…

线扫相机DALSA--采集卡Base模式设置

采集卡默认加载“1 X Full Camera Link”固件,Base模式首先要将固件更新为“2 X Base Camera Link”。 右键SCI图标,选择“打开文件所在的位置”,找到并打开SciDalsaConfig的Demo,如上图所示: 左键单击“获取相机”&a…

mysql之语句

1、mysql的扩展语句 (1)创建表 if not exists yyy:这个表不存在才会创建 zerofill:自动补齐位置 primary key:当前表的主键,主键只能有一个,唯一且不能为空 auto_increment:表示…

AI:43-基于深度学习的昆虫图像识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…