Docker Compose 零基础完整教程:告别一堆 docker 命令,一键编排多容器服务
做 AI 项目、Web 开发、后端部署时,一套系统通常包含 Web 服务、数据库、缓存、中间件多个容器。如果只用原生docker run,每一个服务都要敲一长串参数,换电脑部署还要复制全部命令,极易出错。Docker Compose 就是官方配套多容器编排工具,仅靠一份docker-compose.yml配置文件,一条命令就能完成整套服务启动、停止、重建、清理。本文属于 AI 编程零基础系列第 16 讲,从基础概念、核心配置字段、高频命令到可直接复制实战案例完整讲解,新手看完就能上手本地开发与小型项目部署。
一、Docker 和 Docker Compose 核心区别,先搞懂定位
1. Docker 基础能力
Docker 是容器引擎,负责单个容器的创建、镜像打包、运行。
缺点:多服务项目需要多条超长docker run命令,端口、环境变量、挂载路径分散写,无法统一管理依赖启动顺序,换环境部署成本极高。
类比:单兵作战,一次只能启动一个容器,多个服务需要手动逐个指挥。
2. Docker Compose 核心作用
建立在 Docker 之上的编排工具,核心能力:
[*]使用 YAML 文件统一描述项目所有服务、端口、数据卷、网络、依赖;
[*]单条命令批量启停整套容器;
[*]自动创建项目专属内网,容器间直接用服务名通信;
[*]统一管理数据持久化、重启策略、环境配置。
类比:项目总指挥,一份配置管理全部服务,一键拉起整套开发环境。
适用场景
本地开发环境、测试环境、单机小型 AI 应用、前后端 + 数据库完整项目;大规模集群生产环境一般使用 K8s,Compose 更适合个人与小团队单机使用。
二、docker-compose.yml 四大顶层核心模块
标准配置文件由 4 大模块构成,services是重中之重:
[*]services:所有容器服务定义(Web、MySQL、Redis 等)
[*]volumes:持久化数据卷,容器删除数据库数据不丢失
[*]networks:自定义项目内网,容器互通隔离外部访问
[*]version(新版 V2 可省略):兼容版本,推荐 3.8 语法
services 高频核心字段详解(新手必背)
表格
配置字段作用说明标准示例
image直接拉取官方镜像image: mysql:8.0
build本地 Dockerfile 构建自定义镜像build: ./web
ports宿主机:容器端口映射- "5000:5000"
environment容器内环境变量- MYSQL_ROOT=123456
volumes目录 / 数据卷挂载- mysql-data:/var/lib/mysql
depends_on定义服务启动依赖,先启动依赖服务depends_on:
restart容器重启策略restart: always(异常自动重启)
command覆盖镜像默认启动命令command: redis-server --requirepass 123
healthcheck健康检测,等待服务就绪再启动依赖定时检测数据库是否可用
三、Docker Compose 高频实战命令大全
全部基于 V2 新版语法(命令中间带空格docker compose,非旧版横杠)
1. 启停项目核心命令
bash
# 前台启动,打印实时日志(调试用)
docker compose up
# 后台守护进程启动(开发部署首选)
docker compose up -d
# 构建镜像再后台启动
docker compose up --build -d
# 仅重启单个服务
docker compose restart web
# 停止所有容器,保留数据卷、镜像
docker compose stop
# 停止并删除容器、自定义网络(数据卷保留)
docker compose down
# 彻底清理:容器+网络+数据卷(谨慎操作,数据清空)
docker compose down -v
2. 查看、调试命令
bash
# 查看所有运行容器状态
docker compose ps
# 实时查看全部日志
docker compose logs -f
# 只查看web服务实时日志
docker compose logs -f web
# 进入容器内部终端调试
docker compose exec web bash
# 校验yml配置是否语法错误
docker compose config
四、零基础可直接复制实战案例:AI 开发常用 Flask+Redis
1. 项目目录结构
plaintext
flask-ai-demo/
├── docker-compose.yml# 核心配置文件
├── app.py # AI/后端主程序
└── requirements.txt # Python依赖包
2. docker-compose.yml 完整配置
yaml
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app# 本地代码挂载,修改无需重构建镜像
environment:
REDIS_HOST: redis
depends_on:
redis
restart: unless-stopped
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
restart: always
volumes:
redis-data:
3. 简单 AI 计数示例 app.py
python
from flask import Flask
import redis
app = Flask(__name__)
cache = redis.Redis(host="redis", port=6379)
@app.route("/")
def index():
count = cache.incr("visit_count")
return f"AI服务已访问 {count} 次"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
4. 一键启动项目
进入文件夹执行:
bash
docker compose up -d
浏览器访问 localhost:5000 即可运行整套带缓存的 AI Web 服务。
五、数据库完整实战:MySQL+Redis 开发环境
适合 AI 训练平台、数据管理后端直接复用
yaml
version: "3.8"
services:
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root123
- MYSQL_D=ai_db
volumes:
- mysql-data:/var/lib/mysql
restart: always
command: --default-authentication-plugin=mysql_native_password
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
restart: always
ai-web:
build: ./ai-server
ports:
- "8080:8080"
depends_on:
- mysql
- redis
volumes:
- ./code:/app
restart: unless-stopped
volumes:
mysql-data:
redis-data:
六、新手高频踩坑点与解决方案
[*]yml 文件缩进报错
YAML 严格依赖空格缩进,不能使用 Tab,层级对齐错误直接启动失败,推荐 VS Code 安装 YAML 插件实时校验。
[*]depends_on 只控制启动顺序,不等待服务就绪
数据库启动慢,后端先启动会连不上库,需要搭配healthcheck健康检测等待数据库就绪。
[*]down -v 清空数据卷
执行docker compose down -v会删除数据库持久化文件,本地开发尽量不带 - v 清理。
[*]容器间访问用服务名,不用localhost
Compose 内置内网,web 服务连接 mysql 直接写主机名mysql,不要用 127.0.0.1。
[*]新版 Docker 无需单独安装 Compose
Docker Desktop、新版 Linux Docker 已内置docker compose,无需单独下载二进制文件。
七、全文总结
Docker Compose 是本地 AI 开发、小型后端项目必备工具,核心价值就是一份配置替代几十条 docker 命令。
掌握三件核心内容即可上手:
[*]yml 四大模块与 image/ports/depends_on 等基础字段;
[*]up/down/logs/exec 日常高频命令;
[*]Flask+Redis、MySQL 完整实战模板直接复用。
对于 AI 从业者,本地大模型、向量库、Web 演示服务多容器环境,使用 Compose 一键部署,大幅降低环境搭建、换电脑迁移的时间成本。
页:
[1]