3.4 基础存储配置

摘要
本实验将带你了解Docker的存储管理机制,学习如何创建和使用Docker卷(Volume)来持久化容器数据。通过部署WordPress和MySQL应用,你将体验如何在不丢失数据的情况下升级容器应用。

在开始实验前,我们需要准备一个干净的环境,确保之前的实验不会对本次实验造成影响。

1. 删除以下内容:

  • 所有容器(包括运行中的和已停止的)
  • 所有镜像
技巧

关于删除的命令:

  • docker rm:删除容器
  • docker rmi:删除镜像
  • docker network rm:删除网络

如果要删除所有容器,可以使用:docker rm -f $(docker ps -aq) 如果要删除所有镜像,可以使用:docker rmi -f $(docker images -q)

2. 创建 wordpress-network 网桥

bash

docker network create wordpress-network

3. 下载镜像:

我们需要准备两个版本的MySQL和WordPress镜像,以便后续模拟升级过程:

  • mysql:8.0
  • mysql:8.3
  • wordpress:6.6
  • wordpress:6.7

下载完成后,可以使用docker images命令查看已下载的镜像:

镜像列表

在这个任务中,我们将使用Docker卷来持久化存储WordPress和MySQL的数据。

首先,我们需要创建两个卷,分别用于存储MySQL的数据库和WordPress产生的文件:

bash

docker volume create mysql-data
docker volume create wordpress-content

创建完成后,可以使用以下命令查看已创建的卷:

bash

docker volume ls

查看创建的卷

现在,我们将启动MySQL和WordPress容器,并将之前创建的卷挂载到相应的容器中:

首先,启动MySQL容器,按以下要求自写命令:

  1. 后台运行
  2. 容器名:mysql
  3. 网络:连接到 wordpress-network 网桥
  4. 环境变量:
    • MYSQL_ROOT_PASSWORD=wordpress
    • MYSQL_DATABASE=wordpress
    • MYSQL_USER=wordpress
    • MYSQL_PASSWORD=wordpress
  5. 存储挂载:mysql-data 卷挂载到容器内的 /var/lib/mysql
  6. 镜像:mysql:8.0

然后,启动WordPress容器,根据以下要求自写命令:

  1. 后台运行
  2. 容器名:wordpress
  3. 网络:连接到 wordpress-network 网桥
  4. 端口映射:外部端口80映射到内部端口80
  5. 存储挂载:wordpress-content 卷挂载到容器内的 /var/www/html
  6. 镜像:wordpress:6.6

启动容器后,验证容器状态是否为UP:

容器状态

现在,打开浏览器,访问主机的IP地址(或localhost),你应该能看到WordPress的安装页面。

按照提示完成WordPress的安装,然后安装一些插件、主题,并发布一些文章,以便我们在后续步骤中验证数据是否成功保留。

WordPress配置

阶段性胜利
到此为止,我们已经成功部署了WordPress和MySQL,并且使用Docker卷持久化了它们的数据。接下来,我们将模拟升级过程,验证数据是否会在升级后保留。

在实际环境中,我们经常需要升级应用程序和数据库。使用Docker卷可以确保在升级过程中不会丢失数据。

首先,我们需要停止并删除当前运行的容器:

bash

docker stop wordpress
docker stop mysql

docker rm wordpress
docker rm mysql

停止并删除容器

警告
在实际生产环境中,删除容器前应确保已经对数据进行了备份。虽然我们使用了卷来持久化数据,但最好养成备份的习惯。

现在,我们将使用新版本的镜像启动容器,同时挂载之前创建的卷,以保留数据。

首先,启动MySQL 8.3容器(从8.0升级到8.3):

bash

docker run -d \
--name mysql \
--network wordpress-network \
-e MYSQL_ROOT_PASSWORD=wordpress \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wordpress \
-e MYSQL_PASSWORD=wordpress \
-v mysql-data:/var/lib/mysql \
mysql:8.3

然后,启动WordPress 6.7容器(从6.6升级到6.7):

bash

docker run \
-d --name wordpress  \
--network wordpress-network \
-p 80:80 \
-v wordpress-content:/var/www/html \
wordpress:6.7
注意观察
除了镜像版本不同外,其他参数(网络、环境变量、卷挂载等)与之前的命令完全相同。这确保了新容器可以访问之前容器创建的数据。

启动新容器后,使用docker ps命令验证容器状态:

新容器状态

最后,打开浏览器,访问主机的IP地址(或localhost),验证WordPress网站是否正常运行,以及之前创建的内容(文章、主题、插件等)是否仍然存在。

成功
如果你能看到之前创建的内容,说明数据成功保留,升级过程完成!这证明了Docker卷在持久化数据方面的强大功能。
学习内容

通过本实验,你学习了:

  1. 如何创建和使用Docker卷来持久化容器数据
  2. 如何在不丢失数据的情况下升级容器应用
  3. Docker卷在实际应用场景中的重要性

Docker卷是容器化应用中数据持久化的关键技术,掌握它可以帮助你构建更加健壮和可维护的容器化应用。

相关内容