【Docker】针对开发环境、测试环境、生产环境如何编排?

目录

一、引言

二、Docker Compose 文件基础

三、针对不同环境的 Docker 编排

开发环境

测试环境

生产环境

四、配置文件全局变量的编写

五、总结


一、引言

在软件开发和部署的过程中,不同的环境有着不同的需求和配置。Docker 作为一种强大的容器化技术,能够帮助我们轻松地创建和管理不同环境下的应用程序。通过合理地编排 Docker 容器,我们可以确保应用在开发、测试和生产环境中的一致性和可靠性。本文将详细介绍如何针对这三种环境进行 Docker 编排,包括 docker-compose 文件的编写以及配置文件全局变量的设置。

二、Docker Compose 文件基础

Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,它使用 YAML 文件来配置应用程序的服务、网络和卷等方面14. 以下是一个基本的 docker-compose.yml 文件结构:

version: '3.3'
services:# 服务1的配置service1:image: image_name:tagcontainer_name: container_nameworking_dir: /path/to/working/dircommand: command_to_runvolumes:- host_path:container_pathenvironment:- VAR1=value1- VAR2=value2ports:- "host_port:container_port"restart: alwaysruntime: nvidia# 服务2的配置service2:# 类似服务1的配置项...

其中:

  • version指定了 Docker Compose 的版本,不同版本可能具有不同的特性和语法14.
  • services下定义了各个服务,每个服务都有自己的配置,如image指定了使用的 Docker 镜像,container_name定义了容器的名称,working_dir设置了容器内的工作目录,command是容器启动时要执行的命令14.
  • volumes用于挂载主机目录到容器内,实现数据的持久化或共享14.
  • environment设置了容器内的环境变量14.
  • ports进行端口映射,将容器内的端口映射到主机的端口上,方便外部访问14.
  • restart定义了容器的重启策略,always表示容器总是在退出后自动重启14.
  • runtime指定了容器运行时的环境,如nvidia表示使用 NVIDIA 的 GPU 运行时环境。

三、针对不同环境的 Docker 编排

开发环境
  • 特点:开发环境主要用于开发者进行代码编写、调试和初步测试。通常需要频繁地修改代码和配置,并且对环境的灵活性要求较高,以便快速迭代和验证新功能3.
  • Docker Compose 编排示例
version: '3.3'
services:hy-asr-dev:image: hy-asr:v1.0container_name: hy-asr-server-devworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resources-../src:/workspace/hy-asr/src  # 挂载本地代码目录,方便开发时修改代码environment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=0  # 可根据开发机器的GPU资源进行调整(不同环境可视GPU不同,以免出现多个环境使用同一GPU出现显存处理不足的问题)
# 以下是配置全局变量,在配置文件中一般使用 ${KAFKA_BROKER_URL:192.168.0.24:9093} 作为全局可变配置参数- SERVER_PORT=- KAFKA_BROKER_URL=- DB_USERNAME=iotmp- DB_PASSWORD=- DB_HOST=- DB_PORT=- MINIO_ENDPOINT=- MINIO_ACCESS_KEY=- MINIO_SECRET_KEY=- MINIO_BUCKET_NAME=- MINIO_SECURE=ports:- "8668:8666"restart: alwaysruntime: nvidia

在开发环境的编排中,我们额外挂载了本地的代码目录../src到容器内的/workspace/hy-asr/src,这样开发者在主机上修改代码后,容器内的代码也会同步更新,无需重新构建镜像。同时,我们可以根据开发机器的实际情况调整 GPU 设备的可见性和端口号等配置。

测试环境
  • 特点:测试环境用于对开发完成的功能进行系统的测试,包括功能测试、性能测试等。测试环境的配置应该尽可能地接近生产环境,以确保测试结果的准确性和可靠性,但也可能需要一些特定的测试工具和配置3.
  • Docker Compose 编排示例
version: '3.3'
services:hy-asr-test:image: hy-asr:v1.0container_name: hy-asr-server-testworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resourcesenvironment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=2- SERVER_PORT=8667- KAFKA_BROKER_URL=- DB_USERNAME=- DB_PASSWORD=- DB_HOST=- DB_PORT=- MINIO_ENDPOINT=- MINIO_ACCESS_KEY=- MINIO_SECRET_KEY=- MINIO_BUCKET_NAME=- MINIO_SECURE=Falseports:- "8667:8666"restart: alwaysruntime: nvidia

与开发环境相比,测试环境的编排可能会使用不同的外部服务地址或测试数据库等配置,以模拟真实的生产环境场景。例如,这里的KAFKA_BROKER_URLDB_HOST等配置与开发环境有所不同,指向了专门为测试环境搭建的服务。

生产环境
  • 特点:生产环境是应用程序最终运行的环境,要求高度的稳定性、可靠性和安全性。配置应该经过严格的测试和验证,并且尽可能地优化性能和资源利用3.
  • Docker Compose 编排示例
version: '3.3'
services:hy-asr-prod:image: hy-asr:v1.0container_name: hy-asr-server-prodworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resourcesenvironment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=3- SERVER_PORT=80- KAFKA_BROKER_URL=prod_kafka.example.com:9092- DB_USERNAME=prod_user- DB_PASSWORD=Prod@Passw0rd- DB_HOST=prod_db.example.com- DB_PORT=3306- MINIO_ENDPOINT=prod_minio.example.com:29000- MINIO_ACCESS_KEY=prod_admin- MINIO_SECRET_KEY=ProdAdmin@123!- MINIO_BUCKET_NAME=dida- MINIO_SECURE=Trueports:- "8669:8666"restart: alwaysruntime: nvidia

在生产环境中,我们使用了正式的域名和生产级别的配置,如prod_kafka.example.comprod_db.example.com等,并且将端口映射到了标准的 HTTP 端口 80。同时,对于敏感信息如数据库密码等,应该使用更严格的安全措施进行管理,这里只是简单示例,实际生产中可能会使用加密存储或从安全的配置中心获取等方式。

四、同时启动docker-compose开发环境、测试环境、生产环境

示例:docker-compose.yml文件内容如下

version: '3.3'
services:# 开发环境服务hy-asr-dev:image: hy-asr:v1.0container_name: hy-asr-server-devworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resources-../src:/workspace/hy-asr/srcenvironment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=0  # 容器可见GPU(假设服务器为多显卡,课件GPU可设置为0, 1, 2, 3)- SERVER_PORT=8667
# 以下是配置全局变量的值,若在项目中配置文件中有使用${... : ...}指定值,会使其替换为这里定义的全局变量值- KAFKA_BROKER_URL=- DB_USERNAME=- DB_PASSWORD=- DB_HOST=- DB_PORT=- MINIO_ENDPOINT=- MINIO_ACCESS_KEY=- MINIO_SECRET_KEY=- MINIO_BUCKET_NAME=- MINIO_SECURE=ports:
# 原需调用的接口为10.0.4.66:8666,映射后调用该开发环境服务接口为10.0.4.66:8667- "8667:8666" # 8667是在容器外的映射端口,8666是容器内项目实际需要调用服务的端口restart: alwaysruntime: nvidia# 测试环境服务hy-asr-test:image: hy-asr:v1.0container_name: hy-asr-server-testworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resourcesenvironment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=2- SERVER_PORT=8668- KAFKA_BROKER_URL=- DB_USERNAME=- DB_PASSWORD=- DB_HOST=- DB_PORT=- MINIO_ENDPOINT=- MINIO_ACCESS_KEY=- MINIO_SECRET_KEY=- MINIO_BUCKET_NAME=- MINIO_SECURE=Falseports:
# 原需调用的接口为10.0.4.66:8666,映射后调用该测试环境服务接口为10.0.4.66:8668- "8668:8666"restart: alwaysruntime: nvidia# 生产环境服务hy-asr-prod:image: hy-asr:v1.0container_name: hy-asr-server-prodworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resourcesenvironment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=3- SERVER_PORT=80- KAFKA_BROKER_URL=- DB_USERNAME=- DB_PASSWORD=- DB_HOST=- DB_PORT=- MINIO_ENDPOINT=- MINIO_ACCESS_KEY=- MINIO_SECRET_KEY=- MINIO_BUCKET_NAME=- MINIO_SECURE=Trueports:
# 原需调用的接口为10.0.4.66:8666,映射后调用该生产环境服务接口为10.0.4.66:8668- "8669:8666"restart: alwaysruntime: nvidia

五、配置文件全局变量的编写

配置文件可变全局变量如何定义?

如下使用 ${KAFKA_BROKER_URL:192.168.0.4:9093} 形式

kafka:broker_url: ${KAFKA_BROKER_URL:192.168.0.4:9093}topic_name: ${KAFKA_TOPIC_NAME:hy-asr-audio}consumer_topic: ${KAFKA_CONSUMER_TOPIC:hy-asr-generate}group_id: ${KAFKA_GROUP_ID:hy-asr}auto_offset_reset: ${KAFKA_AUTO_OFFSET_RESET:earliest}enable_auto_commit: ${KAFKA_ENABLE_AUTO_COMMIT:true} # 是否自动提交偏移量,默认为true

在 Docker Compose 文件中,我们可以使用环境变量来设置配置文件的全局变量,这样可以方便地在不同环境中切换配置,而无需修改 Docker Compose 文件本身。例如,对于KAFKA_BROKER_URL,我们可以这样设置:

environment:- KAFKA_BROKER_URL=${KAFKA_BROKER_URL:192.168.0.4:9093}

这里的 ${KAFKA_BROKER_URL:192.168.0.4:9093} 表示如果环境变量KAFKA_BROKER_URL未设置,则使用默认值192.168.0.4:9093。在实际使用中,我们可以在启动 Docker 容器之前,在主机上设置相应的环境变量,或者在 CI/CD 流程中通过脚本设置环境变量,从而实现不同环境下的配置切换。例如,在开发环境中,也可以在终端中执行 export KAFKA_BROKER_URL=dev_kafka.example.com:9092,然后再运行 docker-compose up,这样容器内的KAFKA_BROKER_URL环境变量就会使用开发环境的配置。

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

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

相关文章

Flink:入门介绍

目录 一、Flink简介 2.1 Flink 架构 2.2 Flink 应用程序 运行模式 二、Flink 集群 部署 2.1 本地集群模式 2.1.1 安装JDK​编辑 2.1.2 下载、解压 Flink 2.1.3 启动集群 2.1.4 停止集群 2.2 Standalone 模式 2.2.0 集群规划 2.2.1 安装JDK 2.2.2 设置免密登录 2…

【RDMA】RDMA read和write编程实例(verbs API)

WRITE|READ编程(RDMA read and write with IB verbs) (本文讲解的示例代码在:RDMA read and write with IB verbs | The Geek in the Corner) 将 RDMA 与verbs一起使用非常简单:首先注册内存块&#xff0c…

洛谷P2670扫雷游戏(Java)

三.P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n 行 m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩…

泷羽sec专题课笔记-- Linux作业--开机自启动方法以及破解

本笔记为 泷羽sec 《红队全栈课程》学习笔记,课程请可自行前往B站学习,课程/笔记主要涉及网络安全相关知识、系统以及工具的介绍等,请使用该课程、本笔记以及课程和笔记中提及工具的读者,遵守网络安全相关法律法规,切勿…

Linux内核早期打印机制与RS485通信技术

往期内容 本专栏往期内容:Uart子系统 UART串口硬件介绍深入理解TTY体系:设备节点与驱动程序框架详解Linux串口应用编程:从UART到GPS模块及字符设备驱动 解UART 子系统:Linux Kernel 4.9.88 中的核心结构体与设计详解IMX 平台UART驱…

汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全

目录 1.强标的另一层解读 2.什么是IDPS 2.1 IDPS技术要点 2.2 车辆IDPS系统示例 3.车辆纵深防御架构 4.小结 1.强标的另一层解读 在最近发布的国家汽车安全强标《GB 44495》,在7.2节明确提出了12条关于通信安全的要求,分别涉及到车辆与车辆制造商云平台通信、车辆与车辆…

如何利用内链策略提升网站的整体权重?

内链是谷歌SEO中常常被低估的部分,实际上,合理的内链策略不仅能帮助提升页面间的关联性,还可以增强网站的整体权重。通过正确的内链布局,用户可以更流畅地浏览你的网站,谷歌爬虫也能更快地抓取到更多页面,有…

工业—使用Flink处理Kafka中的数据_ChangeRecord2

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,每隔 1 分钟输出最近 3 分钟的预警次数最多的 设备,将结果存入Redis 中, key 值为 “warning_last3min_everymin_out” , value 值为 “ 窗口结束时间,设备id” &am…

汇编语言学习-二

好吧,已经隔了两天,下完班看了两天,在电脑上装了虚拟机版的MS_DOS,主要是怕折腾坏我的电脑系统; 这个第二天应该是称为第二章更为合适,目前第二章已经看完,基本的命令也是敲了敲; 下面就进行一…

等差数列末项计算

等差数列末项计算 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 给出一个等差数列的前两项a1,a2,求第n项是多少。 输入 一行,包含三个整数a1,a2&#x…

【笔记2-1】ESP32:基于vscode的espidf插件的开发环境搭建

主要参考b站宸芯IOT老师的视频,记录自己的笔记,老师讲的主要是linux环境,但配置过程实在太多问题,就直接用windows环境了,老师也有讲一些windows的操作,只要代码会写,操作都还好,开发…

基于Java Springboot蛋糕订购小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…

使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限,校验过用户的用户名和密码后,会向用户响应一段经过加密的token,在这段token中可能储存了数据权限等,在后期的访问中,需要携带这段token,后台解析这段token才…

H3C OSPF实验

实验拓扑 实验需求 按照图示配置 IP 地址按照图示分区域配置 OSPF ,实现全网互通为了路由结构稳定,要求路由器使用环回口作为 Router-id,ABR 的环回口宣告进骨干区域 实验解法 一、配置IP地址 [R1]int l0 [R1-LoopBack0]ip add 1.1.1.1 32 […

LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型 Matlab代码注释清晰。 程序设计 完整程序和数据获取方式:私信博主回复LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型(Matlab&#…

Ai编程cursor + sealos + devBox实现登录以及用户管理增删改查(十三)

一、什么是 Sealos? Sealos 是一款以 Kubernetes 为内核的云操作系统发行版。它以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,使企业能够像使用个人电脑一样简单地使用云。 二、适用场景 业务运…

CSS学习记录02

CSS颜色 指定颜色是通过使用预定义的颜色名称&#xff0c;或RGB&#xff0c;HEX&#xff0c;HSL&#xff0c;RGBA&#xff0c;HSLA值。 CSS颜色名 在CSS中&#xff0c;可以使用颜色名称来指定颜色&#xff1a; CSS背景色 您可以为HTML元素设置背景色&#xff1a; <h1 s…

【VUE3】npm : 无法加载文件 D:\Program\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本。

npm : 无法加载文件 D:\Program\nodejs\npm.ps1。未对文件 D:\Program\nodejs\npm.ps1 进行数字签名。无法在当前系统上运行该脚本。有关运行脚本和设置执行策略的详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_ Execution_Policies。…

级联树结构TreeSelect和上级反查

接口返回结构 前端展示格式 前端组件 <template><div ><el-scrollbar height"70vh"><el-tree :data"deptOptions" :props"{ label: label, children: children }" :expand-on-click-node"false":filter-node-me…

Ansible自动化一键部署单节点集群架构

自动化部署利器&#xff1a;Ansible 一键部署脚本 在现代IT基础设施管理中&#xff0c;Ansible以其简洁、强大的自动化能力脱颖而出。以下是精心打造的Ansible自动化一键部署脚本&#xff0c;旨在简化部署流程&#xff0c;提升效率&#xff0c;确保一致性和可靠性。 通过这个…