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容器:

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.0
注意

上面的命令中:

  • -d:在后台运行容器
  • --name mysql:指定容器名称为mysql
  • --network wordpress-network:将容器连接到wordpress-network网络
  • -e:设置环境变量,用于配置MySQL
  • -v mysql-data:/var/lib/mysql:将mysql-data卷挂载到容器的/var/lib/mysql目录

然后,启动WordPress容器:

bash

docker run \
-d --name wordpress  \
--network wordpress-network \
-p 80:80 \
-v wordpress-content:/var/www/html \
wordpress:6.6
注意

上面的命令中:

  • -p 80:80:将容器的80端口映射到主机的80端口
  • -v wordpress-content:/var/www/html:将wordpress-content卷挂载到容器的/var/www/html目录,这是WordPress存储网站文件的位置

启动容器后,验证容器状态是否为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卷是容器化应用中数据持久化的关键技术,掌握它可以帮助你构建更加健壮和可维护的容器化应用。

相关内容