大家好,我是码剑客。作为后端与运维日常必备工具,Docker Compose 是多容器编排的核心,本文把高频配置、字段含义、避坑要点、完整示例一次性讲透,知识点密集、结构清晰,直接收藏复用。
一、Docker Compose 核心概念
- 定义:通过
docker-compose.yml文件统一编排多个容器服务,实现一键启动、停止、重启、扩容整套应用环境; - 核心优势:环境一致性、配置版本化、多服务依赖管理、简化运维命令;
- 核心常用命令:
docker-compose up -d后台启动服务docker-compose down停止并删除容器、网络docker-compose logs -f查看实时日志
二、完整标准配置结构(全字段覆盖)
services:
app:
image:
build:
context:
dockerfile:
ports:
volumes:
environment:
depends_on:
restart:
command:
networks:
networks:
volumes:
三、高频核心配置字段详解
1. 镜像与构建配置
image: mysql:8.0:指定镜像版本,规避自动升级风险;build.context: ./:指定构建上下文目录;build.dockerfile: Dockerfile.prod:指定自定义构建文件。
2. 端口与网络配置
ports: ["8080:80"]:主机与容器端口映射,对外提供访问;expose: [3306]:仅容器内部互通,不暴露外网;networks:自定义网桥,实现服务隔离通信。
3. 数据持久化配置
volumes: [./data:/var/lib/mysql]:目录挂载持久化,容器销毁数据不丢失;- 命名卷:全局可复用,适合生产环境。
4. 环境与依赖配置
environment:直接配置环境变量;env_file: .env:加载外部配置文件,保护账号密码;depends_on:控制服务启动顺序,避免应用先于数据库启动报错。
5. 运行重启策略
restart: always:异常自动重启(生产首选);restart: on-failure:仅崩溃时重启;restart: unless-stopped:手动停止后不再重启。
四、生产级完整示例(SpringBoot+MySQL+Redis)
services:
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: app_db
volumes:
- mysql-data:/var/lib/mysql
restart: always
networks:
- app-network
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
restart: always
networks:
- app-network
app:
build: ./
ports:
- "8080:8080"
depends_on:
- mysql
- redis
restart: always
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
mysql-data:
redis-data:
五、告别手写YAML,一键生成Docker配置
Docker Compose 语法严格、缩进敏感,手写极易出错,反复调试非常耗时。
我是码剑客,在我的同名网站中,内置了在线可视化 Docker Compose 配置生成工具,无需记忆语法、不用手动写缩进,可视化表单填写,实时生成标准配置,支持多场景模板、一键复制,开发部署效率直接拉满。