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.mzph.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 事务的基本概念 定…