跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bashjava

Docker Compose 实践:简单拓扑、数据库代理与 WordPress 博客部署

Docker Compose 用于多容器应用编排。通过三个案例演示其用法:首先构建包含 Nginx、MySQL、Redis 的简单拓扑,配置网络与卷;其次实现 Nginx 反向代理访问 MySQL 及 Java 后端服务;最后部署 WordPress 个人博客,详解环境变量、健康检查及数据持久化配置。涵盖命令区别、启动顺序控制及常见问题解决,帮助掌握容器化部署核心技能。

编程诗人发布于 2026/3/16更新于 2026/9/464 浏览
Docker Compose 实践:简单拓扑、数据库代理与 WordPress 博客部署

一、基于 yml 配置文件实现简单拓扑

基于存储卷和网络功能构建拓扑结构。

配置信息说明

  1. Web 服务 (Nginx)

    • 作用:作为网站服务器。
    • 镜像:nginx:latest
    • 端口映射:8089:80,浏览器访问 http://localhost:8089。
    • 文件挂载:./web:/usr/share/nginx/html,本地文件夹作为根目录。
    • 依赖:需 redis 和 mysql 启动成功后才启动。
  2. MySQL 服务

    • 作用:运行 MySQL 数据库。
    • 镜像:mysql:5.7
    • 密码:root 用户密码为 root@123。
    • 数据持久化:./mysql:/var/lib/mysql,数据保存在本地目录。
    • 健康检查:定期执行 SELECT 1; 确认响应。
  3. Redis 服务

    • 作用:运行 Redis 缓存服务。
    • 镜像:redis:7
    • 健康检查:通过 ping 命令确认。
  4. 网络 (net1)

    • 三个服务加入同一虚拟网络,可通过服务名互相访问。

验证与测试

  • 检查配置格式无误。
  • 按顺序启动(redis -> mysql -> web),容器连接正常。
  • 查看网络详情,容器已连接至指定网络。
  • 绑定卷目录同步完成。
  • 访问 Nginx 时若发现内容缺失,通常因宿主机映射目录为空覆盖了容器默认内容,需确保宿主机目录有对应文件。
  • 容器间可通过 curl 访问 Web 服务(默认 80 端口)。
  • Redis 若无显式挂载,官方镜像默认声明匿名卷。
  • 停止删除容器时,命名卷保留,匿名卷移除。

二、基于 nginx 实现代理访问 mysql 测试

架构说明

依赖关系:系统服务 -> MySQL -> Nginx。

服务定义

  1. web - Nginx 网页服务器

    • 端口:8765(对外)-> 80(容器内)
    • 配置:本地 nginxconf 文件夹 -> 容器配置目录
    • 依赖:后端服务启动后才会启动
  2. backend - 后端应用

    • 代码:本地 app 文件夹 -> 容器应用目录
    • 依赖:数据库健康后才启动
  3. mysql - 数据库

    • 密码:root
    • 数据持久化:本地 mysql 文件夹保存数据
    • 健康检查:自动检测数据库是否正常

启动流程

  • 启动顺序:数据库 -> 后端 -> 前端
  • 创建对应目录并传入 jar 包,运行 yml 文件。
  • 反向代理初始化完成后启动成功。
  • 清理容器后,绑定卷数据依然存在。

三、基于 docker compose 完成 WordPress 部署个人博客站点

使用 Docker Compose 快速部署包含 WordPress 和 MySQL 的完整个人博客站点。

核心组件

  1. WordPress

    • 开源内容管理系统 (CMS)。
    • 集成 LAMP 环境(Linux, Apache, PHP, MySQL/MariaDB)。
    • 优势:易用性高、生态丰富、社区活跃。
  2. MySQL

    • 关系型数据库管理系统 (RDBMS)。
    • 存储文章、页面、评论等结构化数据。
    • 使用数据卷持久化存储,防止容器重建导致数据丢失。
  3. Docker Compose

    • 定义多容器应用的命令行工具。
    • 管理服务、网络、数据卷。
    • 支持一键启停、环境隔离、版本控制。

部署步骤

  1. 获取镜像:从 Docker Hub 查找 wordpress 和 mysql 镜像。
  2. 编写 yml 文件:
    • services:定义 wordpress 和 db 两个服务。
    • wordpress 服务:
      • image: wordpress
      • restart: always
      • ports: "8091:80"
      • environment:设置 WORDPRESS_DB_HOST, USER, PASSWORD, NAME。
      • volumes:./wordpress/data:/var/www/html 持久化网站文件。
      • depends_on:等待 db 服务健康后启动。
    • db 服务:
      • image: mysql:5.7
      • environment:设置 MYSQL_DATABASE, USER, PASSWORD, ROOT_PASSWORD。
      • volumes:./db/data:/var/lib/mysql 持久化数据库文件。
      • healthcheck:定义健康检查命令及间隔。
  3. 启动服务:执行 docker-compose up -d。
  4. 访问测试:访问 http://IP:8091。
  5. 注册登录:在后台注册账号并登录。
  6. 内容发布:撰写并发布博客文章。
  7. 主题定制:修改主题样式和页面布局。

原理总结

  • 先启动 MySQL 容器,WordPress 随后启动并使用预设凭据连接数据库。
  • 容器间通过 Compose 内部网络通信。
  • 数据卷确保宿主机上的文件不随容器销毁而丢失。

四、基于 docker compose 常见问题

  1. up, run, start 命令的区别

    • up:核心命令,根据配置启动或重启整个服务栈。
    • run:执行一次性任务,创建临时容器。
    • start:仅重新启动已存在但停止的容器。
  2. 如何运行项目的多个副本

    • 使用 -p 参数或 COMPOSE_PROJECT_NAME 环境变量设置唯一项目名称,隔离资源。
  3. 如何控制服务启动顺序

    • 通过 depends_on 声明依赖关系。
    • 配合 healthcheck 确保依赖服务准备就绪后再启动。

五、本篇小结

通过三个实践案例,掌握用 Docker Compose 编排多容器应用,理解服务依赖、数据持久化、网络配置等要点,学会编写 yml 文件实现一键部署,解决容器启动、数据同步、访问等问题,提升容器化应用开发与运维能力。

目录

  1. 一、基于 yml 配置文件实现简单拓扑
  2. 配置信息说明
  3. 验证与测试
  4. 二、基于 nginx 实现代理访问 mysql 测试
  5. 架构说明
  6. 服务定义
  7. 启动流程
  8. 三、基于 docker compose 完成 WordPress 部署个人博客站点
  9. 核心组件
  10. 部署步骤
  11. 原理总结
  12. 四、基于 docker compose 常见问题
  13. 五、本篇小结

更多推荐文章

查看全部
  • Git 远程协作实战:从安装到提交的全流程问题排查
  • Docker 部署 OpenClaw 常见问题与自定义模型配置指南
  • GitHub Copilot:Python 开发者的 AI 编程助手
  • 贪心算法实战:柠檬水找零、数组减半与最大数拼接
  • 实测 Gemini Pro:谷歌多模态 AI 的实际应用能力
  • Conda Python 环境管理指南:uv 对比与迁移方案
  • 基于 ROS 与 Ego-Planner 的无人机动态避障仿真实现
  • Docker 部署 MySQL 8.0 实战:从镜像拉取到远程访问配置
  • JavaQuestPlayer QSP 游戏开发与运行指南
  • Docker 安装 Neo4j 图数据库教程
  • Ubuntu Desktop 离线安装 RustDesk 远程桌面客户端指南
  • 2025 大模型产品经理转型指南:从零开始掌握核心技能与实战路径
  • Stable-Diffusion-3.5 运行慢?FP8 量化 GPU 优化实战方案
  • Django 基于 Echarts+Python 的图书零售监测系统设计与实现
  • DIY 无人机电源管理:升压与降压电路设计
  • Linux 是什么?
  • Distributed-LLama 实战:构建支持多用户的高性能聊天 API 服务
  • 基于 SpringBoot 的影视周边推荐系统设计与实现
  • STL map 与 multimap 核心特性及接口详解
  • AI Agent Skills 设计与编写实战指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online