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
英文地址,請注明出處:http://en.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/內存…