当前位置: 首页 > news >正文

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.dtcms.com/a/301784.html

相关文章:

  • Yaffs文件系统学习
  • Mysql数据库基础(入门)
  • 智慧施工:施工流程可视化管理系统
  • 【分享】外国使馆雷电综合防护系统改造方案(一)
  • 自动出题与批改系统(数学题生成+OCR识别)
  • Vue入门到实战之第三篇【超基础】
  • 从 .NET Framework 到 .NET 8:跨平台融合史诗与生态演进全景
  • 数据科学专业的行业适配全景图
  • Unity TAA
  • 大数据工程师:职责与技能全景图 -- 从“数据搬运工”到“价值架构师”
  • 三、构建一个Agent
  • Triton IR
  • 【测试报告】思绪网(Java+Selenium+Jmeter自动化测试)
  • 力扣面试150题--二进制求和
  • 五度标调法调域统计分析工具
  • 【笔记】Einstein关系式 D = ukBT 的推导与应用研究
  • 零拷贝 详述
  • Day4.AndroidAudio初始化
  • Linux学习篇11——Linux软件包管理利器:RPM与YUM详解与实战指南,包含如何配置失效的YUM镜像地址
  • 【RH134 问答题】第 2 章 调度未来任务
  • 第1章 AB实验的基本原理和应用
  • 任务提醒工具怎么选?对比16款热门软件
  • Valgrind Helgrind 工具全解:线程同步的守门人
  • Linux 基础命令大全
  • LC振荡Multisim仿真
  • CPA全国青少年编程能力等级测评试卷及答案 Python编程(二级)
  • 金融市场资金波动模拟程序设计与实现
  • 文件IO——目录操作
  • 大模型蒸馏理论概述
  • 【分布式存储】聊聊一致性哈希算法原理和实现