做国外订单用哪个网站,建立一个网站如何开通账号,如何常看wordpress默认编辑器,网站建设越秀目录 一、引言
二、Docker Compose 文件基础
三、针对不同环境的 Docker 编排
开发环境
测试环境
生产环境
四、配置文件全局变量的编写
五、总结 一、引言
在软件开发和部署的过程中#xff0c;不同的环境有着不同的需求和配置。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:- VAR1value1- VAR2value2ports:- host_port:container_portrestart: 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:- TZAsia/Shanghai- CUDA_DEVICE_ORDERPCI_BUS_ID- CUDA_VISIBLE_DEVICES0 # 可根据开发机器的GPU资源进行调整不同环境可视GPU不同以免出现多个环境使用同一GPU出现显存处理不足的问题
# 以下是配置全局变量在配置文件中一般使用 ${KAFKA_BROKER_URL:192.168.0.24:9093} 作为全局可变配置参数- SERVER_PORT- KAFKA_BROKER_URL- DB_USERNAMEiotmp- DB_PASSWORD- DB_HOST- DB_PORT- MINIO_ENDPOINT- MINIO_ACCESS_KEY- MINIO_SECRET_KEY- MINIO_BUCKET_NAME- MINIO_SECUREports:- 8668:8666restart: 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:- TZAsia/Shanghai- CUDA_DEVICE_ORDERPCI_BUS_ID- CUDA_VISIBLE_DEVICES2- SERVER_PORT8667- KAFKA_BROKER_URL- DB_USERNAME- DB_PASSWORD- DB_HOST- DB_PORT- MINIO_ENDPOINT- MINIO_ACCESS_KEY- MINIO_SECRET_KEY- MINIO_BUCKET_NAME- MINIO_SECUREFalseports:- 8667:8666restart: alwaysruntime: nvidia与开发环境相比测试环境的编排可能会使用不同的外部服务地址或测试数据库等配置以模拟真实的生产环境场景。例如这里的KAFKA_BROKER_URL、DB_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:- TZAsia/Shanghai- CUDA_DEVICE_ORDERPCI_BUS_ID- CUDA_VISIBLE_DEVICES3- SERVER_PORT80- KAFKA_BROKER_URLprod_kafka.example.com:9092- DB_USERNAMEprod_user- DB_PASSWORDProdPassw0rd- DB_HOSTprod_db.example.com- DB_PORT3306- MINIO_ENDPOINTprod_minio.example.com:29000- MINIO_ACCESS_KEYprod_admin- MINIO_SECRET_KEYProdAdmin123!- MINIO_BUCKET_NAMEdida- MINIO_SECURETrueports:- 8669:8666restart: alwaysruntime: nvidia在生产环境中我们使用了正式的域名和生产级别的配置如prod_kafka.example.com、prod_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:- TZAsia/Shanghai- CUDA_DEVICE_ORDERPCI_BUS_ID- CUDA_VISIBLE_DEVICES0 # 容器可见GPU假设服务器为多显卡课件GPU可设置为0, 1, 2, 3- SERVER_PORT8667
# 以下是配置全局变量的值若在项目中配置文件中有使用${... : ...}指定值会使其替换为这里定义的全局变量值- KAFKA_BROKER_URL- DB_USERNAME- DB_PASSWORD- DB_HOST- DB_PORT- MINIO_ENDPOINT- MINIO_ACCESS_KEY- MINIO_SECRET_KEY- MINIO_BUCKET_NAME- MINIO_SECUREports:
# 原需调用的接口为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:- TZAsia/Shanghai- CUDA_DEVICE_ORDERPCI_BUS_ID- CUDA_VISIBLE_DEVICES2- SERVER_PORT8668- KAFKA_BROKER_URL- DB_USERNAME- DB_PASSWORD- DB_HOST- DB_PORT- MINIO_ENDPOINT- MINIO_ACCESS_KEY- MINIO_SECRET_KEY- MINIO_BUCKET_NAME- MINIO_SECUREFalseports:
# 原需调用的接口为10.0.4.66:8666映射后调用该测试环境服务接口为10.0.4.66:8668- 8668:8666restart: 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:- TZAsia/Shanghai- CUDA_DEVICE_ORDERPCI_BUS_ID- CUDA_VISIBLE_DEVICES3- SERVER_PORT80- KAFKA_BROKER_URL- DB_USERNAME- DB_PASSWORD- DB_HOST- DB_PORT- MINIO_ENDPOINT- MINIO_ACCESS_KEY- MINIO_SECRET_KEY- MINIO_BUCKET_NAME- MINIO_SECURETrueports:
# 原需调用的接口为10.0.4.66:8666映射后调用该生产环境服务接口为10.0.4.66:8668- 8669:8666restart: 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_URLdev_kafka.example.com:9092然后再运行 docker-compose up这样容器内的KAFKA_BROKER_URL环境变量就会使用开发环境的配置。