文章目录
- [1. 实战概述](#1. 实战概述)
- [2. 实战步骤](#2. 实战步骤)
-
- [2.1 操作数据卷](#2.1 操作数据卷)
-
- [2.1.1 创建本地数据卷](#2.1.1 创建本地数据卷)
- [2.1.2 查看数据卷列表](#2.1.2 查看数据卷列表)
- [2.1.3 查看数据卷详细信息](#2.1.3 查看数据卷详细信息)
- [2.1.4 删除指定的数据卷](#2.1.4 删除指定的数据卷)
- [2.1.5 判断数据卷是否存在](#2.1.5 判断数据卷是否存在)
- [2.2 挂载普通数据卷(Volume)](#2.2 挂载普通数据卷(Volume))
-
- [2.2.1 挂载普通数据卷](#2.2.1 挂载普通数据卷)
- [2.2.2 查看运行的容器](#2.2.2 查看运行的容器)
- [2.2.3 查看数据卷信息](#2.2.3 查看数据卷信息)
- [2.3 绑定挂载宿主机目录(Bind)](#2.3 绑定挂载宿主机目录(Bind))
-
- [2.3.1 绑定挂载宿主机目录](#2.3.1 绑定挂载宿主机目录)
- [2.3.2 查看运行的容器](#2.3.2 查看运行的容器)
- [2.4 挂载临时文件系统(tmpfs)](#2.4 挂载临时文件系统(tmpfs))
-
- [2.4.1 挂载临时文件系统](#2.4.1 挂载临时文件系统)
- [2.4.2 查看运行的容器](#2.4.2 查看运行的容器)
- [2.4.3 查看临时数据卷信息](#2.4.3 查看临时数据卷信息)
- [2.5 数据卷容器](#2.5 数据卷容器)
-
- [2.5.1 新建数据卷容器](#2.5.1 新建数据卷容器)
- [2.5.2 共享数据卷容器](#2.5.2 共享数据卷容器)
- [5.3 数据迁移](#5.3 数据迁移)
-
- [5.3.1 备份数据卷](#5.3.1 备份数据卷)
- [5.3.2 还原数据卷](#5.3.2 还原数据卷)
- [3. 实战总结](#3. 实战总结)
1. 实战概述
- 本次实战系统演示了 Docker 数据管理的核心技术,包括创建与管理本地数据卷(Volume)、绑定挂载宿主机目录(Bind Mount)、使用内存临时文件系统(tmpfs),以及通过数据卷容器实现多容器间数据共享与迁移。通过备份与还原操作,验证了数据持久化、共享和迁移的完整流程。
2. 实战步骤
2.1 操作数据卷
2.1.1 创建本地数据卷
- 执行命令:
docker volume create -d local huawei_volume

- 结果说明 :执行
docker volume create -d local huawei_volume成功创建名为huawei_volume的本地数据卷,使用默认的local驱动。该卷可用于容器间持久化存储,确保数据在容器销毁后仍保留,验证了 Docker 数据卷的基本创建功能。
2.1.2 查看数据卷列表
- 执行命令:
docker volume ls

- 结果说明 :执行
docker volume ls成功列出系统中所有数据卷,包含四个本地驱动(local)的卷,其中huawei_volume为手动创建的命名卷。输出显示各卷的唯一标识符和名称,验证了数据卷的创建与管理功能正常,可用于后续容器持久化存储配置。
2.1.3 查看数据卷详细信息
- 执行命令:
docker volume inspect huawei_volume

- 结果说明 :执行
docker volume inspect huawei_volume成功获取该数据卷的详细信息,显示其驱动为local,挂载点位于/var/lib/docker/volumes/huawei_volume/_data,验证了数据卷在宿主机上的实际存储路径和配置属性,确保容器可安全持久化数据。
2.1.4 删除指定的数据卷
- 执行命令:
docker volume rm 31e066fd25ef0044ca437ea841fbd48c6d8f41fecdc44165dca542afef5f42e8

- 结果说明 :执行
docker volume rm成功删除指定数据卷(ID: 31e06...),系统无报错提示,表明该卷未被任何容器使用且已从本地存储中彻底移除。操作验证了 Docker 数据卷的清理功能,确保资源释放和磁盘空间回收有效。
2.1.5 判断数据卷是否存在
- 执行命令:
docker volume inspect huawei_volume >/dev/null 2>&1 && echo "huawei_volume卷存在~" || echo "huawei_volume卷不存在~"

- 结果说明 :执行命令通过
docker volume inspect检查huawei_volume是否存在,输出重定向至/dev/null避免显示内容,结合&&与||判断执行结果。结果显示"huawei_volume卷存在",说明该数据卷已成功创建并存在于系统中,验证了其可用性。 - 执行命令:
docker volume inspect 31e066fd25ef0044ca437ea841fbd48c6d8f41fecdc44165dca542afef5f42e8 >/dev/null 2>&1 && echo "31e066fd25ef0044ca437ea841fbd48c6d8f41fecdc44165dca542afef5f42e8卷存在~" || echo "31e066fd25ef0044ca437ea841fbd48c6d8f41fecdc44165dca542afef5f42e8卷不存在~"

- 结果说明:执行
docker volume inspect检查指定卷 ID 的数据卷,输出重定向至/dev/null以隐藏内容,结合&&和||判断命令执行结果。结果显示"31e066fd...卷不存在",说明该卷 ID 对应的数据卷未在系统中找到,验证了它已经被删除。
2.2 挂载普通数据卷(Volume)
2.2.1 挂载普通数据卷
-
执行命令:
docker run -d --name=nginx_huawei_docker_1 --mount source=nginx_huawei_volume,destination=/usr/share/nginx/html nginx:latest

-
结果说明 :执行命令成功启动名为
nginx_huawei_docker_1的 Nginx 容器,并将数据卷nginx_huawei_volume挂载至容器的/usr/share/nginx/html目录,实现网页内容持久化存储。容器运行正常,验证了 Docker 数据卷与容器的正确绑定及使用。 -
执行命令:
docker run -d --name=nginx_huawei_docker_2 -v nginx_huawei_volume,/usr/share/nginx/html nginx:latest

-
结果说明 :执行命令成功启动名为
nginx_huawei_docker_2的 Nginx 容器,并通过-v参数将数据卷nginx_huawei_volume挂载至容器的/usr/share/nginx/html目录,实现网页内容持久化。容器运行正常,验证了使用-v选项挂载数据卷的正确性与兼容性。
2.2.2 查看运行的容器
- 执行命令:
docker ps -a

- 结果说明 :执行
docker ps -a成功列出所有容器,显示两个 Nginx 容器nginx_huawei_docker_1和nginx_huawei_docker_2均处于运行状态(Up),分别映射了 80/tcp 和 90/tcp 端口。验证了容器创建与启动成功,且数据卷挂载配置正常,系统资源调度无异常。
2.2.3 查看数据卷信息
- 执行命令:
ll /var/lib/docker/volumes

- 结果说明 :执行
ll /var/lib/docker/volumes成功列出 Docker 数据卷目录,显示nginx_huawei_volume等卷的挂载点和权限信息,确认其在宿主机上的实际存储路径为/var/lib/docker/volumes/nginx_huawei_volume/_data,验证了数据卷持久化存储机制正常,文件系统结构完整。
2.3 绑定挂载宿主机目录(Bind)
2.3.1 绑定挂载宿主机目录
-
执行命令:
mkdir /usr/local/web

-
执行命令:
docker run -d --name=nginx_bind_docker_1 --mount type=bind,source=/usr/local/web,destination=/usr/share/nginx/html nginx:latest

-
结果说明 :执行命令成功启动名为
nginx_bind_docker_1的 Nginx 容器,并通过--mount type=bind将宿主机路径/usr/local/web绑定挂载至容器的/usr/share/nginx/html,实现静态网页内容共享。容器运行正常,验证了绑定挂载(bind mount)功能的正确性与数据同步能力。 -
执行命令:
docker run -d --name=nginx_bind_docker_2 -v /usr/local/web:/usr/share/nginx/html nginx:latest

-
结果说明 :执行命令成功启动名为
nginx_bind_docker_2的 Nginx 容器,并通过-v参数将宿主机目录/usr/local/web挂载至容器的/usr/share/nginx/html,实现网页内容共享。容器运行正常,验证了使用-v选项进行绑定挂载的正确性与兼容性。
2.3.2 查看运行的容器
-
执行命令:
docker ps -a --filter "name=bind"

-
结果说明 :执行
docker ps -a --filter "name=bind"成功筛选出名称包含 "bind" 的容器,显示nginx_bind_docker_1和nginx_bind_docker_2均处于运行状态(Up),并映射 80/tcp 端口。验证了绑定挂载容器部署正常,且通过命名过滤可精准定位特定类型容器,便于后续管理与维护。
2.4 挂载临时文件系统(tmpfs)
2.4.1 挂载临时文件系统
-
执行命令:
docker run -d --name=nginx_tmp_docker --mount type=tmpfs,destination=/app nginx:latest -
结果说明 :执行命令成功启动名为
nginx_tmp_docker的 Nginx 容器,并通过--mount type=tmpfs,destination=/app将内存中的临时文件系统挂载至容器的/app路径,实现数据仅存于内存、重启即清空的效果。容器运行正常,验证了 tmpfs 挂载方式的正确性与临时存储功能。

2.4.2 查看运行的容器
-
执行命令:
docker ps -a --filter "name=tmp"

-
结果说明 :执行
docker ps -a --filter "name=tmp"成功筛选出名称包含 "tmp" 的容器,显示nginx_tmp_docker正在运行(Up),映射 80/tcp 端口。验证了容器创建成功且命名过滤功能正常,表明临时存储类容器部署无误,系统可精准定位并管理此类实例。
2.4.3 查看临时数据卷信息
-
执行命令:
docker inspect nginx_tmp_docker --format '{``{ json .Mounts }}' | jq .

-
结果说明 :执行
docker inspect nginx_tmp_docker --format '{``{ json .Mounts }}' | jq .成功提取并格式化容器的挂载信息,显示其使用 tmpfs 类型挂载,目标路径为/app,源为空(内存中),读写权限开启。验证了临时文件系统挂载配置正确,数据仅存于内存,重启即清空,适用于临时存储场景。
2.5 数据卷容器
2.5.1 新建数据卷容器
- 执行命令:
docker run -it -v /dbdata --name db_data alpine:3.19

- 结果说明 :执行命令成功启动名为
db_data的 Alpine 容器,并通过-v /dbdata将宿主机的/dbdata目录挂载至容器根目录,实现数据共享。容器以交互模式运行,终端进入 shell 环境,验证了绑定挂载配置正确,可用于数据库等持久化场景的数据存储与管理。 - 执行命令:
ll,查看挂载目录dbdata

- 执行命令:
cd dbdata

- 执行命令:
echo "I Love Docker World~" > love.txt

- 执行命令:
cat love.txt

- 执行命令:
exit

2.5.2 共享数据卷容器
- 执行命令:
docker run -it --volumes-from db_data --name test_db_data alpine:3.19

- 结果说明 :执行命令成功启动名为
test_db_data的 Alpine 容器,并通过--volumes-from db_data从源容器db_data继承其数据卷挂载配置。容器以交互模式运行,进入 shell 环境,验证了数据卷共享机制有效,实现了多个容器间共享同一数据存储,适用于数据库备份、迁移等场景。 - 执行命令:
ls,查看是否继承了源容器db_data的数据卷挂载目录

- 执行命令:
cd dbdata

- 执行命令:
cat love.txt

- 执行命令:
exit

5.3 数据迁移
5.3.1 备份数据卷
-
创建容器dbstore1,备份数据卷
- 执行命令:
docker run -v /dbdata --name dbstore1 ubuntu /bin/bash,进入容器后,执行命令:ls

- 结果说明 :执行命令成功启动名为
dbstore1的 Ubuntu 容器,通过-v /dbdata将宿主机的/dbdata目录挂载至容器内,实现数据持久化。容器以交互模式运行并进入 bash 环境,验证了绑定挂载配置正确,可安全用于数据库等需要共享存储的应用场景。 - 执行命令:
cd dbdata

- 执行命令:
echo "Weclome to Docker World~" > welcome.txt

- 执行命令:
exit

- 执行命令:
-
新建容器,从dbstore1上挂载数据卷,挂载到本地目录,然后打包备份
-
执行命令:
docker run --rm --volumes-from dbstore1 -v "$(pwd)":/backup ubuntu tar zcvf /backup/backup.tar.gz /dbdata

-
结果说明 :命令成功执行,将
dbstore1容器中挂载的/dbdata目录打包为backup.tar.gz,并保存到宿主机当前目录。tar提示"Removing leading '/'"属正常行为,表示已去除绝对路径前缀以避免解压时覆盖系统文件,备份文件已生成,验证了基于--volumes-from的数据卷备份机制有效。 -
执行命令:
ll backup.tar.gz

-
5.3.2 还原数据卷
- 新建容器dbstore2,恢复备份好的数据卷
- 执行命令:
docker run -v /dbdata --name dbstore2 ubuntu /bin/bash

- 执行命令:
- 解压gz包,释放到对应目录
- 执行命令:
docker run --rm --volumes-from dbstore2 -v "$(pwd)":/backup ubuntu bash -c "cd /dbdata && tar zxvf /backup/backup.tar.gz --strip 1"

- 结果说明 :命令成功执行,通过
--volumes-from dbstore2挂载数据卷,并将宿主机当前目录挂载为容器内/backup。进入容器后切换至/dbdata目录,解压backup.tar.gz文件并使用--strip 1去除路径前缀,实现备份文件的正确还原,验证了跨容器数据恢复流程的有效性。
- 执行命令:
- 新建临时容器,验证数据是否恢复
- 执行命令:
docker run -it --rm --volumes-from dbstore2 ubuntu /bin/bash

- 执行命令:
cat dbdata/welcome.txt

- 结果说明 :通过创建临时容器并使用
--volumes-from dbstore2挂载其数据卷,成功进入容器环境。执行cat /dbdata/welcome.txt查看文件内容,输出为 "Welcome to Docker World!",验证了备份数据已正确恢复至/dbdata目录,说明数据持久化与恢复流程完整有效。
- 执行命令:
3. 实战总结
- 本次实战全面掌握了 Docker 的四种数据管理方式:普通数据卷适用于容器间持久化共享;绑定挂载便于开发调试与宿主机文件同步;tmpfs 适合敏感或临时数据;数据卷容器则为数据库等场景提供解耦的数据存储方案。通过
--volumes-from成功实现跨容器数据备份与恢复,验证了 Docker 在数据生命周期管理中的灵活性与可靠性。同时,结合docker volume命令与宿主机路径检查,确保了数据存储的可见性与可控性。整个流程体现了容器化应用中"计算无状态、数据有持久"的最佳实践,为生产环境的数据安全与迁移奠定了坚实基础。