用Docker Compose一键部署WordPress + MySQL
一、为什么需要Docker Compose?
假设你要同时启动一个Web应用和一个数据库,手动操作可能是这样的:
-
先启动数据库容器,设置密码、挂载数据卷。
-
再启动Web容器,配置环境变量链接数据库。
-
重复操作时,每次都要敲一堆命令,容易出错。
Docker Compose 就像一份“菜单”,把多个容器的配置写在一个文件里,一键启动所有服务。
它的核心价值:告别碎片化命令,用声明式配置管理多容器应用!
二、实战:用Docker Compose部署WordPress
1. 准备工作
-
安装Docker和Docker Compose(官方安装指南)。
-
创建一个项目目录:
mkdir my-wordpress && cd my-wordpress
2. 编写docker-compose.yml
创建一个文件 docker-compose.yml,内容如下:
version: '3.8' services: # 数据库服务 db: image: mysql:8.0 volumes: - db_data:/var/lib/mysql # 持久化数据 environment: MYSQL_ROOT_PASSWORD: 1qaz@WSX # 设置root密码 MYSQL_DATABASE: wordpress MYSQL_USER: wpuser MYSQL_PASSWORD: wppass restart: always # 容器崩溃自动重启 networks: - wp-network # WordPress服务 wordpress: depends_on: # 依赖db服务先启动 - db image: wordpress:latest ports: - "8000:80" # 映射本地8000端口到容器80端口 environment: WORDPRESS_DB_HOST: db:3306 # 通过服务名连接数据库 WORDPRESS_DB_USER: wpuser WORDPRESS_DB_PASSWORD: wppass WORDPRESS_DB_NAME: wordpress volumes: - wp_data:/var/www/html # 持久化网站数据 restart: always networks: - wp-network # 定义网络和数据卷 volumes: db_data: # 数据库数据卷 wp_data: # WordPress数据卷 networks: wp-network: # 自定义网络,容器间通过服务名通信
代码解析:
-
services:定义两个服务 db(MySQL)和 wordpress。
-
volumes:挂载数据卷,即使容器删除,数据也不会丢失。
-
networks:自定义网络,让两个容器通过服务名(如 db)直接通信。
-
depends_on:确保数据库先启动,再启动WordPress。
三、一键启动所有服务
# 进入项目目录,执行命令: docker-compose up -d
查看运行状态:
docker-compose ps
四、访问你的WordPress网站
打开浏览器访问:http://你的服务器IP:8000,你会看到WordPress安装界面!
按照提示设置站点标题、管理员账号,就像使用普通WordPress一样。(这个是安装好的)
为什么能直接访问数据库?
-
WordPress容器通过服务名 db 连接到MySQL,不需要知道IP。
-
这一切都由Docker Compose自动处理!
五、管理服务:常用命令汇总
# 停止并删除所有容器(保留数据卷) docker-compose down
# 停止容器但不删除 docker-compose stop # 开启容器 docker-compose start
# 查看容器日志(调试必备) docker-compose logs -f wordpress # 进入数据库容器执行命令 docker-compose exec db mysql -u root -p # 输入密码 1qaz@WSX # 更新配置后重新部署 docker-compose up -d --force-recreate
六、自定义配置:修改端口或密码
如果想换端口或修改数据库密码:
-
编辑 docker-compose.yml 中的 ports 或 environment 部分。
-
重新运行 docker-compose up -d。
将WordPress端口改为8080:
七、常见问题与解决
1. 端口冲突(比如8000被占用)
-
解决:修改 docker-compose.yml 中的 ports,例如改为 "8080:80"。
-
检查端口占用:
lsof -i :8000
2. 数据库连接失败
-
检查日志:
docker-compose logs db
-
-
-
-