Docker 和 Docker Compose 的关系

1. Docker 和 Docker Compose 的关系

Docker 和 Docker Compose 是 容器化 相关的工具,Docker Compose 是 Docker 的一个补充工具 ,用于管理 多容器应用。它们的关系如下:

  • Docker 是一个容器管理工具,负责 构建、运行、分发 容器。
  • Docker Compose 是一个 编排工具 ,用于 定义和管理多个 Docker 容器 ,通常用于 微服务架构多个服务的协调部署

可以简单理解:

  • Docker → 运行 单个容器 (比如 docker run 命令)。
  • Docker Compose → 运行 多个容器 (比如 docker-compose up 命令)。

2. Docker Compose 介绍

Docker Compose 通过 docker-compose.yml 文件 定义多个容器的配置,并可以一键启动或管理多个容器。

使用场景
  • 微服务架构 :如 Web 服务 + 数据库 + Redis,Compose 可以一键启动所有容器。
  • 开发环境 :团队成员可以通过 docker-compose up 快速启动完整的开发环境。
  • 自动化部署:用于本地测试、CI/CD 管道(如 GitHub Actions、Jenkins)。

3. Docker vs. Docker Compose 对比

功能 Docker Docker Compose
核心作用 运行单个容器 管理多个容器
运行方式 docker run docker-compose up
适用场景 单服务(如 nginx 多服务(如 nginx + MySQL + Redis
配置方式 命令行参数 docker-compose.yml 文件
适合场景 测试单个容器 运行微服务架构

4. 使用 Docker Compose 示例

假设你要运行一个 Web 服务(Nginx)+ 数据库(MySQL) 的环境,可以使用 docker-compose.yml 轻松管理多个容器。

4.1 编写 docker-compose.yml
复制代码
version: '3'  # 版本号
services:
  web:
    image: nginx:latest  # 使用 Nginx 作为 Web 服务器
    ports:
      - "8080:80"  # 访问端口映射
    depends_on:
      - db  # 依赖数据库服务
  db:
    image: mysql:5.7  # 使用 MySQL 5.7
    environment:
      MYSQL_ROOT_PASSWORD: example  # 设置 MySQL root 密码
    ports:
      - "3306:3306"
4.2 启动服务

docker-compose.yml 所在目录运行:

复制代码
docker-compose up -d  # 以后台模式启动

💡 这样 Nginx 和 MySQL 就会同时启动,并且 Nginx 可以直接访问 MySQL,而不需要手动创建和管理容器。


5. Docker Compose 的核心命令

命令 作用
docker-compose up -d 启动所有服务(-d 表示后台运行)
docker-compose down 停止并删除所有服务
docker-compose ps 查看正在运行的服务
docker-compose logs 查看所有容器日志
docker-compose restart 重启所有容器
docker-compose exec <service> 进入指定服务容器,如 docker-compose exec web bash

6. 总结

对比项 Docker Docker Compose
管理单个容器 ✅ 适合 ❌ 不适合
管理多个容器 ❌ 不适合 ✅ 适合
适用于微服务架构 ❌ 较难管理 ✅ 适合
配置方式 命令行参数 docker-compose.yml 文件
适用场景 运行单个应用 运行多个服务(如 Web + 数据库)

🚀 如果你只需要运行一个单独的 Nginx 或 MySQL,直接用 docker run 就够了。

🚀 如果你要运行多个容器(如 Web + DB + Redis),就用 docker-compose up,更方便!

相关推荐
人工智能训练4 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
微露清风5 小时前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
阳光九叶草LXGZXJ6 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
小二李8 小时前
第11章 nestjs服务端开发:登录鉴权
运维·服务器
i建模8 小时前
如何在Arch Linux中重设忘记的root密码
linux·运维·服务器
chatexcel9 小时前
元空AI+Clawdbot:7×24 AI办公智能体新形态详解(长期上下文/自动化任务/工具粘合)
运维·人工智能·自动化
kida_yuan9 小时前
【Linux】运维实战笔记 — 我常用的方法与命令
linux·运维·笔记
小陈phd10 小时前
混合知识库搭建:本地Docker部署Neo4j图数据库与Milvus向量库
数据库·docker·neo4j
Wpa.wk11 小时前
容器编排 - 了解K8s(pod, deployment,service,lable等概念)
经验分享·测试工具·docker·云原生·容器·kubernetes
何中应11 小时前
vmware的linux虚拟机如何设置以命令行方式启动
linux·运维·服务器