实例1
name: myblog services: mysql: container_name: mysql image: mysql:5.7 ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=wordpress volumes: - mysql-data:/var/lib/mysql - /app/myconf:/etc/mysql/conf.d restart: always networks: - blog wordpress: image: wordpress ports: - "8080:80" environment: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: 123456 WORDPRESS_DB_NAME: wordpress volumes: - wordpress:/var/www/html restart: always networks: - blog phpmyadmin: image: phpmyadmin:5 ports: - "8081:80" environment: PMA_HOST: mysql MYSQL_ROOT_PASSWORD: 123456 depends_on: - mysql networks: - blog volumes: mysql-data: wordpress: networks: blog:
实例2
创建项目目录结构
mkdir wordpress-docker && cd wordpress-docker mkdir nginx-conf php
创建 docker-compose.yml 文件
version: '3' services: # MySQL 数据库 db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress networks: - wordpress_network # PHP 处理 php: build: ./php volumes: - wordpress_files:/var/www/html networks: - wordpress_network # Web 服务器 nginx: image: nginx:latest ports: - "80:80" volumes: - wordpress_files:/var/www/html - ./nginx-conf:/etc/nginx/conf.d depends_on: - php networks: - wordpress_network # phpMyAdmin phpmyadmin: image: phpmyadmin/phpmyadmin ports: - 8080:80 environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: rootpassword depends_on: - db networks: - wordpress_network # WordPress wordpress: image: wordpress:latest volumes: - wordpress_files:/var/www/html environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress depends_on: - db networks: - wordpress_network volumes: db_data: wordpress_files: networks: wordpress_network:
启动容器
docker-compose up -d
代码的详细解释
服务定义(核心部分)
services: # MySQL 数据库服务 db: image: mysql:5.7 # 使用官方MySQL 5.7镜像(兼容性较好) volumes: - db_data:/var/lib/mysql # 挂载持久化卷到MySQL数据存储目录 environment: # 设置MySQL环境变量 MYSQL_ROOT_PASSWORD: rootpassword # root用户密码(生产环境需修改) MYSQL_DATABASE: wordpress # 自动创建名为wordpress的数据库 MYSQL_USER: wordpress # 创建普通用户 MYSQL_PASSWORD: wordpress # 普通用户密码 networks: - wordpress_network # 加入专用网络
# PHP-FPM 服务 php: build: ./php # 使用当前目录下php文件夹中的Dockerfile构建镜像 volumes: - wordpress_files:/var/www/html # 共享WordPress文件目录 networks: - wordpress_network
# Nginx 服务 nginx: image: nginx:latest # 使用最新版Nginx镜像 ports: - "80:80" # 映射宿主机80端口到容器80端口 volumes: - wordpress_files:/var/www/html # 共享网站文件 - ./nginx-conf:/etc/nginx/conf.d # 挂载自定义Nginx配置 depends_on: - php # 依赖php服务启动 networks: - wordpress_network
# phpMyAdmin 服务 phpmyadmin: image: phpmyadmin/phpmyadmin # 官方phpMyAdmin镜像 ports: - 8080:80 # 通过宿主机8080端口访问 environment: PMA_HOST: db # 连接MySQL服务的别名(db) MYSQL_ROOT_PASSWORD: rootpassword # 对应MySQL的root密码 depends_on: - db # 依赖数据库服务 networks: - wordpress_network
# WordPress 核心服务 wordpress: image: wordpress:latest # 官方WordPress镜像 volumes: - wordpress_files:/var/www/html # 共享网站文件(与php/nginx同步) environment: WORDPRESS_DB_HOST: db:3306 # 数据库连接地址(服务名+端口) WORDPRESS_DB_USER: wordpress # 对应MySQL中创建的用户名 WORDPRESS_DB_PASSWORD: wordpress # 对应用户密码 depends_on: - db # 依赖数据库服务 networks: - wordpress_network
数据卷定义
volumes: db_data: # MySQL数据库持久化存储 wordpress_files: # WordPress代码和上传文件的共享存储
关键作用:
db_data:确保MySQL数据不会因容器重启而丢失
wordpress_files:让PHP/Nginx/WordPress容器共享同一份网站文件
4. 网络配置
networks: wordpress_network: # 创建专用桥接网络
目的:使所有服务处于同一内部网络,实现以下功能:
通过服务名称互相访问(如 db 指向MySQL容器)
隔离外部网络,提升安全性
关键配置关系图
用户访问 ↓ Nginx (80端口) → PHP-FPM处理 → WordPress代码 ↑ ↗ phpMyAdmin (8080端口) → MySQL数据库
配置亮点说明
版本控制:
MySQL使用5.7版本:确保与WordPress兼容,避免新版MySQL的认证问题
PHP 7.4:WordPress官方推荐版本,通过自定义Dockerfile添加了mysqli扩展
安全隔离:
专用网络 wordpress_network:服务间通过内部DNS通信,不暴露到公网
非root数据库用户:使用wordpress用户而非root操作数据库
端口规划:
80 → Nginx(网站主入口)
8080 → phpMyAdmin(避免与常用端口冲突)
数据持久化:
db_data卷:独立保存数据库文件
wordpress_files卷:保存主题/插件/上传文件等