基于docker-compose创建mysql+wordpress网站

什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。它通过一个 YAML 文件(通常命名为 docker-compose.yml)来配置应用的多个服务、网络和卷,然后使用简单的命令一键启动、停止或管理这些容器。Docker Compose 特别适合开发、测试和生产环境中需要协调多个容器的场景,例如运行 WordPress 和 MySQL 的组合。

Docker Compose 与 Docker CLI 的区别

特性Docker CLIDocker Compose
定义方式通过命令行逐一运行 docker rundocker network 等命令,手动配置容器。使用单一的 YAML 文件定义多个容器、服务、网络和卷,配置更集中和声明式。
适用场景适合单容器操作或临时测试,灵活但管理复杂多容器时繁琐。适合多容器应用,简化复杂应用的部署和管理,适合开发和生产环境。
命令复杂度需要多个命令逐一操作(如创建网络、启动容器、设置卷等)。单条命令(如 docker-compose up)即可启动整个应用栈。
配置管理配置分散在命令或脚本中,难以维护。配置集中于 YAML 文件,易于版本控制和共享。
依赖管理手动管理容器间的依赖关系(如启动顺序)。自动处理服务依赖(通过 depends_on),确保正确启动顺序。
可重复性手动运行命令可能导致配置不一致。YAML 文件确保环境一致性,适合团队协作和 CI/CD 集成。
功能范围提供完整的 Docker 功能,适合细粒度控制所有 Docker 资源。专注于简化多容器应用的编排,部分高级功能(如 Swarm 模式)需要结合 CLI。

总结:Docker CLI 更适合单容器或低级操作,灵活但繁琐;Docker Compose 针对多容器应用,提供声明式配置和简化管理,适合复杂应用场景。

如何使用 Docker Compose?

以下是使用 Docker Compose 创建和管理 MySQL 容器的详细步骤,延续之前的 MySQL 和 WordPress 示例。

1. 安装 Docker Compose

确保已安装 Docker 和 Docker Compose:

  • 检查 Docker
  docker --version
  • 检查 Docker Compose
  docker-compose --version
  • 如果未安装 Docker Compose,参考官方文档安装:https://docs.docker.com/compose/install/

2. 创建 Docker Compose 文件

在项目目录(例如 mysql-project)下创建 docker-compose.yml 文件。以下是一个运行 MySQL 容器的示例:

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql_container
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - mysql_data:/var/lib/mysql
    restart: unless-stopped
    networks:
      - mysql-network
volumes:
  mysql_data:
networks:
  mysql-network:
    driver: bridge

文件说明

  • version: 指定 Docker Compose 文件格式版本(3.8 适用于较新版本的 Docker)。
  • services: 定义容器服务,这里是 mysql 服务。
  • image: 使用官方 MySQL 8.0 镜像。
  • ports: 映射宿主机 3306 端口到容器 3306 端口。
  • environment: 设置 MySQL 的环境变量(根密码、数据库、用户等)。
  • volumes: 持久化数据到 mysql_data 卷。
  • networks: 定义自定义网络 mysql-network,便于容器通信。
  • restart: 容器自动重启,除非手动停止。

3. 启动容器

在包含 docker-compose.yml 的目录下运行:

docker-compose up -d
  • -d: 后台运行容器。
  • 命令会自动拉取镜像、创建网络和卷,并启动所有服务。

4. 验证运行

  • 检查容器状态:
  docker-compose ps
  • 查看日志:
  docker-compose logs mysql
  • 连接 MySQL:
  docker exec -it mysql_container mysql -u root -p

输入 rootpassword 登录。

5. 管理容器

  • 停止服务:停止并保留容器和数据:
  docker-compose stop
  • 停止并删除:删除容器、网络,但保留卷:
  docker-compose down
  • 删除卷(谨慎,数据将丢失):
  docker-compose down -v
  • 重启服务
  docker-compose restart

6. 结合 WordPress

若要与 WordPress 配合,可扩展 docker-compose.yml

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql_container
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress_user
      MYSQL_PASSWORD: wordpress_password
    volumes:
      - mysql_data:/var/lib/mysql
    restart: unless-stopped
    networks:
      - wp-network

  wordpress:
    image: wordpress:latest
    container_name: wordpress_container
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: wordpress_password
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      - mysql
    restart: unless-stopped
    networks:
      - wp-network

volumes:
  mysql_data:
  wordpress_data:

networks:
  wp-network:
    driver: bridge

运行 docker-compose up -d,即可启动 WordPress 和 MySQL,访问 http://localhost:8080 进行 WordPress 安装。

7. 环境变量文件(可选)

为提高安全性,可将敏感信息放入 .env 文件:

MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=mydb
MYSQL_USER=user
MYSQL_PASSWORD=password

docker-compose.yml 中引用:

environment:
  - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
  - MYSQL_DATABASE=${MYSQL_DATABASE}
  - MYSQL_USER=${MYSQL_USER}
  - MYSQL_PASSWORD=${MYSQL_PASSWORD}

注意事项

  • 文件路径:确保在正确目录运行 docker-compose 命令,指向包含 docker-compose.yml 的目录。
  • 版本兼容version 字段需与 Docker Compose 版本兼容(3.8 适用于较新版本)。
  • 端口冲突:检查宿主机端口(3306 或 8080)是否被占用,可修改映射端口。
  • 数据持久化:使用 volumes 确保数据不因容器删除而丢失。
  • 网络隔离:自定义网络(如 wp-network)确保容器间通信安全。
  • 生产环境:调整 MySQL 配置(如 my.cnf)、使用强密码、启用 SSL 和防火墙。

示例场景

假设你需要为开发环境部署 MySQL 和 WordPress:

  1. 创建上述 docker-compose.yml
  2. 运行 docker-compose up -d
  3. 访问 http://localhost:8080 配置 WordPress。
  4. 使用 docker-compose logs 排查问题。
  5. 测试完成后,运行 docker-compose down 清理环境。

通过Docker Compose,你可以高效管理多容器应用,简化配置和部署流程!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注