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

Docker Compose 的详细使用总结、常用命令及配置示例

以下是 Docker Compose 的详细使用总结、常用命令及配置示例,帮助您快速掌握这一容器编排工具。


一、Docker Compose 核心概念

  1. 定位:用于定义和管理多容器 Docker 应用,通过 YAML 文件配置服务、网络、卷等资源。
  2. 核心概念
    • 服务 (Service):一个容器的定义(镜像、端口、环境变量等)。
    • 项目 (Project):一组关联服务的集合,默认以当前目录名命名。
  3. 核心文件docker-compose.yml(或通过 -f 指定其他文件)。

二、Docker Compose 常用命令

1. 基础操作
命令作用常用参数
docker compose up创建并启动服务-d(后台运行)、--build(强制重建镜像)
docker compose down停止并删除所有资源-v(同时删除卷)、--rmi all(删除镜像)
docker compose build构建服务镜像--no-cache(禁用缓存)
docker compose logs查看日志-f(实时跟踪)、service_name(过滤服务)
2. 管理服务
命令作用
docker compose ps查看容器状态
docker compose start启动已停止的服务
docker compose stop停止运行中的服务
docker compose restart重启服务
docker compose exec <service> <cmd>在容器内执行命令(如 exec app sh
3. 调试与扩展
命令作用
docker compose config验证配置文件语法
docker compose top显示容器内进程
docker compose pull拉取服务的最新镜像
docker compose scale web=3扩展服务实例数量(需删除 depends_on

三、docker-compose.yml 配置详解

1. 基础结构
version: '3.8'  # 推荐使用 3.8+ 版本
services:service1:  # 服务名称image: nginx:alpine  # 使用现成镜像# 其他配置...service2:build: .  # 基于 Dockerfile 构建镜像# 其他配置...
volumes:  # 声明卷my_volume:
networks:  # 声明网络my_network:
2. 完整配置示例:Web + MySQL + Redis
version: '3.8'services:web:build: .ports:- "8000:8000"volumes:- .:/app- static_volume:/app/staticenvironment:- DEBUG=Trueenv_file:- .envdepends_on:- db- redisdb:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: rootpassMYSQL_DATABASE: app_dbvolumes:- mysql_data:/var/lib/mysqlhealthcheck:  # 健康检查test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]interval: 5stimeout: 3sretries: 5redis:image: redis:alpinevolumes:- redis_data:/datacommand: redis-server --requirepass yourpasswordvolumes:static_volume:mysql_data:redis_data:

四、关键配置项说明

1. 服务配置
  • build:构建镜像(优先于 image
    build:context: ./dir  # Dockerfile 所在目录dockerfile: Dockerfile.prodargs:  # 构建参数APP_VERSION: 1.0
    
  • ports:端口映射
    ports:- "80:80"         # 宿主机:容器- "443:443/tcp"   # 指定协议- "3000-3005:3000-3005"  # 范围映射
    
  • volumes:数据卷
    volumes:- /host/path:/container/path  # 绑定挂载- named_volume:/container/path  # 命名卷- config_file.conf:/app/config.conf:ro  # 只读挂载
    
2. 环境管理
  • environment:直接定义变量
    environment:- DB_HOST=db- DB_PORT=3306
    
  • env_file:从文件加载变量
    env_file:- .env- dev.env
    
3. 依赖与健康检查
  • depends_on:控制启动顺序
    depends_on:- db- redis
    
  • healthcheck:定义健康检查
    healthcheck:test: ["CMD-SHELL", "curl -f http://localhost/health || exit 1"]interval: 30stimeout: 10sretries: 3
    
4. 网络配置
services:frontend:networks:- frontendbackend:networks:- frontend- backendnetworks:frontend:driver: bridgebackend:driver: bridge

五、进阶使用技巧

1. 多环境配置
  • 开发环境:挂载代码目录,启用调试模式
  • 生产环境:使用构建好的镜像,限制资源
    # 合并多个配置文件
    docker compose -f docker-compose.yml -f docker-compose.prod.yml up
    
2. 资源限制
deploy:  # 需 Swarm 模式resources:limits:cpus: '0.5'memory: 512Mreservations:memory: 256M
3. 扩展服务
# 启动 3 个 web 实例
docker compose up -d --scale web=3

六、常见问题与解决

  1. 容器启动顺序问题

    • 使用 depends_on + healthcheck 确保依赖服务真正可用。
  2. 端口冲突

    • 检查宿主机端口占用,或让 Docker 自动分配端口:
      ports:- "3000"  # 容器 3000 端口映射到宿主机随机端口
      
  3. 数据持久化

    • 始终使用命名卷(named volume)保存数据库等关键数据。

通过合理配置 docker-compose.yml,您可以快速部署复杂的多容器应用。建议结合具体需求逐步完善配置,并善用 docker compose config 验证文件语法。

相关文章:

  • 数字经济时代下的消费行为变迁与经济学启示
  • 制造企业如何选择项目管理软件系统提高项目执行的效率和质量
  • Electron知识框架
  • Spring Cloud LoadBalancer (负载均衡)
  • MySQL 与 Elasticsearch 数据一致性方案
  • MTB图像配准算法实现
  • 订阅“科技爱好者周刊”,每周五与你相约科技前沿!
  • python 上海新闻爬虫, 上观新闻 + 腾讯新闻
  • Unity 点击按钮,打开 Windows 文件选择框,并加载图片
  • iOS创建Certificate证书、制作p12证书流程
  • Jsoup与HtmlUnit:两大Java爬虫工具对比解析
  • LeRobot 项目部署运行逻辑(五)——intelrealsense.py/configs.py
  • -bash: /usr/local/mysql/bin/mysqld: No such file or directory
  • uni-app 中的条件编译与跨端兼容
  • Windows 11家庭中文版Docker Desktop汉化全攻略
  • 【Ansible】模块详解
  • Android 项目中配置了多个 maven 仓库,但依赖还是下载失败,除了使用代理,还有其他方法吗?
  • MATLAB制作柱状图与条图:数据可视化的基础利器
  • [6-1] TIM定时中断 江协科技学习笔记(45个知识点)
  • React 第三十七节 Router 中 useOutlet Hook的使用介绍以及注意事项
  • 两部门部署中小学幼儿园教师招聘工作:吸纳更多高校毕业生从教
  • 青岛双星名人集团董事长发公开信称家人逼迫交出管理权?公司回应
  • 五一假期,新任杭州市委书记刘非到嘉兴南湖瞻仰红船
  • 南京大屠杀幸存者刘贵祥去世,享年95岁
  • 媒体:机票盲盒值不值得开?年轻人正用行为博弈的逻辑重构规则
  • 叙利亚多地遭以色列空袭