帮人做网站怎么收费,展馆设计总结,住房和城乡建设部网站行标,网站备案没座机Docker Compose #xff1a;从入门到企业级部署1. Docker Compose 核心概念1.1 Compose 架构全景图2. 完整开发工作流2.1 典型开发流程2.2 多服务示例项目结构3. 核心配置详解3.1 服务配置矩阵3.2 网络拓扑示例4. 企业级部署方案4.1 多环境配置管理4.2 扩展部署架构5. 高级技巧…
Docker Compose 从入门到企业级部署1. Docker Compose 核心概念1.1 Compose 架构全景图2. 完整开发工作流2.1 典型开发流程2.2 多服务示例项目结构3. 核心配置详解3.1 服务配置矩阵3.2 网络拓扑示例4. 企业级部署方案4.1 多环境配置管理4.2 扩展部署架构5. 高级技巧与优化5.1 性能优化策略5.2 安全最佳实践6. 实战案例解析6.1 微服务架构部署6.2 CI/CD 集成流程7. 常见问题排查7.1 问题诊断流程图8. 版本演进与趋势8.1 Compose特性发展8.2 未来技术方向The Begin点点关注收藏不迷路
1. Docker Compose 核心概念
1.1 Compose 架构全景图
#mermaid-svg-PNv5W3Moo6dfPs6X {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-PNv5W3Moo6dfPs6X .error-icon{fill:#552222;}#mermaid-svg-PNv5W3Moo6dfPs6X .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PNv5W3Moo6dfPs6X .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-PNv5W3Moo6dfPs6X .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PNv5W3Moo6dfPs6X .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PNv5W3Moo6dfPs6X .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PNv5W3Moo6dfPs6X .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PNv5W3Moo6dfPs6X .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PNv5W3Moo6dfPs6X .marker.cross{stroke:#333333;}#mermaid-svg-PNv5W3Moo6dfPs6X svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PNv5W3Moo6dfPs6X .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-PNv5W3Moo6dfPs6X .cluster-label text{fill:#333;}#mermaid-svg-PNv5W3Moo6dfPs6X .cluster-label span{color:#333;}#mermaid-svg-PNv5W3Moo6dfPs6X .label text,#mermaid-svg-PNv5W3Moo6dfPs6X span{fill:#333;color:#333;}#mermaid-svg-PNv5W3Moo6dfPs6X .node rect,#mermaid-svg-PNv5W3Moo6dfPs6X .node circle,#mermaid-svg-PNv5W3Moo6dfPs6X .node ellipse,#mermaid-svg-PNv5W3Moo6dfPs6X .node polygon,#mermaid-svg-PNv5W3Moo6dfPs6X .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PNv5W3Moo6dfPs6X .node .label{text-align:center;}#mermaid-svg-PNv5W3Moo6dfPs6X .node.clickable{cursor:pointer;}#mermaid-svg-PNv5W3Moo6dfPs6X .arrowheadPath{fill:#333333;}#mermaid-svg-PNv5W3Moo6dfPs6X .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PNv5W3Moo6dfPs6X .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PNv5W3Moo6dfPs6X .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-PNv5W3Moo6dfPs6X .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-PNv5W3Moo6dfPs6X .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PNv5W3Moo6dfPs6X .cluster text{fill:#333;}#mermaid-svg-PNv5W3Moo6dfPs6X .cluster span{color:#333;}#mermaid-svg-PNv5W3Moo6dfPs6X div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PNv5W3Moo6dfPs6X :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}核心组件服务(services)网络(networks)卷(volumes)开发者编写docker-compose.yml定义服务配置网络配置存储多容器应用一键部署三大核心要素
服务容器化的应用组件如web、db网络定义服务间通信方式卷持久化数据存储方案
2. 完整开发工作流
2.1 典型开发流程
#mermaid-svg-IXwh0LXGmWKxQQub {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-IXwh0LXGmWKxQQub .error-icon{fill:#552222;}#mermaid-svg-IXwh0LXGmWKxQQub .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IXwh0LXGmWKxQQub .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-IXwh0LXGmWKxQQub .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IXwh0LXGmWKxQQub .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IXwh0LXGmWKxQQub .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IXwh0LXGmWKxQQub .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IXwh0LXGmWKxQQub .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IXwh0LXGmWKxQQub .marker.cross{stroke:#333333;}#mermaid-svg-IXwh0LXGmWKxQQub svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IXwh0LXGmWKxQQub .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-IXwh0LXGmWKxQQub .cluster-label text{fill:#333;}#mermaid-svg-IXwh0LXGmWKxQQub .cluster-label span{color:#333;}#mermaid-svg-IXwh0LXGmWKxQQub .label text,#mermaid-svg-IXwh0LXGmWKxQQub span{fill:#333;color:#333;}#mermaid-svg-IXwh0LXGmWKxQQub .node rect,#mermaid-svg-IXwh0LXGmWKxQQub .node circle,#mermaid-svg-IXwh0LXGmWKxQQub .node ellipse,#mermaid-svg-IXwh0LXGmWKxQQub .node polygon,#mermaid-svg-IXwh0LXGmWKxQQub .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IXwh0LXGmWKxQQub .node .label{text-align:center;}#mermaid-svg-IXwh0LXGmWKxQQub .node.clickable{cursor:pointer;}#mermaid-svg-IXwh0LXGmWKxQQub .arrowheadPath{fill:#333333;}#mermaid-svg-IXwh0LXGmWKxQQub .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-IXwh0LXGmWKxQQub .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-IXwh0LXGmWKxQQub .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-IXwh0LXGmWKxQQub .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-IXwh0LXGmWKxQQub .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-IXwh0LXGmWKxQQub .cluster text{fill:#333;}#mermaid-svg-IXwh0LXGmWKxQQub .cluster span{color:#333;}#mermaid-svg-IXwh0LXGmWKxQQub div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-IXwh0LXGmWKxQQub :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}是否关键命令docker-compose updocker-compose logsdocker-compose down编写应用代码编写Dockerfile编写compose文件启动环境测试调试需要修改?提交部署2.2 多服务示例项目结构
myapp/
├── docker-compose.yml
├── backend/
│ ├── Dockerfile
│ └── src/
├── frontend/
│ ├── Dockerfile
│ └── public/
└── db/└── init.sql3. 核心配置详解
3.1 服务配置矩阵
配置项说明示例build指定构建上下文build: ./dirimage使用预构建镜像image: nginx:alpineports端口映射8000:8000volumes数据卷挂载- ./data:/var/lib/mysqlenvironment环境变量DEBUG: truedepends_on服务依赖depends_on: [db]networks加入指定网络networks: [backend]
3.2 网络拓扑示例
#mermaid-svg-2Ot2Caxhv0FALMJu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-2Ot2Caxhv0FALMJu .error-icon{fill:#552222;}#mermaid-svg-2Ot2Caxhv0FALMJu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2Ot2Caxhv0FALMJu .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-2Ot2Caxhv0FALMJu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2Ot2Caxhv0FALMJu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2Ot2Caxhv0FALMJu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2Ot2Caxhv0FALMJu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2Ot2Caxhv0FALMJu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2Ot2Caxhv0FALMJu .marker.cross{stroke:#333333;}#mermaid-svg-2Ot2Caxhv0FALMJu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2Ot2Caxhv0FALMJu .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2Ot2Caxhv0FALMJu .cluster-label text{fill:#333;}#mermaid-svg-2Ot2Caxhv0FALMJu .cluster-label span{color:#333;}#mermaid-svg-2Ot2Caxhv0FALMJu .label text,#mermaid-svg-2Ot2Caxhv0FALMJu span{fill:#333;color:#333;}#mermaid-svg-2Ot2Caxhv0FALMJu .node rect,#mermaid-svg-2Ot2Caxhv0FALMJu .node circle,#mermaid-svg-2Ot2Caxhv0FALMJu .node ellipse,#mermaid-svg-2Ot2Caxhv0FALMJu .node polygon,#mermaid-svg-2Ot2Caxhv0FALMJu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2Ot2Caxhv0FALMJu .node .label{text-align:center;}#mermaid-svg-2Ot2Caxhv0FALMJu .node.clickable{cursor:pointer;}#mermaid-svg-2Ot2Caxhv0FALMJu .arrowheadPath{fill:#333333;}#mermaid-svg-2Ot2Caxhv0FALMJu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2Ot2Caxhv0FALMJu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2Ot2Caxhv0FALMJu .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-2Ot2Caxhv0FALMJu .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-2Ot2Caxhv0FALMJu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2Ot2Caxhv0FALMJu .cluster text{fill:#333;}#mermaid-svg-2Ot2Caxhv0FALMJu .cluster span{color:#333;}#mermaid-svg-2Ot2Caxhv0FALMJu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2Ot2Caxhv0FALMJu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}网络划分公共网络后端网络数据库网络数据库网络public (bridge)backend (自定义)database (自定义)前端服务用户API服务MySQLRedis4. 企业级部署方案
4.1 多环境配置管理
#mermaid-svg-hosF5kRBjDSziNRX {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hosF5kRBjDSziNRX .error-icon{fill:#552222;}#mermaid-svg-hosF5kRBjDSziNRX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hosF5kRBjDSziNRX .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-hosF5kRBjDSziNRX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hosF5kRBjDSziNRX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hosF5kRBjDSziNRX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hosF5kRBjDSziNRX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hosF5kRBjDSziNRX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hosF5kRBjDSziNRX .marker.cross{stroke:#333333;}#mermaid-svg-hosF5kRBjDSziNRX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hosF5kRBjDSziNRX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hosF5kRBjDSziNRX .cluster-label text{fill:#333;}#mermaid-svg-hosF5kRBjDSziNRX .cluster-label span{color:#333;}#mermaid-svg-hosF5kRBjDSziNRX .label text,#mermaid-svg-hosF5kRBjDSziNRX span{fill:#333;color:#333;}#mermaid-svg-hosF5kRBjDSziNRX .node rect,#mermaid-svg-hosF5kRBjDSziNRX .node circle,#mermaid-svg-hosF5kRBjDSziNRX .node ellipse,#mermaid-svg-hosF5kRBjDSziNRX .node polygon,#mermaid-svg-hosF5kRBjDSziNRX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hosF5kRBjDSziNRX .node .label{text-align:center;}#mermaid-svg-hosF5kRBjDSziNRX .node.clickable{cursor:pointer;}#mermaid-svg-hosF5kRBjDSziNRX .arrowheadPath{fill:#333333;}#mermaid-svg-hosF5kRBjDSziNRX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hosF5kRBjDSziNRX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hosF5kRBjDSziNRX .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-hosF5kRBjDSziNRX .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-hosF5kRBjDSziNRX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hosF5kRBjDSziNRX .cluster text{fill:#333;}#mermaid-svg-hosF5kRBjDSziNRX .cluster span{color:#333;}#mermaid-svg-hosF5kRBjDSziNRX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hosF5kRBjDSziNRX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}文件结构docker-compose.ymldocker-compose.override.ymldocker-compose.test.ymldocker-compose.prod.yml基础配置开发覆盖测试覆盖生产覆盖启动命令示例
# 开发环境加载override
docker-compose up# 测试环境
docker-compose -f docker-compose.yml -f docker-compose.test.yml up# 生产环境
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d4.2 扩展部署架构
#mermaid-svg-jqvp8JpPNhnbp3qd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jqvp8JpPNhnbp3qd .error-icon{fill:#552222;}#mermaid-svg-jqvp8JpPNhnbp3qd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jqvp8JpPNhnbp3qd .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-jqvp8JpPNhnbp3qd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jqvp8JpPNhnbp3qd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jqvp8JpPNhnbp3qd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jqvp8JpPNhnbp3qd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jqvp8JpPNhnbp3qd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jqvp8JpPNhnbp3qd .marker.cross{stroke:#333333;}#mermaid-svg-jqvp8JpPNhnbp3qd svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jqvp8JpPNhnbp3qd .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jqvp8JpPNhnbp3qd .cluster-label text{fill:#333;}#mermaid-svg-jqvp8JpPNhnbp3qd .cluster-label span{color:#333;}#mermaid-svg-jqvp8JpPNhnbp3qd .label text,#mermaid-svg-jqvp8JpPNhnbp3qd span{fill:#333;color:#333;}#mermaid-svg-jqvp8JpPNhnbp3qd .node rect,#mermaid-svg-jqvp8JpPNhnbp3qd .node circle,#mermaid-svg-jqvp8JpPNhnbp3qd .node ellipse,#mermaid-svg-jqvp8JpPNhnbp3qd .node polygon,#mermaid-svg-jqvp8JpPNhnbp3qd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jqvp8JpPNhnbp3qd .node .label{text-align:center;}#mermaid-svg-jqvp8JpPNhnbp3qd .node.clickable{cursor:pointer;}#mermaid-svg-jqvp8JpPNhnbp3qd .arrowheadPath{fill:#333333;}#mermaid-svg-jqvp8JpPNhnbp3qd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jqvp8JpPNhnbp3qd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jqvp8JpPNhnbp3qd .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-jqvp8JpPNhnbp3qd .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-jqvp8JpPNhnbp3qd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jqvp8JpPNhnbp3qd .cluster text{fill:#333;}#mermaid-svg-jqvp8JpPNhnbp3qd .cluster span{color:#333;}#mermaid-svg-jqvp8JpPNhnbp3qd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jqvp8JpPNhnbp3qd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}compose配置deploy: replicas: 5image: redis:6image: mysql:8负载均衡Web集群Web集群Redis缓存MySQL主从5. 高级技巧与优化
5.1 性能优化策略
#mermaid-svg-gsAUI1eEkb8IiESr {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gsAUI1eEkb8IiESr .error-icon{fill:#552222;}#mermaid-svg-gsAUI1eEkb8IiESr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gsAUI1eEkb8IiESr .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-gsAUI1eEkb8IiESr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gsAUI1eEkb8IiESr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gsAUI1eEkb8IiESr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gsAUI1eEkb8IiESr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gsAUI1eEkb8IiESr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gsAUI1eEkb8IiESr .marker.cross{stroke:#333333;}#mermaid-svg-gsAUI1eEkb8IiESr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gsAUI1eEkb8IiESr .mermaid-main-font{font-family:"trebuchet ms",verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-gsAUI1eEkb8IiESr .exclude-range{fill:#eeeeee;}#mermaid-svg-gsAUI1eEkb8IiESr .section{stroke:none;opacity:0.2;}#mermaid-svg-gsAUI1eEkb8IiESr .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-gsAUI1eEkb8IiESr .section2{fill:#fff400;}#mermaid-svg-gsAUI1eEkb8IiESr .section1,#mermaid-svg-gsAUI1eEkb8IiESr .section3{fill:white;opacity:0.2;}#mermaid-svg-gsAUI1eEkb8IiESr .sectionTitle0{fill:#333;}#mermaid-svg-gsAUI1eEkb8IiESr .sectionTitle1{fill:#333;}#mermaid-svg-gsAUI1eEkb8IiESr .sectionTitle2{fill:#333;}#mermaid-svg-gsAUI1eEkb8IiESr .sectionTitle3{fill:#333;}#mermaid-svg-gsAUI1eEkb8IiESr .sectionTitle{text-anchor:start;font-family:'trebuchet ms',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-gsAUI1eEkb8IiESr .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-gsAUI1eEkb8IiESr .grid .tick text{font-family:"trebuchet ms",verdana,arial,sans-serif;fill:#333;}#mermaid-svg-gsAUI1eEkb8IiESr .grid path{stroke-width:0;}#mermaid-svg-gsAUI1eEkb8IiESr .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-gsAUI1eEkb8IiESr .task{stroke-width:2;}#mermaid-svg-gsAUI1eEkb8IiESr .taskText{text-anchor:middle;font-family:'trebuchet ms',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-gsAUI1eEkb8IiESr .taskTextOutsideRight{fill:black;text-anchor:start;font-family:'trebuchet ms',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-gsAUI1eEkb8IiESr .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-gsAUI1eEkb8IiESr .task.clickable{cursor:pointer;}#mermaid-svg-gsAUI1eEkb8IiESr .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-gsAUI1eEkb8IiESr .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-gsAUI1eEkb8IiESr .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-gsAUI1eEkb8IiESr .taskText0,#mermaid-svg-gsAUI1eEkb8IiESr .taskText1,#mermaid-svg-gsAUI1eEkb8IiESr .taskText2,#mermaid-svg-gsAUI1eEkb8IiESr .taskText3{fill:white;}#mermaid-svg-gsAUI1eEkb8IiESr .task0,#mermaid-svg-gsAUI1eEkb8IiESr .task1,#mermaid-svg-gsAUI1eEkb8IiESr .task2,#mermaid-svg-gsAUI1eEkb8IiESr .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-gsAUI1eEkb8IiESr .taskTextOutside0,#mermaid-svg-gsAUI1eEkb8IiESr .taskTextOutside2{fill:black;}#mermaid-svg-gsAUI1eEkb8IiESr .taskTextOutside1,#mermaid-svg-gsAUI1eEkb8IiESr .taskTextOutside3{fill:black;}#mermaid-svg-gsAUI1eEkb8IiESr .active0,#mermaid-svg-gsAUI1eEkb8IiESr .active1,#mermaid-svg-gsAUI1eEkb8IiESr .active2,#mermaid-svg-gsAUI1eEkb8IiESr .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-gsAUI1eEkb8IiESr .activeText0,#mermaid-svg-gsAUI1eEkb8IiESr .activeText1,#mermaid-svg-gsAUI1eEkb8IiESr .activeText2,#mermaid-svg-gsAUI1eEkb8IiESr .activeText3{fill:black!important;}#mermaid-svg-gsAUI1eEkb8IiESr .done0,#mermaid-svg-gsAUI1eEkb8IiESr .done1,#mermaid-svg-gsAUI1eEkb8IiESr .done2,#mermaid-svg-gsAUI1eEkb8IiESr .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-gsAUI1eEkb8IiESr .doneText0,#mermaid-svg-gsAUI1eEkb8IiESr .doneText1,#mermaid-svg-gsAUI1eEkb8IiESr .doneText2,#mermaid-svg-gsAUI1eEkb8IiESr .doneText3{fill:black!important;}#mermaid-svg-gsAUI1eEkb8IiESr .crit0,#mermaid-svg-gsAUI1eEkb8IiESr .crit1,#mermaid-svg-gsAUI1eEkb8IiESr .crit2,#mermaid-svg-gsAUI1eEkb8IiESr .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-gsAUI1eEkb8IiESr .activeCrit0,#mermaid-svg-gsAUI1eEkb8IiESr .activeCrit1,#mermaid-svg-gsAUI1eEkb8IiESr .activeCrit2,#mermaid-svg-gsAUI1eEkb8IiESr .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-gsAUI1eEkb8IiESr .doneCrit0,#mermaid-svg-gsAUI1eEkb8IiESr .doneCrit1,#mermaid-svg-gsAUI1eEkb8IiESr .doneCrit2,#mermaid-svg-gsAUI1eEkb8IiESr .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-gsAUI1eEkb8IiESr .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-gsAUI1eEkb8IiESr .milestoneText{font-style:italic;}#mermaid-svg-gsAUI1eEkb8IiESr .doneCritText0,#mermaid-svg-gsAUI1eEkb8IiESr .doneCritText1,#mermaid-svg-gsAUI1eEkb8IiESr .doneCritText2,#mermaid-svg-gsAUI1eEkb8IiESr .doneCritText3{fill:black!important;}#mermaid-svg-gsAUI1eEkb8IiESr .activeCritText0,#mermaid-svg-gsAUI1eEkb8IiESr .activeCritText1,#mermaid-svg-gsAUI1eEkb8IiESr .activeCritText2,#mermaid-svg-gsAUI1eEkb8IiESr .activeCritText3{fill:black!important;}#mermaid-svg-gsAUI1eEkb8IiESr .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:'trebuchet ms',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-gsAUI1eEkb8IiESr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}051015202530资源限制 健康检查 分布式部署 自动扩展 基础优化高级优化优化实施路径关键配置示例
services:webapp:deploy:resources:limits:cpus: 0.50memory: 512Mrestart_policy:condition: on-failurehealthcheck:test: [CMD, curl, -f, http://localhost]interval: 30s5.2 安全最佳实践 6. 实战案例解析
6.1 微服务架构部署
version: 3.8services:gateway:image: nginx-plusports: [80:80, 443:443]depends_on: [auth, products]auth:build: ./auth-serviceenvironment:JWT_SECRET: ${JWT_SECRET}networks: [backend]products:build: ./product-servicenetworks: [backend, cache]redis:image: redis:6networks: [cache]volumes: [redis-data:/data]networks:backend:cache:volumes:redis-data:6.2 CI/CD 集成流程
#mermaid-svg-NHm3FvVTkw64I5Oq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NHm3FvVTkw64I5Oq .error-icon{fill:#552222;}#mermaid-svg-NHm3FvVTkw64I5Oq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NHm3FvVTkw64I5Oq .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-NHm3FvVTkw64I5Oq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NHm3FvVTkw64I5Oq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NHm3FvVTkw64I5Oq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NHm3FvVTkw64I5Oq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NHm3FvVTkw64I5Oq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NHm3FvVTkw64I5Oq .marker.cross{stroke:#333333;}#mermaid-svg-NHm3FvVTkw64I5Oq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NHm3FvVTkw64I5Oq .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-NHm3FvVTkw64I5Oq text.actortspan{fill:black;stroke:none;}#mermaid-svg-NHm3FvVTkw64I5Oq .actor-line{stroke:grey;}#mermaid-svg-NHm3FvVTkw64I5Oq .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-NHm3FvVTkw64I5Oq .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-NHm3FvVTkw64I5Oq #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-NHm3FvVTkw64I5Oq .sequenceNumber{fill:white;}#mermaid-svg-NHm3FvVTkw64I5Oq #sequencenumber{fill:#333;}#mermaid-svg-NHm3FvVTkw64I5Oq #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-NHm3FvVTkw64I5Oq .messageText{fill:#333;stroke:#333;}#mermaid-svg-NHm3FvVTkw64I5Oq .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-NHm3FvVTkw64I5Oq .labelText,#mermaid-svg-NHm3FvVTkw64I5Oq .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-NHm3FvVTkw64I5Oq .loopText,#mermaid-svg-NHm3FvVTkw64I5Oq .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-NHm3FvVTkw64I5Oq .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-NHm3FvVTkw64I5Oq .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-NHm3FvVTkw64I5Oq .noteText,#mermaid-svg-NHm3FvVTkw64I5Oq .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-NHm3FvVTkw64I5Oq .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-NHm3FvVTkw64I5Oq .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-NHm3FvVTkw64I5Oq .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-NHm3FvVTkw64I5Oq .actorPopupMenu{position:absolute;}#mermaid-svg-NHm3FvVTkw64I5Oq .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-NHm3FvVTkw64I5Oq .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-NHm3FvVTkw64I5Oq .actor-man circle,#mermaid-svg-NHm3FvVTkw64I5Oq line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-NHm3FvVTkw64I5Oq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}开发者Git仓库CI服务器镜像仓库生产服务器提交代码触发构建运行测试构建推送镜像执行部署命令拉取最新镜像docker-compose up -d开发者Git仓库CI服务器镜像仓库生产服务器7. 常见问题排查
7.1 问题诊断流程图
#mermaid-svg-AUUh4X82E5QoVX7z {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AUUh4X82E5QoVX7z .error-icon{fill:#552222;}#mermaid-svg-AUUh4X82E5QoVX7z .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AUUh4X82E5QoVX7z .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-AUUh4X82E5QoVX7z .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AUUh4X82E5QoVX7z .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AUUh4X82E5QoVX7z .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AUUh4X82E5QoVX7z .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AUUh4X82E5QoVX7z .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AUUh4X82E5QoVX7z .marker.cross{stroke:#333333;}#mermaid-svg-AUUh4X82E5QoVX7z svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AUUh4X82E5QoVX7z .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-AUUh4X82E5QoVX7z .cluster-label text{fill:#333;}#mermaid-svg-AUUh4X82E5QoVX7z .cluster-label span{color:#333;}#mermaid-svg-AUUh4X82E5QoVX7z .label text,#mermaid-svg-AUUh4X82E5QoVX7z span{fill:#333;color:#333;}#mermaid-svg-AUUh4X82E5QoVX7z .node rect,#mermaid-svg-AUUh4X82E5QoVX7z .node circle,#mermaid-svg-AUUh4X82E5QoVX7z .node ellipse,#mermaid-svg-AUUh4X82E5QoVX7z .node polygon,#mermaid-svg-AUUh4X82E5QoVX7z .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AUUh4X82E5QoVX7z .node .label{text-align:center;}#mermaid-svg-AUUh4X82E5QoVX7z .node.clickable{cursor:pointer;}#mermaid-svg-AUUh4X82E5QoVX7z .arrowheadPath{fill:#333333;}#mermaid-svg-AUUh4X82E5QoVX7z .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-AUUh4X82E5QoVX7z .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-AUUh4X82E5QoVX7z .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-AUUh4X82E5QoVX7z .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-AUUh4X82E5QoVX7z .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-AUUh4X82E5QoVX7z .cluster text{fill:#333;}#mermaid-svg-AUUh4X82E5QoVX7z .cluster span{color:#333;}#mermaid-svg-AUUh4X82E5QoVX7z div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-AUUh4X82E5QoVX7z :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}否是是否诊断命令docker-compose psdocker-compose logsdocker-compose exec service ping服务异常检查服务状态容器运行中?查看容器日志测试服务连通性网络问题?检查网络配置检查应用日志分析启动错误验证DNS解析排查应用异常8. 版本演进与趋势
8.1 Compose特性发展 8.2 未来技术方向
云原生集成更好支持Kubernetes智能扩展基于指标的自动伸缩策略即代码内置安全合规检查混合环境统一管理本地和云资源
通过本指南您已掌握从基础到高级的Docker Compose技术栈。实际应用中建议
开发环境使用override方便调试生产环境严格配置资源限制结合监控工具实现自动化运维 The End点点关注收藏不迷路