Docker的docker-compose类比Spring的ApplicationContext

 总一句话是:Docker Compose:集中化管理多个容器及其依赖的资源环境;ApplicationContext:集中化管理 多个Bean 及其运行所需的资源和依赖关系。

1. 整体概念

  • Docker Compose:用于定义和运行多容器 Docker 应用程序,通过一个 YAML 文件集中管理多个服务、网络和卷。
  • Spring ApplicationContext:Spring 框架的核心接口之一,负责加载 Bean 定义、管理 Bean 生命周期及提供依赖注入。

2. 配置方式

  • Docker Compose:使用 docker-compose.yml 文件以声明式的方式配置服务、网络和存储卷。
  • Spring ApplicationContext:通过 XML 配置文件或注解(如 @Configuration@Bean)声明式地定义和配置 Bean 及其依赖关系。

3. 依赖管理

  • Docker Compose:可以指定服务间的启动顺序和依赖关系,确保某些服务在其他服务之前启动。
  • Spring ApplicationContext:通过依赖注入机制自动处理 Bean 之间的依赖关系,保证每个 Bean 在需要时都能获得所需的依赖对象。

4. 上下文环境

  • Docker Compose:创建一个共享资源(如网络、卷)的上下文环境,使所有服务能协同工作。
  • Spring ApplicationContext:提供一个运行时环境,所有 Bean 共享相同的配置和资源,形成完整的应用程序上下文。

5. 生命周期管理

  • Docker Compose:负责启动、停止和重启整个应用栈中的所有服务,并同步执行这些操作。
  • Spring ApplicationContext:负责初始化、刷新和关闭所有的 Spring Beans,确保它们按正确的顺序被创建和销毁。

docker-compose 集中管理原理

按照以前启动少量的容器,我们可以一个一个执行docker run 

# 启动 MySQL 数据库
docker run -d --name db \-e MYSQL_ROOT_PASSWORD=my-secret-pw \mysql:latest# 启动 Web 应用
docker run -d --name webapp \--link db:mysql \-p 8080:80 \my-webapp:latest

 现在docker-compose 是将不同的实例启动运行参数写在同一个配置文件,解析yml 文件控制应用的启动顺序和网络和硬件资源所需

version: '3.8'
# 指定 Docker Compose 文件格式版本services:# 应用服务appweb:image: your-app-imagecontainer_name: appwebdepends_on:- pgsql- redisnetworks:- my_network# PostgreSQL 数据库服务pgsql:image: postgres:14container_name: pgsqlenvironment:POSTGRES_USER: your_userPOSTGRES_PASSWORD: your_passwordPOSTGRES_DB: your_databasevolumes:- pg_data:/var/lib/postgresql/datanetworks:- my_network# Redis 缓存服务redis:image: redis:6container_name: redisvolumes:- redis_data:/datanetworks:- my_network# Nginx 反向代理服务nginx:image: nginx:stablecontainer_name: nginxports:- "80:80"- "443:443"volumes:- ./nginx/conf.d:/etc/nginx/conf.ddepends_on:- appwebnetworks:- my_network# Elasticsearch 搜索引擎服务elasticsearch:image: elasticsearch:7.12.0container_name: elasticsearchenvironment:- "cluster.name=es-cluster"- "discovery.type=single-node"- "ES_JAVA_OPTS=-Xms512m -Xmx1024m"volumes:- es_data:/usr/share/elasticsearch/data- es_plugins:/usr/share/elasticsearch/pluginsports:- "9200:9200"- "9300:9300"networks:- my_networkvolumes:# 定义持久化数据卷pg_data:redis_data:es_data:es_plugins:networks:# 自定义网络,用于服务间通信my_network:driver: bridge

假设一个场景 我现在要在上面的基础增加一个sentinel 做流控的,应该怎么做?

第一方式:在上面的compose.yml  继续增加配置 

第二种方式:新写一个compose.yml配置文件,然后在运行时覆盖合并

创建一个新的文件,比如 docker-compose-sentinel.yml

version: '3.8'services:# 新增的 Sentinel 服务sentinel:image: your-sentinel-imagecontainer_name: sentineldepends_on:- appwebnetworks:- my_networknetworks:my_network:external: true
docker-compose -f docker-compose.yml -f docker-compose-sentinel.yml up

docker compose 常用命令

docker-compose -h  # 查看帮助docker-compose --version  # 查看版本docker-compose -f <my-docker-compose.yml> build # 指定单个文件构建镜像# 迭代构建:假设你有两个文件
docker-compose.base.yml:包含所有服务的基础配置。
docker-compose.dev.yml:仅在开发环境中需要的配置,比如调试工具和开发依赖docker-compose -f docker-compose.base.yml -f docker-compose.dev.yml build# 忽略缓存,强制重新构建镜像
docker-compose build --no-cachedocker-compose up -d # 后台启动所有服务docker-compose down # 删除容器、网络、卷、镜像docker-compose ps  # 查看正在运行的容器docker-compose top  # 查看容器进程docker-compose exec <docker-compose.yml中写的某个服务id> /bin/bashdocker-compose logs <<docker-compose.yml中写的某个服务id>docker-compose config -q # 检查配置,有错误会输出docker-compose restart   # 重启服务docker-compose start     # 启动服务docker-compose stop      # 停止服务

补充安装可视化UI,由于dockerhup 用不了 所以使用国内的镜像提供商,花5块钱就可以了Docker镜像极速下载服务 - 毫秒镜像https://1ms.run/

docker volume create portainer_datadocker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart always \-v /var/run/docker.sock:/var/run/docker.sock \-v portainer_data:/data \docker.1ms.run/portainer/portainer:latestsudo docker restart portainer

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

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

相关文章

Reason-before-Retrieve(CVPR 2025)

研究方向&#xff1a;Image Captioning论文全名&#xff1a;《Reason-before-Retrieve: One-Stage Reflective Chain-of-Thoughts for Training-Free Zero-Shot Composed Image Retrieval》1. 论文介绍组合图像检索&#xff08;CIR&#xff09;旨在检索与参考图像密切相似的目标…

Idefics2:构建视觉-语言模型时,什么是重要的

温馨提示&#xff1a; 本篇文章已同步至"AI专题精讲" Idefics2&#xff1a;构建视觉-语言模型时&#xff0c;什么是重要的 摘要 随着large language models和vision transformers的进步&#xff0c;视觉-语言模型&#xff08;VLMs&#xff09;受到了越来越多的关注…

再谈fpga开发(fpga调试方法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】我们之前在学校学习c、c的时候&#xff0c;其实学校漏掉了很重要的一个教学环节&#xff0c;那就是调试、测试。很多时候我们代码写出来了&#xff…

C语言中的数据结构--栈和队列(1)

前言本届开始我们将对数据结构中栈的内容进行讲解,那么废话不多说,我们正式进入今天的学习栈栈是一种很特殊的线性表&#xff0c;它只能在固定的一端进行插入和删除操作&#xff0c;进行数据的插入和删除的一端叫做栈顶&#xff0c;另外一端叫做栈底&#xff0c;栈中的元素遵守…

字符串是数据结构还是数据类型?

比较纠结的一个问题&#xff0c;以下是在网上查到后总结的&#xff0c;不知道对不对&#xff0c;欢迎讨论。这是个触及计算机科学核心概念的精妙问题&#xff01;字符串既可以被视为一种数据类型&#xff0c;也可以被视为一种数据结构&#xff0c;这取决于你观察的视角和讨论的…

Cline与Cursor深度实战指南:AI编程助手的革命性应用

引言 在AI编程工具快速发展的今天&#xff0c;Cline和Cursor作为两款备受瞩目的AI编程助手&#xff0c;正在重新定义开发者的工作方式。作为一名深度使用这两款工具的开发者&#xff0c;我在过去一年的实践中积累了丰富的经验和独到的见解。本文将从技术角度深入分析Cline和Cur…

根本是什么

根本是什么 根本没有了&#xff0c;枝叶还在么&#xff1f; 没有了内涵&#xff0c;外延还有么&#xff1f; 丢弃了根本&#xff0c;再嗨也是无意义&#xff0c;无根据空虚之乐罢了。 人之所行所言所思所想所念皆欲念、历程感怀&#xff0c;情思。所谓得失过往&#xff0c;时空…

springboot基于Java的人力资源管理系统设计与实现

管理员&#xff1a;登录&#xff0c;个人中心&#xff0c;部门管理&#xff0c;员工管理&#xff0c;培训信息管理&#xff0c;员工奖励管理&#xff0c;员工惩罚管理员工考核管理&#xff0c;调薪信息管理&#xff0c;员工调动管理&#xff0c;员工工资管理员工&#xff1a;注…

金字塔降低采样

文章目录image_scale.hppimage_scale.cppmainimage_scale.hpp #ifndef IMAGE_SCALE_HPP #define IMAGE_SCALE_HPP#include <vector> #include <cstdint> #include <utility> // for std::pair #include <algorithm> #include <string> enum cl…

Filament引擎(四)——光照渲染Froxelizer实现分析

Froxelizer主要是用于filament光照效果的实现&#xff0c;生成光照渲染时所需的必要信息&#xff0c;帮助渲染过程中明确哪些区域受哪些光源所影响&#xff0c;是Filament中保证光照效果渲染效率的核心所在。这部分的源码&#xff0c;可以结合filament官方文档中Light Path部分…

2025 环法对决,VELO Angel Glide 坐垫轻装上阵

2025环法第16赛段的风秃山之巅&#xff0c;当最后一缕夕阳沉入云层&#xff0c;山风裹挟着砾石的气息掠过赛道&#xff0c;一场足以载入史册的激战正酣。帕雷-潘特的肌肉在汗水里贲张&#xff0c;链条与齿轮的咬合声混着粗重喘息&#xff0c;在171.5公里赛程的最后3公里陡坡上&…

Linux程序->进度条

进度条最终效果&#xff1a; 目录 进度条最终效果&#xff1a; 一&#xff1a;两个须知 1&#xff1a;缓冲区 ①&#xff1a;C语言自带缓冲区 ②&#xff1a;缓冲区的刷新策略 2&#xff1a;回车和换行的区别 二&#xff1a;倒计时程序 三&#xff1a;入门板进度条的实…

Python爬虫实战:研究tldextract库相关技术构建新闻网站域名分析爬虫系统

1. 引言 网络爬虫作为一种自动获取互联网信息的技术,在数据挖掘、信息检索、舆情分析等领域有着广泛的应用。Python 因其丰富的库和简洁的语法,成为了开发爬虫的首选语言。tldextract 是 Python 中一个强大的域名解析库,能够准确地从 URL 中提取顶级域名、二级域名等关键信…

【算法-华为机试-火星基地改造】

基地改造题目描述目标输入输出代码实现题目描述 在2XXX年&#xff0c;人们发现了一块火星地区&#xff0c;这里看起来很适合建设新家园。但问题是&#xff0c;我们不能一次性将这片地区的空气变得适合人类居住&#xff0c;得分步骤来。 把这片火星地区想象成一个巨大的棋盘。棋…

C++入门自学Day1-- C语言的宏函数和C++内联函数

一、函数调用开销函数调用会涉及&#xff1a;参数压栈&#xff08;或寄存器传参&#xff09;跳转到函数体返回值处理栈帧销毁这个过程对小函数来说可能非常浪费&#xff0c;因此&#xff0c;宏函数和内联函数的目的就是避免“函数调用的开销”&#xff0c;通过代码展开&#xf…

Pytorch混合精度训练最佳实践

混合精度训练&#xff08;Mixed Precision Training&#xff09;是一种通过结合单精度&#xff08;FP32&#xff09;和半精度&#xff08;FP16/FP8&#xff09;计算来加速训练、减少显存占用的技术。它在保持模型精度的同时&#xff0c;通常能带来 2-3 倍的训练速度提升&#x…

Qt C++动态库SDK在Visual Studio 2022使用(C++/C#版本)

01 将C SDK 集成到 IDE 中以下是在 Microsoft Visual Studio 平台下 SDK 的集成。2.1 Visual Studio 平台下 C/C环境配置及集成到 IDE 中xxx.lib 和 xxx.dll 适合在 Windows 操作系统平台使用&#xff0c;这里以 VS2022 环境为例。2.1.1 C/C 工程环境配置与集成1、C# SDK 接口…

大语言模型 LLM 通过 Excel 知识库 增强日志分析,根因分析能力的技术方案(2):LangChain + LlamaIndex 实现

文章大纲 1 技术原理总览 2 详细实现步骤(含代码) 2.1 环境准备 2.2 Excel → LlamaIndex 节点 2.3 构建向量索引(FAISS 本地) 2.4 Google Cloud 向量检索(可选替换 FAISS) 2.5 LangChain 问答链 A. RAG 模式(向量检索 + LLM 生成) B. SQL 模式(无 RAG,直接查表) 2.…

提升ARM Cortex-M系统性能的关键技术:TCM技术解析与实战指南

文章目录引言一、TCM基础架构与工作原理1.1 TCM的物理特性1.2 与缓存机制的对比1.3 ARM Cortex-M系列对TCM的支持二、TCM的典型应用场景2.1 实时中断处理2.2 低功耗模式下的待机代码2.3 高性能算法执行2.4 系统初始化阶段的关键代码三、实战指南&#xff1a;在STM32H7上配置和优…

大数据之路:阿里巴巴大数据实践——大数据领域建模综述

为什么需要数据建模 核心痛点 数据冗余&#xff1a;不同业务重复存储相同数据&#xff08;如用户基础信息&#xff09;&#xff0c;导致存储成本激增。计算资源浪费&#xff1a;未经聚合的明细数据直接参与计算&#xff08;如全表扫描&#xff09;&#xff0c;消耗大量CPU/内存…