前言
Docker Compose 是定义和运行多容器 Docker 应用的工具。本文通过一个完整的 Web 应用示例,讲解 Compose 的核心用法和最佳实践。
一、项目结构
myapp/
├── docker-compose.yml
├── nginx/
│ └── default.conf
├── php/
│ └── Dockerfile
├── src/
│ └── index.php
└── mysql/
└── init.sql二、完整的 LNMP 编排
version: "3.8"
services:
nginx:
image: nginx:1.25-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./src:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
restart: unless-stopped
networks:
- app-network
php:
build:
context: ./php
dockerfile: Dockerfile
volumes:
- ./src:/var/www/html
environment:
- DB_HOST=mysql
- DB_NAME=myapp
- DB_USER=root
- DB_PASS=secret
networks:
- app-network
mysql:
image: mysql:8.0
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
- ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: myapp
networks:
- app-network
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
networks:
- app-network
volumes:
mysql-data:
redis-data:
networks:
app-network:
driver: bridge三、常用命令
# 启动所有服务
docker-compose up -d
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs -f nginx
# 重新构建
docker-compose build --no-cache php
# 停止并删除容器
docker-compose down
# 停止并删除容器和数据卷
docker-compose down -v四、进阶技巧
4.1 健康检查
mysql:
image: mysql:8.0
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 3
start_period: 30s4.2 资源限制
php:
build: ./php
deploy:
resources:
limits:
cpus: "2"
memory: 512M
reservations:
memory: 256M4.3 按需启动依赖
php:
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_started五、总结
Docker Compose 让多容器应用的定义、运行和管理变得简单。通过合理的目录结构、网络隔离、数据卷管理和健康检查,可以构建出生产级的容器编排方案。
评论 (0)