Docker_03_DockerCompose多容器编排
Docker Compose 多容器编排从入门到实战一、什么是 Docker Compose1.1 定义Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件配置应用的服务、网络和卷然后使用一个命令就可以创建和启动所有服务。1.2 为什么需要 Compose没有 Compose 时启动一个 Web 应用需要dockernetwork create myappdockervolume create db-datadockerrun-d--networkmyapp--namedb-vdb-data:/var/lib/mysql mysql:8.0dockerrun-d--networkmyapp--nameredis redis:alpinedockerrun-d--networkmyapp-p8080:8080 --depends-on db,redis myapp:latest使用 Compose 后一个文件搞定services:db:image:mysql:8.0volumes:-db-data:/var/lib/mysqlnetworks:-myappredis:image:redis:alpinenetworks:-myappapp:build:.ports:-8080:8080depends_on:-db-redisnetworks:-myappvolumes:db-data:networks:myapp:1.3 核心概念Service一个服务对应一个容器Project一组关联的服务由一个 compose 文件定义Compose FileYAML 格式定义服务、网络、卷等配置二、安装与基础2.1 安装Docker Compose 已集成到 Docker 中Docker Compose V2。安装 Docker 时自动包含。# 验证安装dockercompose version# 输出: Docker Compose version v2.x.x# 旧版本独立安装docker-composeversion2.2 基本使用流程# 1. 编写 docker-compose.yml# 2. 启动所有服务dockercompose up# 后台运行dockercompose up-d# 3. 查看服务状态dockercomposeps# 4. 查看日志dockercompose logsdockercompose logs-f# 实时跟踪# 5. 停止并删除所有服务dockercompose down# 6. 停止服务不删除dockercompose stop# 7. 重启服务dockercompose restart三、docker-compose.yml 详解3.1 基本结构services:# 定义服务service-name:image:...build:...ports:......volumes:# 定义数据卷volume-name:networks:# 定义网络network-name:configs:# 定义配置secrets:# 定义密钥3.2 服务配置项镜像与构建services:web:# 方式一使用现有镜像image:nginx:latest# 方式二从 Dockerfile 构建build:context:./app# 构建上下文dockerfile:Dockerfile# Dockerfile 路径args:# 构建参数VERSION:1.0端口映射services:web:image:nginxports:-8080:80# 宿主机:容器-8443:443-127.0.0.1:9090:80# 绑定特定 IP环境变量services:db:image:mysql:8.0environment:MYSQL_ROOT_PASSWORD:root123MYSQL_DATABASE:testdbMYSQL_USER:myuserMYSQL_PASSWORD:mypasswordenv_file:-.env# 从文件加载数据卷services:db:image:mysql:8.0volumes:-db-data:/var/lib/mysql# 命名卷-./config:/etc/mysql/conf.d# 绑定挂载-type:bindsource:./logstarget:/var/log/mysqlread_only:truevolumes:db-data:# 声明命名卷网络配置services:web:image:nginxnetworks:-frontend-backendnetworks:frontend:driver:bridgebackend:driver:bridgeipam:config:-subnet:172.20.0.0/16依赖管理services:web:image:myappdepends_on:-db-redisdb:image:mysql:8.0redis:image:redis:alpine注意depends_on只控制启动顺序不等待服务就绪。可以使用健康检查services:web:image:myappdepends_on:db:condition:service_healthydb:image:mysql:8.0healthcheck:test:[CMD,mysqladmin,ping,-h,localhost]interval:10stimeout:5sretries:5资源限制services:web:image:myappdeploy:resources:limits:cpus:1.0memory:512Mreservations:cpus:0.5memory:256M重启策略services:web:image:myapprestart:always# 总是重启# restart: on-failure # 失败时重启# restart: unless-stopped # 除非手动停止命令覆盖services:web:image:nginxcommand:nginx-g daemon off;entrypoint:[/docker-entrypoint.sh]四、常用命令4.1 服务管理# 启动所有服务dockercompose up-d# 启动指定服务dockercompose up-dweb db# 停止所有服务dockercompose stop# 停止并删除容器、网络dockercompose down# 停止并删除容器、网络、卷dockercompose down-v# 重启服务dockercompose restart# 暂停服务dockercompose pause# 恢复暂停的服务dockercompose unpause4.2 查看状态# 查看服务状态dockercomposeps# 查看日志dockercompose logsdockercompose logs-fdockercompose logs web# 指定服务# 查看服务进程dockercomposetop# 查看资源使用dockercompose stats4.3 进入容器# 在运行中的服务执行命令dockercomposeexecwebbashdockercomposeexecdb mysql-uroot-p# 列出服务dockercomposeps--services4.4 构建与更新# 构建镜像dockercompose build# 构建并启动dockercompose up-d--build# 更新镜像并重启dockercompose pulldockercompose up-d# 不使用缓存重新构建dockercompose build --no-cache4.5 扩缩容# 扩展服务副本数dockercompose up-d--scaleweb3# 查看副本状态dockercomposeps五、实战示例5.1 Spring Boot MySQL Redisservices:app:build:context:.dockerfile:Dockerfileports:-8080:8080environment:SPRING_DATASOURCE_URL:jdbc:mysql://db:3306/zoodbSPRING_DATASOURCE_USERNAME:rootSPRING_DATASOURCE_PASSWORD:root123SPRING_REDIS_HOST:redisdepends_on:db:condition:service_healthyredis:condition:service_healthynetworks:-backendrestart:unless-stoppeddb:image:mysql:8.0ports:-3306:3306environment:MYSQL_ROOT_PASSWORD:root123MYSQL_DATABASE:zoodbvolumes:-mysql-data:/var/lib/mysql-./init.sql:/docker-entrypoint-initdb.d/init.sqlhealthcheck:test:[CMD,mysqladmin,ping,-h,localhost]interval:10stimeout:5sretries:5networks:-backendrestart:unless-stoppedredis:image:redis:7-alpineports:-6379:6379volumes:-redis-data:/datahealthcheck:test:[CMD,redis-cli,ping]interval:10stimeout:5sretries:5networks:-backendrestart:unless-stoppedvolumes:mysql-data:redis-data:networks:backend:driver:bridge5.2 WordPress MySQLservices:wordpress:image:wordpress:latestports:-8080:80environment:WORDPRESS_DB_HOST:dbWORDPRESS_DB_USER:wp_userWORDPRESS_DB_PASSWORD:wp_passWORDPRESS_DB_NAME:wordpressvolumes:-wordpress-data:/var/www/htmldepends_on:-dbrestart:unless-stoppeddb:image:mysql:8.0environment:MYSQL_DATABASE:wordpressMYSQL_USER:wp_userMYSQL_PASSWORD:wp_passMYSQL_ROOT_PASSWORD:root_passvolumes:-db-data:/var/lib/mysqlrestart:unless-stoppedvolumes:wordpress-data:db-data:5.3 Nginx 反向代理 多服务services:nginx:image:nginx:alpineports:-80:80-443:443volumes:-./nginx.conf:/etc/nginx/nginx.conf:ro-./certs:/etc/nginx/certs:rodepends_on:-app1-app2networks:-frontendapp1:image:myapp1:latestnetworks:-frontend-backendapp2:image:myapp2:latestnetworks:-frontend-backenddb:image:mysql:8.0networks:-backendnetworks:frontend:backend:六、环境变量与 .env 文件6.1 使用 .env 文件# .env 文件MYSQL_ROOT_PASSWORDroot123MYSQL_DATABASEzoodbAPP_PORT8080# docker-compose.ymlservices:db:image:mysql:8.0environment:MYSQL_ROOT_PASSWORD:${MYSQL_ROOT_PASSWORD}MYSQL_DATABASE:${MYSQL_DATABASE}6.2 变量优先级命令行-e参数Shell 环境变量.env 文件docker-compose.yml 中的 environment七、最佳实践7.1 安全建议不要在 compose 文件中硬编码密码使用.env文件或 secrets限制端口暴露范围使用127.0.0.1:port:port使用健康检查确保服务就绪定期更新镜像版本7.2 性能优化使用命名卷而非绑定挂载合理设置资源限制使用 Alpine 镜像减小体积利用构建缓存7.3 目录结构建议project/ ├── docker-compose.yml ├── .env ├── app/ │ ├── Dockerfile │ └── src/ ├── nginx/ │ └── nginx.conf └── mysql/ └── init.sql八、面试高频题Q1docker-compose 中的 depends_on 有什么作用有什么局限Adepends_on 控制服务的启动顺序确保依赖的服务先启动。但局限是它只等待容器启动不等待服务就绪。例如 MySQL 容器启动了但还没准备好接受连接。解决方案是使用健康检查配合condition: service_healthy。Q2Compose 文件中如何管理多个环境开发、测试、生产A可以使用多个 compose 文件叠加。基础文件docker-compose.yml定义通用配置环境文件如docker-compose.prod.yml覆盖特定配置。使用docker compose -f docker-compose.yml -f docker-compose.prod.yml up启动。也可以用.env文件和环境变量区分。Q3如何在 Compose 中实现服务间的负载均衡A使用scale参数扩展服务副本docker compose up -d --scale web3。然后在 Nginx 等反向代理中配置上游服务器列表。也可以使用 Docker Swarm 的内置负载均衡。至此Docker 系列三篇博客全部完成

相关新闻

Claude Opus 5.5编码代理实战:68万行老项目的成本重构

Claude Opus 5.5编码代理实战:68万行老项目的成本重构

1. 项目概述:一堆老代码和一个新“队友”如果你也是那种每天都在跟几十万行遗留代码打交道的开发者,看到“Claude Opus 5.5编码代理”这个词,大概率不是来凑热闹的,而是想搞清楚一个问题:这东西到底能不能真的帮我干活…

2026/10/1 15:35:21 阅读更多 →
全流程AI科研平台与单点工具对比:沁言学术等五款评测

全流程AI科研平台与单点工具对比:沁言学术等五款评测

一、AI科研软件为什么越来越多,不同人群到底卡在哪 1、行业背景。 大模型技术成熟之后,科研工具像雨后春笋一样往外冒。写论文的、改句子的、画图的、管文献的,几乎每个环节都有专门的AI软件。信息过载带来的新问题也随之出现:工具…

2026/10/1 15:34:21 阅读更多 →
辽宁北斗国产化本安防爆物联网终端,面向石化易燃易爆高危工况,覆盖安全帽、智能安全带、定位工牌、车载终端、执法记录仪,依托单北斗RTK定位、统一调度平台,实现人车一体化监管,解决高空作业、人员车辆定位等

辽宁北斗国产化本安防爆物联网终端,面向石化易燃易爆高危工况,覆盖安全帽、智能安全带、定位工牌、车载终端、执法记录仪,依托单北斗RTK定位、统一调度平台,实现人车一体化监管,解决高空作业、人员车辆定位等

辽宁北斗系列物联网终端|石化高危场景一体化安全管控方案#石化安全生产#本安防爆#单北斗#人员定位#车载监管#单兵执法#智慧化工一、石化企业业务痛点分析石化化工厂区属于爆炸性气体危险环境,设备必须满足本安防爆要求;同时存在塔罐高空作业、…

2026/10/1 15:34:21 阅读更多 →

最新新闻

独家拆解NVIDIA最新AI Agent实践:一个ROS 2节点如何完成零拷贝迁移

独家拆解NVIDIA最新AI Agent实践:一个ROS 2节点如何完成零拷贝迁移

摘要:NVIDIA用AI Coding Agent和专用Skill迁移ROS 2节点,让GPU数据尽量绕开CPU拷贝。真正值得测试团队学习的不是“AI改了代码”,而是如何用语义、传输路径、回退行为和性能证据证明这次迁移可靠。 一个ROS 2视觉节点已经在GPU上跑TensorRT&a…

2026/10/1 16:18:38 阅读更多 →
Designer Skills视觉评审实战:/critique-screen如何一键输出优先级修复清单,快速定位设计缺陷

Designer Skills视觉评审实战:/critique-screen如何一键输出优先级修复清单,快速定位设计缺陷

Designer Skills视觉评审实战:/critique-screen如何一键输出优先级修复清单,快速定位设计缺陷 【免费下载链接】designer-skills Designer Skills Collection: agentic skills, commands, and plugins for design — from research to systems, UI, inte…

2026/10/1 16:18:38 阅读更多 →
逻辑严谨吗?8款AI写作辅助网站势力榜,毕业护航!

逻辑严谨吗?8款AI写作辅助网站势力榜,毕业护航!

论文选题总找不到方向?文献综述翻来覆去写不出新意?格式排版反复修改仍不达标? 别担心!AI论文写作工具正在重新定义学术创作方式。本文将从内容逻辑性、资料整合力、格式规范性、查重通过率四个关键维度,深度测评8款热…

2026/10/1 16:18:38 阅读更多 →
从“龙虾”到失控:自主AI智能体安全性博弈——用TaoToken统一Key复现权限边界测试

从“龙虾”到失控:自主AI智能体安全性博弈——用TaoToken统一Key复现权限边界测试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 16:18:38 阅读更多 →
数据资产价值评估全解析:从成本核算到ROI量化的实操框架

数据资产价值评估全解析:从成本核算到ROI量化的实操框架

“搞了这么多年大数据,到底给公司带回来多少真金白银?”——我敢说,十个数据负责人里,有八个被老板问到这句话时心里都会发虚。不是大家没干活,而是多数数据团队压根没建立起一套“数据资产价值评估”的机制&#xff1…

2026/10/1 16:18:38 阅读更多 →
Ever Gauzy Onboarding UI 插件实战指南:从零构建新用户引导流程

Ever Gauzy Onboarding UI 插件实战指南:从零构建新用户引导流程

后端前端企业应用MCP 服务 【免费下载链接】ever-gauzy Ever Gauzy™ - Open Business Management Platform (ERP/CRM/HRM/ATS/PM) - https://gauzy.co 项目地址: https://gitcode.com/GitHub_Trending/ev/ever-gauzy 点击查看 免费下载 导读 本文聚焦 Ever Gauzy…

2026/10/1 16:17:38 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →