Docker和Kubernetes部署Spring Boot项目:如何灵活修改配置文件?

news2024/11/26 9:59:41

 

大家好,我是G探险者,今天我们来聊一下通过容器化部署的springboot项目,如何灵活的修改配置文件。

有同事问我,我们的springboot项目是容器化部署,使用的是K8S容器编排平台,部署上去后,修改项目里面的配置不太方便,还需要进入到容器内部进行修改,太麻烦了,怎么样能够 灵活修改配置呢?

我们现在的很多项目基本都是基于springboot开发然后通过容器化部署的。有的项目直接使用的是docker来部署,有的是通过K8S的容器编排平台来部署。我就从这两方面分别介绍。

1. 在Docker中修改配置

1.1 进入Docker容器内部修改

一种常见的修改Docker容器内配置的方法是直接进入Docker容器内部进行修改。我们可以使用
docker exec -it [container-id] /bin/bash
命令来登录到运行中的Docker容器,然后直接修改配置文件。这种方式操作直观、简单,适合初次使用Docker的用户。

然而,这种方法也有其局限性。

首先,对容器内部的任何修改在容器重启时都会丢失,因为容器的文件系统是隔离的。
其次,这种方法不适合在多个环境中使用,因为每次部署都需要手动进入容器进行修改。

1.2 使用Docker数据卷修改

为了解决这些问题,Docker提供了数据卷(volume)的功能。Docker数据卷可以将宿主机的文件或目录挂载到容器内,这样我们就可以直接在宿主机上对文件进行修改,而无需登录到容器内部。

假设我们的Spring Boot项目的配置文件位于宿主机的/path/to/config/目录中,我们希望在容器内部映射到/config/目录。我们可以使用以下命令来启动容器:

docker run -d -p 8080:8080 -v /path/to/config/:/config/ your-app

这样,宿主机上的/path/to/config/目录就被挂载到了容器的/config/目录。在Spring Boot应用中,我们可以将配置文件的路径设置为/config/,然后应用就会从这个路径加载配置文件。当我们需要修改配置时,只需直接在宿主机上修改/path/to/config/目录中的文件,然后重启容器即可。

使用Docker数据卷的方式,我们可以实现配置的持久化,而且更加灵活,因为我们不需要进入容器内部就可以修改配置。

1.3 Docker的数据卷(Volume)机制

Docker通过挂载Spring Boot的配置文件实际上是将宿主机上的配置文件或目录与容器内部的对应路径进行关联。这样做的原理是基于Docker的数据卷(Volume)机制。

数据卷是Docker提供的一种机制,用于在容器和宿主机之间共享数据。通过挂载数据卷,宿主机上的文件或目录可以在容器内部访问和使用,同时容器对这些文件的修改也会反映到宿主机上。

当你在Docker中运行Spring Boot应用时,可以使用-v--volume参数来指定挂载配置文件或目录的关联关系。例如,假设你的配置文件位于宿主机的/path/to/config/application.properties,你可以使用以下命令启动容器:

docker run -d -p 8080:8080 -v /path/to/config/application.properties:/app/application.properties your-app

这样,宿主机上的/path/to/config/application.properties文件就被挂载到了容器内部的/app/application.properties路径。在Spring Boot应用中,你可以通过相对路径/app/application.properties来加载该配置文件。

实际上,Docker的数据卷机制会将宿主机上的文件或目录复制到容器内部的对应路径,并建立一个实时的双向同步。这意味着当你修改宿主机上的配置文件时,容器内部的文件也会相应地更新。反之亦然,当容器内部的文件发生变化时,宿主机上的文件也会相应地更新。

通过挂载配置文件,你可以方便地在宿主机上修改配置,而无需进入容器内部。这样你就可以轻松地调整和管理Spring Boot应用的配置,而无需重新构建或重新部署容器。

总结来说,Docker通过数据卷的机制实现了宿主机和容器内部文件的共享和同步,从而实现了在Docker容器中挂载Spring Boot配置文件的功能。

2. 在Kubernetes中修改配置

在Kubernetes(K8s)中,为了实现配置文件的灵活修改,我们通常会使用ConfigMap或Secret。

2.1 使用ConfigMap

ConfigMap是Kubernetes中用于存储非机密数据的资源。例如,我们可以创建一个ConfigMap来存储应用的配置文件。当我们需要修改配置时,只需更新ConfigMap,然后重新部署应用即可。以下是一个创建ConfigMap的示例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  application.properties: |
    spring.datasource.url=jdbc:mysql://localhost:3306/db
    spring.datasource.username=user
    spring.datasource.password=pass

我们可以将这个文件保存为configmap.yaml,然后使用kubectl apply -f configmap.yaml来创建ConfigMap。在Pod模板中,我们可以引用这个ConfigMap,将其挂载到Pod中的/config目录。

2.2 使用Secret

如果配置文件中包含敏感信息,如密码或API密钥,我们应该使用Secret。Secret的使用方式与ConfigMap类似,但它会对数据进行加密。以下是一个创建Secret的示例:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  application.properties: |
    c3ByaW5nLmRhdGFzb3VyY2UudXJsPWpkYmM6bXlzcWw6Ly9sb2NhbGhvc3Q6MzMwNi9kYg==
    c3ByaW5nLmRhdGFzb3VyY2UudXNlcm5hbWU9dXNlcg==
    c3ByaW5nLmRhdGFzb3VyY2UucGFzc3dvcmQ9cGFzcw==

在这个示例中,application.properties的值是Base64编码的。你可以使用echo -n 'your-data' | base64命令来进行编码。

使用ConfigMap或Secret,我们可以在Kubernetes环境中灵活地修改配置,只需更新ConfigMap或Secret,然后重新部署应用即可。这种方式既能实现配置的持久化,也能在多个环境中灵活地修改配置。

总结

在Docker和Kubernetes中,我们都有多种方式来修改Spring Boot项目的配置。我们可以直接进入Docker容器内部进行修改,也可以使用Docker数据卷或Kubernetes的ConfigMap和Secret。直接进入容器修改配置虽然操作简单,但不适合在多个环境中使用,也无法实现配置的持久化。使用Docker数据卷、ConfigMap或Secret,我们可以实现配置的持久化,同时在多个环境中灵活地修改配置。在实际工作中,我们应根据具体情况选择最适合的方式。

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

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

相关文章

Linux服务器配置SSH免密码登录后,登录仍提示输入密码(一次真实的问题排查解决记录)

我们知道两台Linux服务器机器之间如果使用ssh命令登录或scp/rsync命令传输文件每一次都需要输入用户名相对应的密码,如果要免密码,则需要对两台Linux服务器机器之间进行SSH互信。 一.SSH介绍 1.SSH互信原理 虽然这是废话,也希望大家了解一…

Rust每日一练(Leetday0026) 最小覆盖子串、组合、子集

目录 76. 最小覆盖子串 Minimum Window Substring 🌟🌟🌟 77. 组合 Combinations 🌟🌟 78. 子集 Subsets 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Gola…

HTML table表格详解

一、表格属性 表格属性 用法 border 代表表格边框厚度 width height 表格宽高 align table tr td 设置水平方向对齐方式 默认值left center right cellspacing 单元格到单元格距离 cellpadding 单元格文字到单元格边框距离 bgcolor 表格背景颜色 table tr td 都可以…

Win11 RTX 4090显卡深度学习环境配置(Nvidia显卡驱动、CUDA11.8.0)

Win11 RTX 4090显卡深度学习环境配置(Nvidia显卡驱动、CUDA11.8.0) 1. 简介2. 安装Anaconda3. 安装Pycharm4. 安装CUDA11.8.04.1 安装4.2 测试4.3 CUDA卸载 5. PyTorch安装5.1 PyTorch安装5.2 测试5.2.1 测试torch:5.2.2 测试CUDA&#xff1a…

chatgpt赋能python:切割字符串的Python技巧及实现方法

切割字符串的Python技巧及实现方法 在Python中操作字符串是比较常见的技巧,而对于需要将字符串切割成不同的元素,Python也提供了相应的方法。 split方法 split方法是Python字符串类中最常用的方法之一,它可以根据给定的分隔符对字符串进行…

学习HCIP的day.11

目录 十一、BGP的属性 1、权重属性 2、本地优先级 3、as-path 4、起源属性 5、MED --多出口的鉴别属性 十二、BGP选路规则 十三、BGP的社团属性 十四、BGP的在MA网络中的下一跳问题 五、BGP的认证 十一、BGP的属性 BGP协议在选路时,先对比属性&#xf…

在Spring Boot项目中连接SQL Server的几种方式

在Spring Boot项目中连接SQL Server 一. 使用Microsoft官方的SQL Server JDBC驱动连接:1. 依赖配置:2. YAML配置: 二. 使用第三方的jTDS驱动连接:1. 依赖配置:2. YAML配置: 三. 使用Microsoft提供的Spring …

动态网站Servelt基础

文章目录 一、Servlet基础(一)Servlet概述1、Servlet是什么2、Servlet容器3、Servlet应用程序的体系结构 (二)Servlet的特点1、功能强大2、可移植3、性能高效4、安全性高5、可扩展 (三)Servlet接口1、Servl…

chatgpt赋能python:Python中如何实现内循环到外循环

Python中如何实现内循环到外循环 Python是一种广泛使用的编程语言,其文本解析和数据结构操作灵活,让Python编程变得非常简单。在Python编程中,内循环到外循环是常见的问题,因此本文将着重介绍这个问题。 什么是内循环和外循环 …

「SQL面试题库」 No_93 广告效果

🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试&#xff0…

MyCat Docker 搭建与测试

mycat 是mysql分库分表的中间件,由java编写,本次进行mysql、mycat 的docker搭建,理解mycat的原理与特性。 一、mysql docker 搭建 这里启动两个实例: docker run -itd --name mysql1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD123 m…

Golang每日一练(leetDay0092) 丑数 I\II Ugly Number i\ii

目录 263. 丑数 Ugly Number I 🌟 264. 丑数 Ugly Number II 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 263. 丑数 Ugl…

chatgpt赋能python:如何利用Python提高2022年的SEO效果

如何利用Python提高2022年的SEO效果 当谈到SEO时,Python已经成为了一种非常流行和有用的工具。在SEO的竞争激烈的时代,使用Python可帮助您找到各种创新方法来优化您的网站。在这篇文章中,我们将着重介绍Python的几种方法,来提高2…

高通开发系列 - 内核升级后音频驱动的开发和调试

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 背景概述msm8909平台codec框图msm8909内部控件的关系msm8909 数字codec内部处理流程驱动和dts的匹配问题msm8909 pm8909声卡部分的DTS…

chatgpt赋能python:Python怎么倒序输出列表

Python怎么倒序输出列表 介绍 Python是一种非常流行的编程语言,因为它具有简单易用和开放源代码的特点。使用Python可以进行许多操作,包括列表处理。列表是Python中常用的数据类型之一,它可以存储多个值并且可以通过下标访问。本文将介绍如…

chatgpt赋能python:Python内置函数:优化你的代码

Python内置函数:优化你的代码 在Python中,内置函数是非常重要的节省时间和简化代码的方法。Python内置了许多函数,可以在任何地方使用。无论从哪个角度看,这些函数都是编程中不可或缺的工具。在本篇文章中,我们将介绍…

chatgpt赋能python:Python如何切换中文

Python 如何切换中文 Python 是一种广泛使用的编程语言,被用于多种目的,包括数据分析、机器学习、Web 应用程序等。在使用 Python 进行开发时,需要处理不同的语言,其中中文也是包括在内的。对于需要切换中文的情况,本…

【考点】CKA 05_为 Kubernetes 运行 etcd 集群 etcd 备份与恢复

etcd 备份与恢复 1. 先决条件2. 内置快照2.1 安装 etcd2.2 获取 ENDPOINT 所提供的键空间的快照到文件 snapshotdb 注意!!!在 harbor 仓库中准备好升级需要的镜像控制平面节点:升级 kubeadm控制平面节点:验证升级计划控…

《设计模式》之解释器模式

文章目录 1、定义2、动机3、类结构4、优缺点5、总结6、代码实现(C) 1、定义 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。 2、动机 在软件构建过程中,如果某一特定领域的问…

数据结构——栈,队列和数组

文章目录 **一 栈****1 基本概念****2 栈的顺序存储结构****2.1 顺序栈的实现****2.2 顺序栈的基本运算****2.3 共享栈** **3 栈的链式存储结构** **二 队列****1 基本概念****2 队列的顺序存储结构****2.1 队列的顺序存储****2.2 循环队列****2.3 循环队列的操作** **3 队列的…