ky818smKy818sm  2025-03-08 20:27 旷野小站 隐藏边栏 |   抢沙发  1 
文章评分 0 次,平均分 0.0

实例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卷:保存主题/插件/上传文件等

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

声明:如果本站发布的内容侵犯到您的权益,请通过邮件【[email protected]】联系本站,我们将及时删除!

发表评论

表情 格式 链接 私密 签到