通过Docker部署WordPress 论坛

简介: 在前面的章节我们学习了docker的基本操作,本章节我们进行一次实际的部署实验,通过docker容器的方式部署wordpress论坛。

通过Docker部署WordPress 论坛


1. 创建相关实验资源

  1. 在体验实验室,单击创建资源。
  2. (可选)在实验室⻚⾯左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、⽤户信息等)。 说明:资源创建过程需要1~3分钟。

2. 启动wordpress论坛至少需要创建两个容器,一个mysql数据库容器和一个运行wordpress的apache容器。

启动wordpress论坛至少需要创建两个容器,一个mysql数据库容器和一个运行wordpress的apache容器。

  1. 首先我们先来编写docker-compose.yml文件
vi docker-compose.yml
version: "3"
services:
   db:
     image: mysql:8.0
     command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci     
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: "[MySQL root账号密码]"
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: "[MySQL wordpress账号密码]"
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: "[MySQL wordpress账号密码]"
volumes:
  db_data:

此处我们在mysql配置文件中,使用的command和restart两个配置项。这两项的定义如下

  • command:等同于Dockerfile中的CMD命令。注意,如果容器设置了EntryPoint,则command会作为的参数传递给EntryPoint。
  • restart:设置了容器的重启策略,如果容器在运行时因为异常退出,docker会根据restart策略选择是否重新启动容器。

2. 启动wordpress容器组

docker compose up -d

在容器组启动之后,我们可以进入GNOME桌面。通过浏览器访问论坛的首页。

在浏览器中输入http://127.0.0.1:8000

选择wordpress的界面语言,并且按"继续"

继续配置wordpress的相关信息。包括论坛名称,用户名,密码,然后按"安装WordPress"

安装之后点击登录,即可进入登录界面

登录之后即可进入wordpress管理后台

接下来我们进入wordpress前台浏览界面。输入网址 http://127.0.0.1:8000

出现浏览界面说明wordpress安装成功。

3. 接下来我们来分析一下wordpress容器组的情况。以及如何保存论坛的状态

  1. 我们先来查看容器的运行情况,我们切换到控制台页面
docker ps

通过docker compose部署的容器,默认容器的名称为 [工程名-服务名-服务数量]

  1. 我们继续查看容器的存储情况
docker inspect -f "{{json .Mounts}}" root-wordpress-1 | jq
docker inspect -f "{{json .Mounts}}" root-db-1 | jq

发现wordpress容器默认创建了一个volume挂载到/var/www/html路径。而db容器的volume被命名为root_db_data。其源位置为/var/lib/docker/volumes/root_db_data/_data

  1. 查看volume的源位置。以及备份volume
cd /var/lib/docker/volumes/root_db_data/_data
ls

根据经验我们发现,root_db_data volume的内容为mysql数据存放的文件夹。这种情况下我们以打包保存此文件夹的内容,以实现容器中mysql数据库的备份。

cd ~
tar czvf wp-db.tar.gz -C /var/lib/docker/volumes/root_db_data/_data .
ll wp-db.tar.gz

和db容器类似,我们根据经验,确定wordpress容器的volume路径为apache服务器的页面路径。我们也可以通过保存volume内容的方式来持久化wordpres容器中的页面设定,在这里我们通过docker inspect获得wordpress自动生成的volume的source信息,并且将路径直接传给tar指令来打包。

tar czvf wp.tar.gz -C $(docker inspect -f "{{with index .Mounts 0}}{{.Source}}{{end}}" root-wordpress-1) .
ll wp.tar.gz

  1. 接下来我们尝试删除原有容器和Volume,并通过tar来恢复wordpress服务的状态。
docker compose down
docker volume prune

修改docker-compse.yml文件,为wordpress容器添加一个指定的volume

vi docker-compse.yml
version: "3"
services:
   db:
     image: mysql:8.0
     command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: MySQLPassword
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - html:/var/www/html
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
  db_data:
  html:

为了可以初始化volume,我们先通过创建容器组,但并不启动

docker compose create

通过tar文件还原volume的内容

tar xzvf wp-db.tar.gz -C $(docker inspect -f "{{with index .Mounts 0}}{{.Source}}{{end}}" root-db-1)
tar xzvf wp.tar.gz -C $(docker inspect -f "{{with index .Mounts 0}}{{.Source}}{{end}}" root-wordpress-1)
docker compose start

我们切换回GNOME界面。访问http://127.0.0.1:8000发现页面没有进入初始化界面。访问 http://127.0.0.1:8000/wp-login.php使用之前设置的密码登录,发现依然可以登录。说明页面和数据库都已经从备份中恢复。

实验地址:https://developer.aliyun.com/adc/scenario/7884e3ab68e349ddb8e556a95e06ffed

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
3月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
1565 5
|
3月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
191 5
|
4月前
|
存储 Docker Python
docker 部署 sftp
本文介绍SFTP服务的部署与配置,包括users.conf用户配置规则、Docker容器运行命令及上传目录权限说明,重点解析atmoz/sftp镜像的chroot机制与子目录映射,确保用户登录后正确访问/upload目录,并提供Python脚本实现文件上传示例。
435 14
docker 部署 sftp
|
3月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
1163 7
|
3月前
|
存储 搜索推荐 数据库
🚀 RAGFlow Docker 部署全流程教程
RAGFlow是开源的下一代RAG系统,融合向量数据库与大模型,支持全文检索、插件化引擎切换,适用于企业知识库、智能客服等场景。支持Docker一键部署,提供轻量与完整版本,助力高效搭建私有化AI问答平台。
2763 8
|
3月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
700 4
|
运维 Java Devops
阿里云云效操作报错合集之部署docker时遇到报错,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
运维 Kubernetes 前端开发
【云原生】阿里云服务器部署 Docker Swarm集群
阿里云服务器 一键部署 Docker Swarm 集群!
1023 0
【云原生】阿里云服务器部署 Docker Swarm集群
|
弹性计算 数据可视化 关系型数据库
使用阿里云部署基于docker的mysql云服务
本篇文章将介绍如何使用阿里云安装docker、部署mysql服务,并远程连接至远端mysql
981 1
使用阿里云部署基于docker的mysql云服务