Java 入门指南:使用 Docker 创建容器化 Spring Boot 应用程序
文章目录
- 步骤 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 容器化旅程有所帮助,让您更轻松地管理和部署应用程序。
后记 👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹
相关文章:

Java 入门指南:使用 Docker 创建容器化 Spring Boot 应用程序
文章目录 步骤 1: 准备工作步骤 2: 克隆 Spring Boot 应用程序步骤 3: 创建 Dockerfile步骤 4: 构建 Docker 映像步骤 5: 运行容器步骤 6: 链接到本地数据库步骤 7: 使用 Docker Compose 运行多个容器步骤 8: 设置 CI/CD 管道结论 🎈个人主页:程序员 小侯…...

Leetcode 542. 01 矩阵
542. 01 矩阵-中等 问题描述 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入:mat [[0,0,0],[0,1,0],[0…...

分享一下微信小程序抽奖链接怎么做
标题:微信小程序抽奖链接制作全攻略,轻松玩转营销抽奖活动 一、引言 在当今的数字化时代,抽奖活动已经成为一种高效的市场营销策略,而微信小程序作为一个功能强大的移动端平台,为企业和个人提供了制作抽奖链接的便捷…...

MathType2024破解版激活序列号
MathType序列号是一款针对该软件而制作的激活工具,大家都知道这款软件在官方是需要花钱购买的,不然得话就只能试用。有很多功能都无法正常使用!而本序列号却可以完美的解决这一难题,因为它可以破解并激活“MathType”,…...

简述对 Spring MVC 的理解
SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型的轻量级 Web 框架。 Spring MVC组件 MVC 架构模式的思想,通过把 Model,View,Controller 分离,将 Web 层进行职责解耦࿰…...

Redis——哨兵模式与Zookeeper选举的异同点
摘要 当我们使用主从复制出现的问题:手动故障转移:写能力和存储能力受限:主从复制 -master 宕机故障处理。 主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干…...

基于 Center 的 3D 目标检测和跟踪
论文地址:https://arxiv.org/abs/2006.11275 论文代码:https://github.com/tianweiy/CenterPoint 3D 目标通常表示为点云中的 3D Boxes。 CenterPoint 在第一阶段,使用关键点检测器检测对象的中心,然后回归到其他属性࿰…...

华锐技术何志东:证券核心交易系统分布式改造将迎来规模化落地阶段
近年来,数字化转型成为证券业发展的下一战略高地,根据 2021 年证券业协会专项调查结果显示,71% 的券商将数字化转型列为公司战略任务。 在落地数字化转型战略过程中,证券业核心交易系统面临着不少挑战。构建新一代分布式核心交易…...
数据结构 -- ArrayList与LinkedList的区别
一、二者的相同点 1,它们都是继承自List接口。 二、二者的区别 1,数据结构:ArrayList是(Array动态数组)的数据结构;而LinkedList是(Link双向链表)的数据结构。ArrayList 自由性较…...
豪车托运为什么选小板
小板运输是一种适用于豪车客户的高效运输方式。它提供了快速、安全、便捷的服务,并且相对经济实惠。以下是关于小板运输的时效和价格的介绍: 时效:小板运输通常能够在短时间内完成车辆的运输。具体时效取决于起点和目的地之间的距离ÿ…...
【base64加密】js/ts的基础加密
base64的字符串简单加密,主用于网页缓存数据的加密。 适用于常规html、小游戏(egret、cocos、laya)等 原文参考:JS基于base64编码加密解密文本和图片(修订)_js base64加密-CSDN博客 测试:JS实…...

基于python的app程式开发
安装的库文件: 运行代码: # -*- coding:utf-8 -*- from kivy.app import App class HelloApp(App):pass if __name__ __main__:HelloApp().run() 结果画面:...
Spring Event学习
Spring Event学习 观察者模式是一种行为设计模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个模式中,改变状态的对象被称为主题,依赖的对象被称为观…...

UE4 HLSL学习笔记
在Custom配置对应ush文件路径 在HLSL中写入对应代码 Custom里面增加两个Input,名字必须和ush文件内的未知变量名字一样 然后就对应输出对应效果的颜色 这就是简单的加法运算 减法同理: 乘法除法同理 HLSL取最小值 HLSL取最大值 绝对值: 取余…...

报文的路由过程
路由转发过程 记住路由转发过程结论:报文ip是不变,mac改变。 mac地址在同一个广播域传输过程中是不变的;在跨越广播域的时候会发生改变的;而IP地址在传输过程中是不会改变的(除NAT的时候)。 ip地址本质上是…...

【CPP】类和对象
1- Classes and Objects Structures A struct in C is a type consisting of a sequence of data membersSome functions/Statements are needed to operate the data members of an object of a struct type 不不小心操作错误,不小心越界 Classes You should b…...

【多线程面试题二十】、 如何实现互斥锁(mutex)?
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:如何实现互斥锁…...

hypercube背景设置为白色,绘制高光谱3D立方体
import scipy pip install wxpython PyOpenGL和Spectral需要本地安装 可参考链接https://blog.csdn.net/qq_43204333/article/details/119837870 参考:https://blog.csdn.net/Tiandailan/article/details/132719745?spm1001.2014.3001.5506Mouse Functions:left-cl…...

Visual Studio(VS)C++项目 管理第三方依赖库和目录设置
发现很多程序员存在这种做法:把项目依赖的第三方库的lib和dll放在项目目录下,或者复制到输出目录,因为每种配置都有不同的输出目录,所以要复制多份(至少包括Debug和Release两个输出目录),这些做…...

leetCode 2578. 最小和分割 + 排序 + 贪心 + 奇偶分组(构造最优解)
2578. 最小和分割 - 力扣(LeetCode) 给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足: num1 和 num2 直接连起来,得到 num 各数位的一个排列。 换句话说,num1 和 num2 中所…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...