1. Docker Compose基础概念与安装配置
1.1 Docker Compose核心功能解析
Docker Compose是Docker官方推出的容器编排工具,它通过YAML格式的配置文件来定义和管理多容器应用。在实际项目中,我们经常会遇到需要同时部署数据库、Web服务器、缓存服务等多个组件的场景。传统手动管理这些容器不仅效率低下,还容易出错。而Docker Compose可以:
- 通过单一配置文件定义整个应用栈
- 自动处理容器间的网络连接
- 管理服务启动顺序和依赖关系
- 简化开发、测试和生产环境的一致性部署
我曾在多个Web项目中采用Docker Compose管理MySQL+PHP+Nginx的组合,相比手动操作效率提升了60%以上。特别是在团队协作时,只需共享一个docker-compose.yml文件,新成员就能快速搭建完整的开发环境。
1.2 安装与版本选择建议
在Ubuntu 22.04上安装Docker Compose的推荐方法:
bash复制# 先安装Docker引擎
sudo apt update
sudo apt install docker.io
# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
版本选择建议:
- 生产环境推荐使用v2.x稳定版
- 开发环境可以尝试最新版以获得新特性
- 避免使用已弃用的v1.x版本
重要提示:在Linux系统中安装后,需要将当前用户加入docker组才能免sudo运行:
sudo usermod -aG docker $USER
执行后需要注销重新登录生效
2. WordPress多容器应用实战部署
2.1 项目结构设计
典型的WordPress Docker Compose项目目录结构:
code复制wordpress-project/
├── docker-compose.yml
├── db-data/ # MySQL数据持久化目录
├── wp-content/ # WordPress主题和插件
└── nginx-conf/
└── default.conf # Nginx自定义配置
这种结构保证了:
- 配置与代码分离
- 数据持久化
- 易于版本控制
2.2 编写docker-compose.yml
以下是经过生产验证的WordPress配置方案:
yaml复制version: '3.8'
services:
db:
image: mysql:8.0
volumes:
- ./db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secure_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
restart: unless-stopped
networks:
- wp-network
wordpress:
image: wordpress:latest
depends_on:
- db
volumes:
- ./wp-content:/var/www/html/wp-content
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
WORDPRESS_DB_NAME: wordpress
ports:
- "8000:80"
restart: unless-stopped
networks:
- wp-network
nginx:
image: nginx:alpine
volumes:
- ./nginx-conf:/etc/nginx/conf.d
- ./wp-content:/var/www/html/wp-content
ports:
- "80:80"
depends_on:
- wordpress
restart: unless-stopped
networks:
- wp-network
networks:
wp-network:
driver: bridge
关键配置说明:
volumes:实现数据持久化,避免容器重启后数据丢失depends_on:控制服务启动顺序networks:创建专用网络确保容器间安全通信restart: unless-stopped:确保服务异常退出后自动恢复
2.3 启动与管理应用
启动整个应用栈:
bash复制docker-compose up -d
常用管理命令:
bash复制# 查看运行状态
docker-compose ps
# 查看服务日志
docker-compose logs -f wordpress
# 停止服务
docker-compose stop
# 完全移除(包括数据卷)
docker-compose down -v
3. 高级配置与优化技巧
3.1 资源限制与性能调优
在生产环境中,需要对容器资源进行限制:
yaml复制services:
wordpress:
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
memory: 256M
MySQL性能优化建议:
yaml复制db:
environment:
MYSQL_INNODB_BUFFER_POOL_SIZE: 256M
MYSQL_INNODB_LOG_FILE_SIZE: 64M
3.2 安全加固措施
- 使用非root用户运行容器:
yaml复制wordpress:
user: "1000:1000"
- 定期备份数据卷:
bash复制docker run --rm -v wordpress-project_db-data:/volume -v /backup:/backup alpine \
tar czf /backup/db-backup-$(date +%Y%m%d).tar.gz -C /volume ./
- 启用HTTPS:
yaml复制nginx:
ports:
- "443:443"
volumes:
- ./ssl-certs:/etc/nginx/ssl
4. 常见问题排查指南
4.1 数据库连接问题
症状:WordPress报错"建立数据库连接时出错"
排查步骤:
- 检查db服务是否运行:
docker-compose ps - 查看MySQL日志:
docker-compose logs db - 进入容器测试连接:
bash复制docker-compose exec db mysql -uwpuser -p
4.2 文件权限问题
症状:WordPress无法安装主题/插件
解决方案:
bash复制docker-compose exec wordpress chown -R www-data:www-data /var/www/html
4.3 性能优化检查清单
- 启用OPcache:
yaml复制wordpress:
environment:
PHP_OPCACHE_ENABLE: "1"
- 配置Nginx缓存:
nginx复制location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 30d;
add_header Cache-Control "public";
}
- 使用Redis对象缓存:
yaml复制services:
redis:
image: redis:alpine
wordpress:
environment:
WORDPRESS_REDIS_HOST: redis
