实例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卷:保存主题/插件/上传文件等
本文为原创文章,版权归旷野小站所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ linux下查看目录所在的分区命令11/03
- ♥ rsync命令带端口参数的书写格式12/19
- ♥ Docker中让容器在开机时自动启动的方法03/07
- ♥ vim中查找和替换命令详解02/04
- ♥ Linux 中设置 SSH 无密码登录11/01
- ♥ APACHE和NGINX配置将不带www的根域名301重定向到www主域名02/11