Docker Compose 命令實現動態構建和部署

Docker Compose 命令實現動態構建和部署


一、編寫支持動態版本號的 docker-compose.yml

version: '3.8'services:myapp:build: context: .  # Dockerfile所在目錄args:APP_VERSION: ${TAG:-latest}  # 從環境變量獲取版本號,默認latestimage: myapp:${TAG:-latest}      # 鏡像名稱+動態標簽ports:- "8080:80"environment:- VERSION=${TAG}
關鍵配置說明:
  1. 版本注入機制
    通過 ${TAG} 環境變量動態控制鏡像版本,可在 .env 文件或命令行中定義該變量。

  2. 構建參數傳遞
    build.args 將版本號傳遞到 Dockerfile 的構建階段(需在 Dockerfile 中聲明 ARG APP_VERSION)。

  3. 鏡像標簽策略
    image: myapp:${TAG} 使得每次構建生成帶有唯一標簽的鏡像,避免覆蓋舊版本。


二、執行動態構建與部署的命令流程

1. 配置版本號

在項目根目錄創建 .env 文件(或通過命令行注入):

# .env 示例
TAG=v2.1.0
2. 構建并啟動容器
# 強制重建鏡像(即使Dockerfile未修改)
docker-compose up --build --force-recreate -d
3. 驗證版本更新
# 查看鏡像標簽
docker images | grep myapp# 查看容器環境變量中的版本
docker exec <container_id> env | grep VERSION

三、進階版本管理技巧

1. 多環境版本控制

通過不同環境文件切換版本:

# 開發環境
docker-compose -f docker-compose.yml --env-file .env.dev up# 生產環境
docker-compose -f docker-compose.yml --env-file .env.prod up
2. 并行構建加速

對于多服務場景,啟用并行構建:

docker-compose build --parallel  # 利用多核CPU加速構建
3. 版本回滾操作
# 修改.env中的TAG為舊版本號后執行
docker-compose up -d --no-build  # 直接使用舊鏡像啟動

四、配套 Dockerfile 示例

FROM nginx:alpineARG APP_VERSION  # 接收構建參數
ENV VERSION=$APP_VERSION  # 將版本注入容器環境COPY ./dist /usr/share/nginx/html
# 其他構建步驟...

五、注意事項

  1. 清理舊鏡像
    定期運行 docker image prune -a 清理無標簽鏡像,避免存儲膨脹。

  2. 版本變量穿透
    若需在容器內使用版本號,需同時在 environmentbuild.args 中聲明。

  3. Compose 文件兼容性
    version: '3.8' 支持最新的 Docker API 特性,建議與 Docker Engine 版本匹配。

通過以上方案,每次修改 .env 中的 TAG 變量后執行 docker-compose up --build,即可自動生成新版本鏡像并部署容器。此方法適用于 CI/CD 流水線中的版本化部署場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76434.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76434.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76434.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI時代下 你需要和想要了解的英文縮寫含義

在AI智能時代下&#xff0c;越來愈多的企業都開始重視并應用以及開發AI相關產品&#xff0c;這個時候都會或多或少的涉及到英文&#xff0c;英文還好&#xff0c;但是如果是縮寫&#xff0c;如果我們沒有提前了解過&#xff0c;我們往往很難以快速Get到對方的意思。在這里&…

聊聊Doris的數據模型,如何用結構化設計解決實時分析難題

傳統 OLAP 系統的局限 在大數據實時分析領域&#xff0c;數據模型設計直接決定了系統的查詢性能、存儲效率與業務適配性。Apache Doris作為新一代MPP分析型數據庫&#xff0c;通過獨創的多模型融合架構&#xff0c;在業內率先實現了"一份數據支持多種分析范式"的能力…

基于vue框架的點餐系統設計及實現w93q6(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能&#xff1a;用戶,菜品分類,菜品信息,配送員,訂單信息,配送進度,評價記錄 開題報告內容 基于 Vue 框架的點餐系統設計及實現開題報告 一、研究背景與意義 &#xff08;一&#xff09;研究背景 在當今快節奏的生活中&#xff0c;網上訂餐已成為人…

LeetCode 2563.統計公平數對的數目:排序 + 二分查找

【LetMeFly】2563.統計公平數對的數目&#xff1a;排序 二分查找 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/count-the-number-of-fair-pairs/ 給你一個下標從 0 開始、長度為 n 的整數數組 nums &#xff0c;和兩個整數 lower 和 upper &#xff0c;返回 公平…

CF1016賽后總結

文章目錄 前言T1:Ideal GeneratorT2&#xff1a;Expensive NumberT3:Simple RepetitionT4&#xff1a;Skibidi TableT5:Min Max MEXT6:Hackers and Neural NetworksT7:Shorten the Array 前言 由于最近在半期考試&#xff0c;更新稍微晚了一點&#xff0c;還望大家見諒 &#…

HFSS3(limy)——建模學習記錄

前言——筆者使用的是21版HFSS 1.基本模型 為什么沒有環形的天線 2.創建基本模型方法 常用&#xff1a;先粗略建好模型再編輯輸入準確坐標和大小尺寸&#xff08;這里長方體起始點是左上角下方的點&#xff0c;也就是說要輸入模型起點相對于坐標原點的位置尺寸就可以確定具體…

API網關的作用?企業如何應用API網關?

一、API網關的用處 API網關我的分析中會用到以下三種場景。 1、Open API 企業需要將自身數據、能力等作為開發平臺向外開放&#xff0c;通常會以rest的方式向外提供。最好的例子就是淘寶開放平臺、騰訊公司的QQ開發平臺、微信開放平臺。 Open API開放平臺必然涉及到客戶應用…

國網B接口協議圖像數據上報通知接口流程詳解以及上報失敗原因(電網B接口)

文章目錄 一、B接口協議圖像數據上報通知接口介紹B.13.1 接口描述B.13.2 接口流程B.13.3 接口參數B.13.3.1 SIP頭字段B.13.3.2 SIP響應碼B.13.3.3 XML Schema參數定義 B.13.4 消息示例B.13.4.1 圖像數據上報請求B.13.4.2 圖像數據上報響應 二、B接口圖像數據上報通知失敗常見問…

springAi---智能客服

首先被取代的是客服類&#xff0c;智能客服機器人都能夠高效地完成任務。 spring Ai 大模型應用相關開發demo&#xff0c;智能客服系統&#xff1b; 在需求分析階段&#xff0c;把功能屬于傳統Java處理的和ai的功能進行分離 梳理為流程圖如下&#xff1a; 在大模型中&#…

Java面試(2025)——基礎

Java語言有哪些特點&#xff1f; Java語言具有多個顯著特點&#xff0c;使其在編程領域廣受歡迎。首先&#xff0c;Java的跨平臺性非常強&#xff0c;通過Java虛擬機&#xff08;JVM&#xff09;實現“編寫一次&#xff0c;隨處運行”&#xff0c;使得開發者能夠在不同操作系統…

Linux壓縮與解壓命令完全指南:tar.gz、zip等格式詳解

Linux壓縮與解壓命令完全指南&#xff1a;tar.gz、zip等格式詳解 在Linux系統中&#xff0c;文件壓縮和解壓是日常操作中不可或缺的一部分。本文將全面介紹Linux下常用的壓縮和解壓命令&#xff0c;包括tar.gz、tar、zip等格式的區別和使用方法&#xff0c;幫助你高效管理文件…

C++ STL 環形隊列模擬實現

C STL 環形隊列模擬實現 下面是一個使用C STL實現的環形隊列&#xff08;Circular Queue&#xff09;的完整示例&#xff1a; #include <iostream> #include <vector> #include <stdexcept>template <typename T> class CircularQueue { private:std…

部署rocketmq集群

容器化部署RocketMQ5.3.1集群 背景: 生產環境單機的MQ不具有高可用,所以我們應該部署成集群模式,這里給大家部署一個雙主雙從異步復制的Broker集群 一、安裝docker yum install -y docker systemctl enable docker --now # 單機部署參考: https://www.cnblogs.com/hsyw/p/1…

mysql的函數(第一期)

一、字符串函數?? 處理文本數據&#xff0c;常用函數&#xff1a; ??CONCAT(str1, str2, ...)?? ??作用??&#xff1a;拼接字符串。??示例??&#xff1a;SELECT CONCAT(Hello, , World); → Hello World??注意??&#xff1a;若任一參數為 NULL&#xff0c;…

Linux下的網絡管理

注意&#xff1a;本文使用的Linux系統版本為Red Hat Enterprise Linux 9 (RHEL 9)。 在RHEL9上&#xff0c;使用NM&#xff08;NetworkManager&#xff09;進行網絡配置&#xff0c;ifcfg &#xff08;也稱為 文件&#xff09;將不再是網絡配置文件的主存儲。雖然 ifcfg 樣式仍…

游戲引擎學習第233天

原地歸并排序地方很蒙圈 game_render_group.cpp&#xff1a;注意當前的SortEntries函數是O(n^2)&#xff0c;并引入一個提前退出的條件 其實我們不太討論這些話題&#xff0c;因為我并沒有深入研究過計算機科學&#xff0c;所以我也沒有太多內容可以分享。但希望在過去幾天里…

從《周游記3》演繹歌劇版《菊花臺》,周杰倫婚禮曲目意大利文版驚喜亮相

今天&#xff08;4月19日&#xff09;22:00&#xff0c;由魔胴西西里咖啡冠名的戶外實境互動綜藝《周游記3》第四期即將播出。本期節目中&#xff0c;“J式之旅”發起人周杰倫和林暐恒、杜國璋、陳冠霖、陳冠廷&#xff0c;將繼續意大利之旅&#xff0c;從那不勒斯的百年老店到…

Linux系統編程 day6 進程間通信mmap

父子共享的信息&#xff1a;文件描述符&#xff0c;mmap建立的共享映射區&#xff08;MAP_SHARED&#xff09; mmap父子間進程通信 var的時候 &#xff1a;讀時共享&#xff0c;寫時復制 父進程先創建映射區&#xff0c;指定共享MAP_SHARED權限 &#xff0c; fork創建子進程…

opencv--圖像處理

圖像處理技術 圖像處理技術是利用計算機對圖像進行計算,分析和處理的技術,包括數字圖像處理和計算機視覺兩大領域。 對圖像的處理包括濾波,縮放,分割,識別(兩種信息對比)等。 鏈接 數字圖像處理 1. 數字圖像處理(Digital Image Processing) 數字圖像處理主要關注圖…

Spring 學習筆記之 @Transactional詳解

一、數據庫事務基礎 數據庫事務&#xff08;Transaction&#xff09;是數據庫管理系統中用于確保數據一致性和完整性的一種機制。它是一組操作的集合&#xff0c;這些操作要么全部成功&#xff0c;要么全部失敗&#xff0c;從而保證數據庫狀態的正確性。 1.1 事務的基本概念 定…