以下是关于 Docker Compose 的详细使用指南和核心功能解析:
Docker Compose 是用于 定义和编排多容器应用 的工具,通过 YAML 文件实现以下功能:
• 一键启停:用单条命令管理多个关联容器
• 环境隔离:为每个服务创建独立运行环境
• 依赖管理:自动处理服务启动顺序
• 配置复用:标准化开发/测试/生产环境
# Linux 系统安装(需先安装 Docker)
sudo apt update
sudo apt install docker-compose-plugin
# 验证安装
docker compose version
创建 docker-compose.yml
文件:
version: '3.8'
services:
webapp:
image: your-webapp:latest
ports:
- "8080:80"
depends_on:
- redis
- mysql
redis:
image: redis:alpine
ports:
- "6379:6379"
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
命令 | 功能 | 示例 |
---|---|---|
up |
启动所有服务 | docker compose up -d |
down |
停止并删除容器 | docker compose down -v |
ps |
查看运行状态 | docker compose ps |
logs |
查看日志 | docker compose logs -f web |
build |
构建自定义镜像 | docker compose build |
services:
frontend:
image: nginx:alpine
ports:
- "80:80"
backend:
build: ./backend
environment:
- DB_HOST=mysql
mysql:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
services:
frontend:
networks:
- front-tier
backend:
networks:
- front-tier
- back-tier
volumes:
db_data:
driver: local
services:
mysql:
volumes:
- db_data:/var/lib/mysql
- ./mysql/conf.d:/etc/mysql/conf.d
# 使用 .env 文件
environment:
DB_PASSWORD: ${DB_SECRET}
# 命令行覆盖
docker compose -e DB_SECRET=newpass up
services:
api:
depends_on:
redis:
condition: service_healthy
redis:
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
# docker-compose.prod.yml
services:
web:
deploy:
replicas: 3
resources:
limits:
cpus: "0.5"
memory: 512M
# 启动生产环境
docker compose -f docker-compose.yml -f docker-compose.prod.yml up
# 水平扩展实例
docker compose up -d --scale web=3
# 动态调整资源
docker compose up -d --compatibility
secrets:
db_password:
file: ./secrets/db_password.txt
services:
mysql:
secrets:
- db_password
# .gitlab-ci.yml
stages:
- test
- deploy
compose-test:
stage: test
script:
- docker compose -f docker-compose.test.yml up -d
- run-tests.sh
- docker compose down
production-deploy:
stage: deploy
script:
- docker compose -f docker-compose.prod.yml up -d
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana
ports:
- "3000:3000"
Portainer:
docker compose -f portainer-compose.yml up -d
# portainer-compose.yml
services:
portainer:
image: portainer/portainer-ce
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Docker Compose UI:
docker run -d -p 5000:5000 --privileged -v /var/run/docker.sock:/var/run/docker.sock frooodle/saint-pablo
services:
app:
build:
context: .
cache_from:
- myapp:latest
deploy:
resources:
limits:
cpus: '0.75'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M
通过合理运用这些功能,Docker Compose 可以显著提升容器化应用的开发效率和运维质量。建议从简单配置开始,逐步应用高级特性,最终实现全生命周期容器化管理。