当前位置: 首页 > 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 验证文件语法。

http://www.xdnf.cn/news/354763.html

相关文章:

  • Java启动和停止jar文件sh脚本:自适应文件名方式启停 + 写死环境 启动;自适应文件名方式 + 命令行传参切换环境 启动
  • Spring、SpringMVC、SpringBoot、SpringCloud 联系与区别
  • Java、javax 和 Jakarta有什么区别?
  • 《P1177 【模板】排序》
  • MySQL 性能调优:从执行计划到硬件瓶颈
  • 人力资源管理系统如何有效提高招聘效率?
  • 若依定制pdf生成实战
  • neo4j图数据库基本概念和向量使用
  • AI云防护真的可以防攻击?你的服务器用群联AI云防护吗?
  • ESD防护ANT静电防护方案
  • 学前数学思维:初始行程
  • Docker常见疑难杂症解决指南:深入解析与实战解决方案
  • Spring 框架实战:如何实现高效的依赖注入,优化项目结构?
  • UE5骨骼插槽蓝图
  • 了解Hadoop
  • 互联网大厂Java求职面试:基于AI的实时异常检测系统设计与实现
  • PCB设计时如何选择USART、SPI、I2C
  • 【图像大模型】Stable Diffusion Web UI:深度解析与实战指南
  • 单调栈模版型题目(3)
  • 第20篇:Linux设备驱动程序入门<七>
  • 8b10b编解码仿真
  • 前端自学入门:HTML 基础详解与学习路线指引
  • WebRTC 源码原生端Demo入门-1
  • 【大模型ChatGPT+ArcGIS】数据处理、空间分析、可视化及多案例综合应用
  • 鸿蒙电脑:五年铸剑开新篇,国产操作系统新引擎
  • 机器人运动控制技术简介
  • SpringAI特性
  • Vscode 顶部Menu(菜单)栏消失如何恢复
  • 操作系统面试题(3)
  • C++之运算符重载实例(日期类实现)