news 2026/5/11 7:04:17

第五部分-DockerCompose——25. Compose 高级特性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第五部分-DockerCompose——25. Compose 高级特性

25. Compose 高级特性

1. 高级特性概述

Docker Compose 提供了许多高级特性,用于处理复杂的多容器应用场景,包括配置文件管理、服务扩展、健康检查、依赖控制等。

┌─────────────────────────────────────────────────────────────┐ │ Compose 高级特性 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 配置管理 │ │ │ │ - configs: 配置文件独立管理 │ │ │ │ - secrets: 敏感信息加密 │ │ │ │ - profiles: 条件启动服务 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 服务扩展 │ │ │ │ - scale: 动态扩缩容 │ │ │ │ - depends_on: 启动顺序控制 │ │ │ │ - healthcheck: 健康检查 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 网络与存储 │ │ │ │ - network_mode: host/container/none │ │ │ │ - sysctls: 内核参数调优 │ │ │ │ - devices: 设备映射 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘

2. 配置与密钥

2.1 Configs(配置文件)

version:'3.8'services:web:image:nginxconfigs:-source:nginx_configtarget:/etc/nginx/nginx.conf-source:app_configtarget:/app/config.jsonmode:0440configs:nginx_config:file:./nginx.confapp_config:file:./config/prod.json# 外部配置external_config:external:truename:existing-config

2.2 Secrets(密钥)

version:'3.8'services:db:image:postgressecrets:-db_password-db_userenvironment:POSTGRES_PASSWORD_FILE:/run/secrets/db_passwordPOSTGRES_USER_FILE:/run/secrets/db_userapp:image:myappsecrets:-api_key-jwt_secretsecrets:db_password:file:./secrets/db_password.txtdb_user:external:truename:prod-db-userapi_key:external:true

3. Profiles(配置文件)

version:'3.8'services:web:image:nginxprofiles:-production-stagingdev-tools:image:adminerprofiles:-developmentports:-"8080:8080"debug:image:nicodebo/baseprofiles:-debugcommand:sleep infinitydefault:image:alpine# 无 profiles,总是启动
# 使用 profilesdocker-compose--profiledevelopment up-ddocker-compose--profileproduction up-d# 多个 profilesdocker-compose--profiledevelopment--profiledebug up-d# 启动所有docker-compose--profile"*"up-d

4. 健康检查高级配置

services:web:image:nginxhealthcheck:test:["CMD","curl","-f","http://localhost"]interval:30s# 检查间隔timeout:10s# 超时时间retries:3# 失败重试次数start_period:40s# 启动缓冲期# 自定义检测脚本test:["CMD-SHELL","curl -f http://localhost || exit 1"]db:image:postgreshealthcheck:test:["CMD","pg_isready","-U","postgres"]interval:10stimeout:5sretries:5start_period:30s

5. 依赖控制

5.1 高级 depends_on

services:db:image:postgreshealthcheck:test:["CMD","pg_isready"]interval:10stimeout:5sretries:5redis:image:redishealthcheck:test:["CMD","redis-cli","ping"]interval:10sapp:image:myappdepends_on:db:condition:service_healthyredis:condition:service_healthy# 等待启动完成cache:condition:service_started# 服务完成退出depends_on:migrator:condition:service_completed_successfullymigrator:image:myappcommand:npm run migrate

6. 资源扩展

6.1 服务扩缩容

services:web:image:nginxdeploy:replicas:3update_config:parallelism:2# 并行更新数delay:10s# 更新延迟order:start-first# 先启动新容器再停止旧rollback_config:parallelism:1delay:5srestart_policy:condition:on-failuredelay:5smax_attempts:3window:120s# 资源配置resources:limits:cpus:'0.5'memory:512Mreservations:cpus:'0.25'memory:256M
# 手动扩缩容docker-composeup--scaleweb=5-d# 查看服务状态docker-composeps

7. 网络高级配置

7.1 网络模式

services:# host 模式web-host:image:nginxnetwork_mode:host# 共享其他容器网络sidecar:image:fluentdnetwork_mode:"service:web"# none 模式isolated:image:alpinenetwork_mode:none# 使用现有网络app:image:myappnetworks:-default-external-netnetworks:external-net:external:truename:my-existing-network

7.2 网络定制

networks:frontend:driver:bridgedriver_opts:com.docker.network.bridge.name:front_bridgecom.docker.network.bridge.enable_icc:"true"com.docker.network.bridge.enable_ip_masquerade:"false"ipam:driver:defaultconfig:-subnet:10.10.0.0/16gateway:10.10.0.1ip_range:10.10.1.0/24labels:-"project=myapp"internal:falseattachable:true

8. 系统调优

8.1 内核参数

services:app:image:myappsysctls:-net.core.somaxconn=1024-net.ipv4.tcp_syncookies=0-net.ipv4.tcp_tw_reuse=1ulimits:nproc:65535nofile:soft:20000hard:40000

8.2 设备映射

services:app:image:myappdevices:-"/dev/ttyUSB0:/dev/ttyUSB0"-"/dev/sda:/dev/xvda:rwm"

9. 日志管理

services:web:image:nginxlogging:driver:json-fileoptions:max-size:"10m"max-file:"3"compress:"true"app:image:myapplogging:driver:syslogoptions:syslog-address:"tcp://192.168.1.100:514"syslog-facility:"local0"tag:"myapp-{{.Name}}"worker:image:myworkerlogging:driver:fluentdoptions:fluentd-address:localhost:24224tag:myapp.worker

10. 完整高级示例

version:'3.8'services:web:image:nginx:alpineprofiles:["production","staging"]ports:-"80:80"configs:-source:nginx_configtarget:/etc/nginx/nginx.confsecrets:-tls_cert-tls_keyhealthcheck:test:["CMD","curl","-f","http://localhost"]interval:30stimeout:10sretries:3deploy:replicas:3update_config:parallelism:1delay:10sresources:limits:cpus:'0.5'memory:512Mlogging:driver:json-fileoptions:max-size:"10m"max-file:"3"app:image:myapp:${TAG}profiles:["development","staging","production"]depends_on:db:condition:service_healthyredis:condition:service_startedenvironment:-DB_HOST=db-REDIS_HOST=redissysctls:-net.core.somaxconn=1024ulimits:nofile:soft:20000hard:40000deploy:resources:limits:cpus:'1'memory:1Greservations:cpus:'0.5'memory:512Mdb:image:postgres:13profiles:["development","staging","production"]secrets:-db_passwordenvironment:POSTGRES_PASSWORD_FILE:/run/secrets/db_passwordvolumes:-db-data:/var/lib/postgresql/datahealthcheck:test:["CMD","pg_isready","-U","postgres"]interval:10stimeout:5sretries:5start_period:30sredis:image:redis:alpineprofiles:["development","staging","production"]command:redis-server--appendonly yesvolumes:-redis-data:/datahealthcheck:test:["CMD","redis-cli","ping"]interval:10stimeout:5sretries:3dev-tools:image:adminerprofiles:["development"]ports:-"8080:8080"depends_on:-dbprofiles:-developmentconfigs:nginx_config:file:./nginx.confsecrets:tls_cert:file:./certs/cert.pemtls_key:file:./certs/key.pemdb_password:external:truevolumes:db-data:redis-data:networks:default:driver:bridge

11. 命令速查

命令说明
docker-compose --profile dev up使用 profiles
docker-compose up --scale web=5扩缩容
docker-compose config查看合并配置
docker-compose exec web bash进入容器
docker-compose logs -f web查看日志
docker-compose events实时事件

12. 小结

  • Configs/Secrets:配置和密钥管理
  • Profiles:条件启动服务
  • 健康检查:服务可用性检测
  • 依赖控制:启动顺序和条件
  • 扩缩容:动态调整实例数
  • 网络高级:host/container/none 模式
  • 系统调优:内核参数、文件描述符
  • 日志管理:多种日志驱动

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 7:03:11

HelmWave:声明式编排工具,解决Kubernetes多Helm Chart部署难题

1. 项目概述:HelmWave,一个被低估的Helm编排利器如果你和我一样,长期在Kubernetes环境中管理着几十甚至上百个Helm Chart,那你一定对“Helm依赖地狱”和“多环境部署同步”这两个词深有体会。每次更新,手动执行一堆hel…

作者头像 李华
网站建设 2026/5/11 7:00:33

前端工程化:持续集成实战指南

前端工程化:持续集成实战指南 前言 持续集成(CI)是现代软件开发的核心实践之一。它能帮助团队快速发现问题、减少集成风险、提高开发效率。今天我就来给大家讲讲如何搭建一套完整的前端持续集成流程。 什么是持续集成 持续集成是一种软件开发…

作者头像 李华
网站建设 2026/5/11 6:57:16

告别硬编码!用CAPL脚本读写.ini配置文件,让你的CANoe测试更灵活

告别硬编码!用CAPL脚本读写.ini配置文件,让你的CANoe测试更灵活 在汽车电子测试领域,我们经常遇到这样的困境:每次测试环境变化都需要修改脚本中的硬编码参数,不仅效率低下,还容易出错。想象一下&#xff0…

作者头像 李华
网站建设 2026/5/11 6:55:42

复杂室内移动机器人融合建图与平滑路径规划【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅如需沟通交流,点击《获取方式》 (1)多模态语义融合SLAM与障碍物增强建图: 提…

作者头像 李华
网站建设 2026/5/11 6:55:41

制造企业中央空调模糊PID节能控制系统设计【附程序】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅如需沟通交流,点击《获取方式》 (1)冷冻泵与冷却泵变流量定温差节能控制策略及系统建模&…

作者头像 李华