当前位置: 首页 > news >正文

第五部分-DockerCompose——22. Compose 基础

22. Compose 基础

1. Docker Compose 概述

Docker Compose 是定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件配置应用的服务、网络和卷,然后使用一个命令启动所有服务。

┌─────────────────────────────────────────────────────────────┐ │ Docker Compose 架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ docker-compose.yml │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ version: '3.8' │ │ │ │ services: │ │ │ │ web: │ │ │ │ image: nginx │ │ │ │ api: │ │ │ │ build: ./api │ │ │ │ db: │ │ │ │ image: postgres │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ docker-compose up │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ┌─────────────────┼─────────────────┐ │ │ ▼ ▼ ▼ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ web │ │ api │ │ db │ │ │ │ nginx │ │ myapi │ │ postgres │ │ │ └───────────┘ └───────────┘ └───────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘

2. 安装 Compose

2.1 Linux 安装

# 下载最新版本sudocurl-L"https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose# 添加执行权限sudochmod+x /usr/local/bin/docker-compose# 验证安装docker-compose--version# 安装补全(可选)sudocurl-Lhttps://raw.githubusercontent.com/docker/compose/$(docker-composeversion--short)/contrib/completion/bash/docker-compose-o/etc/bash_completion.d/docker-compose

2.2 macOS/Windows

Docker Desktop 已包含 Compose,无需单独安装。

# 验证docker-compose--version

3. Compose 文件版本

版本说明兼容性
2.x旧版,已废弃Docker 1.10+
3.x当前推荐Docker 1.13+
3.8最新稳定Docker 19.03+
# 声明版本version:'3.8'

4. 基础配置文件

4.1 简单示例

# docker-compose.ymlversion:'3.8'services:web:image:nginx:alpineports:-"8080:80"redis:image:redis:alpine

4.2 更完整的示例

version:'3.8'services:web:image:nginx:alpinecontainer_name:web-serverports:-"8080:80"volumes:-./html:/usr/share/nginx/htmlnetworks:-frontendrestart:alwaysredis:image:redis:alpinecontainer_name:redis-cacheports:-"6379:6379"volumes:-redis-data:/datanetworks:-backendrestart:alwaysnetworks:frontend:backend:volumes:redis-data:

5. 核心命令

5.1 基本命令

# 启动服务(前台)docker-composeup# 启动服务(后台)docker-composeup-d# 停止服务docker-composedown# 停止并删除容器、网络(保留卷)docker-composedown# 停止并删除所有(包括卷)docker-composedown-v# 查看运行状态docker-composeps# 查看日志docker-composelogsdocker-composelogs-fwebdocker-composelogs--tail100

5.2 服务管理

# 启动特定服务docker-composeup-dweb# 停止特定服务docker-composestop web# 重启服务docker-composerestart web# 重启所有服务docker-composerestart# 暂停服务docker-composepause web# 恢复服务docker-composeunpause web

5.3 扩缩容

# 启动多个实例docker-composeup-d--scaleweb=3# 查看实例docker-composeps

6. 服务配置详解

6.1 镜像配置

services:# 使用已有镜像web:image:nginx:alpine# 从 Dockerfile 构建api:build:./apiimage:myapi:latest# 指定 Dockerfileapp:build:context:.dockerfile:Dockerfile.prod# 构建参数builder:build:context:.args:NODE_VERSION:14BUILD_ENV:production

6.2 端口配置

services:web:ports:-"8080:80"# 主机:容器-"8081:80"# 多端口-"80"# 随机端口-"127.0.0.1:8080:80"# 绑定 IP-"8080-8082:80-82"# 端口范围-"53:53/udp"# UDP 端口

6.3 环境变量

services:db:image:mysql:8.0environment:MYSQL_ROOT_PASSWORD:root123MYSQL_DATABASE:mydbMYSQL_USER:userMYSQL_PASSWORD:password# 或使用数组格式environment:-MYSQL_ROOT_PASSWORD=root123-MYSQL_DATABASE=mydb# 从文件加载env_file:-.env-./config/db.env

6.4 卷配置

services:app:volumes:# 命名卷-app-data:/app/data# 绑定挂载-./code:/app/code# 只读-./config:/app/config:ro# 指定路径-/host/path:/container/pathvolumes:app-data:

7. 网络配置

version:'3.8'services:web:image:nginxnetworks:-frontendapi:image:myapinetworks:-frontend-backenddb:image:postgresnetworks:-backendnetworks:frontend:driver:bridgebackend:driver:bridgeipam:config:-subnet:10.10.0.0/16gateway:10.10.0.1

8. 依赖关系

services:db:image:postgreshealthcheck:test:["CMD","pg_isready"]interval:10stimeout:5sretries:5redis:image:redisapp:image:myappdepends_on:db:condition:service_healthyredis:condition:service_started

9. 资源限制

services:app:image:myappdeploy:resources:limits:cpus:'0.5'memory:512Mreservations:cpus:'0.25'memory:256M# swarm 模式deploy:replicas:3update_config:parallelism:2delay:10srestart_policy:condition:on-failure

10. 完整实战示例

10.1 LEMP 栈配置

version:'3.8'services:nginx:image:nginx:alpinecontainer_name:lemp-nginxports:-"80:80"volumes:-./html:/var/www/html-./nginx.conf:/etc/nginx/conf.d/default.confdepends_on:-phpnetworks:-lemp-netphp:image:php:8.0-fpm-alpinecontainer_name:lemp-phpvolumes:-./html:/var/www/htmlnetworks:-lemp-netmysql:image:mysql:8.0container_name:lemp-mysqlenvironment:MYSQL_ROOT_PASSWORD:root123MYSQL_DATABASE:lemp_dbvolumes:-mysql-data:/var/lib/mysqlnetworks:-lemp-netnetworks:lemp-net:driver:bridgevolumes:mysql-data:

10.2 启动命令

# 启动服务docker-composeup-d# 查看状态docker-composeps# 查看日志docker-composelogs-f# 进入 PHP 容器docker-composeexecphpbash# 停止服务docker-composedown# 停止并清理docker-composedown-v

11. 常用命令速查

命令说明
docker-compose up -d后台启动
docker-compose down停止并删除
docker-compose ps查看状态
docker-compose logs查看日志
docker-compose exec执行命令
docker-compose restart重启服务
docker-compose build构建镜像
docker-compose pull拉取镜像
docker-compose config验证配置

12. 常见问题

Q1: Compose 和 Docker 命令的区别?

Compose 用于多容器编排,Docker 命令用于单容器。

Q2: 如何升级 Compose?

重新下载二进制文件替换即可。

Q3: Compose 文件支持多环境吗?

支持,可使用多个 compose 文件覆盖配置。

13. 小结

  • Compose定义和运行多容器应用
  • 使用YAML文件配置服务
  • 一个命令启动所有服务
  • 支持构建、网络、卷配置
  • 依赖管理控制启动顺序
  • 资源限制控制服务资源
  • 适合开发、测试和 CI/CD

http://www.jsqmd.com/news/796666/

相关文章:

  • 5 个子代理 + 1个 Chrome:Codex 把多人协作测试做成了内置能力
  • 2026年太原高考复读与全日制辅导机构深度横评:宏楼教育官方对接指南 - 企业名录优选推荐
  • 如何30分钟掌握Windows网络性能测试:iperf3完全兼容指南
  • 手把手教你:用SonoffLAN插件将易微联智能插座接入Home Assistant(含devicekey获取与常见报错解决)
  • 旧电视盒子改造指南:零成本打造家庭Linux服务器
  • Linux集群计算:从Beowulf到现代超算的演进
  • Spring Boot 菜单无限层级,别再只会用 parent_id 了!多种建设方案?
  • 2026衢州本地干洗大比拼,权威排名新鲜出炉! - 速递信息
  • 南昌婚纱照排名 2026 版:5 大品牌风格全解析,备婚新人精准选店指南 - 江湖评测
  • Zotero Duplicates Merger终极指南:3分钟彻底告别文献库重复烦恼
  • 终极Windows界面定制指南:ExplorerPatcher完全教程
  • 从敲代码到调度 Agent:Claude Code 创始人不再写代码之后,我们该如何理解“程序员”
  • MATLAB bandpass函数实战:从信号分离到滤波器设计
  • 5步快速备份微博到PDF:Speechless终极免费备份工具指南
  • 供应链数字化服务商如何用CRM提升B2B销售管理效率
  • Ajax技术和Axois工具库
  • SteamAutoCrack:三步完成Steam游戏自动破解的终极指南
  • 2026年3月 电子学会青少年软件编程机器人技术三级等级考试试卷真题【理论综合】
  • 2026欧洲名义雇主EOR服务商优选,海外人力资源服务商助力全球雇佣无忧 - 品牌2026
  • 交换机端口隔离:从原理到实战,构建安全高效的二层网络
  • PX4飞控的“隐藏技能”:拆解ESP8266 WiFi数传如何变身TCP/IP网关
  • 有防晒黑的防晒霜吗?这5款防晒易黑体质用了狂喜 - 全网最美
  • 三分钟学会免费B站视频解析:bilibili-parse终极使用指南
  • BatchNorm2d实战解析:从参数配置到训练/推理模式切换的避坑指南
  • 2026年湖南高端门窗定制:系统门窗与断桥铝门窗深度横评指南 - 年度推荐企业名录
  • 2026德国名义雇主EOR服务商优选,海外人力资源服务商助力全球雇佣无忧 - 品牌2026
  • 从图文对到通用视觉:CLIP如何用对比学习重塑多模态预训练范式
  • 3步轻松播放英雄联盟回放:ROFL-Player完整使用指南
  • 【NotebookLM vs Notion AI终极对决】:20年AI工具实战专家亲测的5大核心维度深度横评(附决策速查表)
  • 基于SSM框架的童装购买平台微信小程序(30286)