docker volume
docker volume

第一步:创建数据卷

docker volume create my-data
部分含义
docker volumeDocker 数据卷管理命令
create创建新数据卷
my-data数据卷名称(可自定义)

作用:在 /var/lib/docker/volumes/my-data/_data 创建一个目录,用来持久化数据。

第二步:查看数据卷

docker volume ls

第三步:查看数据卷详情

docker volume inspect my-data

部分含义
inspect查看详细信息

输出重点"Mountpoint": "/var/lib/docker/volumes/my-data/_data" 这是数据卷在宿主机上的实际位置。

第四步:写入数据到数据卷

docker run --rm -v my-data:/data alpine sh -c "echo 'hello docker volume' > /data/test.txt"

部分含义
docker run运行一个容器
--rm容器退出后自动删除(不留垃圾)
-v my-data:/data挂载数据卷:把宿主机的 my-data 数据卷挂载到容器的 /data 目录
alpine使用 Alpine Linux 镜像(只有 5MB,有 sh 命令)
sh -c "..."在容器内执行 shell 命令
echo 'hello docker volume' > /data/test.txt/data/test.txt 写入内容

关键理解-v 数据卷名:容器内路径

  • 左边:宿主机上的数据卷名称

  • 右边:容器内的目录

  • 作用:容器内写入 /data 的文件,实际保存在宿主机数据卷中

第五步:验证数据


docker run --rm -v my-data:/data alpine cat /data/test.txt

第六步:在宿主机直接查看


cat /var/lib/docker/volumes/my-data/_data/test.txt

部分含义
/var/lib/docker/volumes/my-data/_data/数据卷的实际存储路径
test.txt刚才写入的文件

关键理解:数据卷就是宿主机上的一个普通目录,可以直接用 catlscp 等命令操作。

第七步:备份数据卷

docker run --rm -v my-data:/source -v $(pwd):/backup alpine tar czf /backup/my-data-backup.tar.gz -C /source .

拆解:

部分含义
-v my-data:/source把数据卷 my-data 挂载到容器的 /source
-v $(pwd):/backup当前目录挂载到容器的 /backup$(pwd) 是当前路径)
alpine临时容器
tar czf打包命令:c=创建,z=gzip压缩,f=指定文件名
/backup/my-data-backup.tar.gz备份文件保存位置(在 /backup 目录下)
-C /source先切换到 /source 目录
.打包当前目录(即 /source)的所有内容

关键理解

  • /source 是数据卷内容

  • /backup 是宿主机当前目录

  • 最终备份文件出现在你执行命令的目录

  • 只要 -C /任意名字-v my-data:/任意名字 保持一致就行

你想备份的数据挂载到容器哪里打包时用
数据卷 my-data/source-C /source .

备份文件保存位置挂载到容器哪里打包时指定
宿主机 /root/backup

/backup/my-data-backup.tar.g

z

第八步:删除原数据卷


docker volume rm my-data

部分含义
rmremove(删除)数据卷

注意:删除数据卷会永久丢失数据!所以要先备份。

第九步:恢复数据卷

docker volume create my-data-restored

创建新数据卷用于恢复。

docker run --rm -v my-data-restored:/target -v $(pwd):/backup alpine tar xzf /backup/my-data-backup.tar.gz -C /target

拆解:

部分含义
-v my-data-restored:/target把新数据卷挂载到 /target
-v $(pwd):/backup把当前目录(备份文件所在位置)挂载到 /backup
tar xzf解压命令:x=解压,z=gzip解压,f=指定文件
/backup/my-data-backup.tar.gz备份文件位置
-C /target解压到 /target 目录

docker run --rm -v my-data-restored:/target alpine cat /target/test.txt

验证恢复是否成功。

命令参数速查表


参数含义示例
-v挂载数据卷-v my-data:/data
--rm容器退出后自动删除docker run --rm ...
$(pwd)当前目录路径-v $(pwd):/backup
-Ctar 切换目录tar -C /source
ctar 创建tar czf
xtar 解压tar xzf
ztar gzip 压缩/解压tar czf / tar xzf
ftar 指定文件名

tar -f backup.tar.g

z


核心概念图



命令说明
1. 创建数据卷docker volume create my-data创建持久化存储
2. 写入数据docker run -it -v my-data:/data alpine sh进入容器写文件
3. 验证数据docker run --rm -v my-data:/data alpine cat /data/test.txt数据还在
4. 备份docker run --rm -v my-data:/source -v /root:/backup alpine tar czf /backup/backup.tar.gz -C /source .打包到宿主机
5. 删除docker rm <容器> + docker volume rm my-data模拟数据丢失
6. 恢复docker run --rm -v my-data-restored:/target -v /root:/backup alpine tar xzf /backup/backup.tar.gz -C /target解压恢复



推荐阅读

24步:常用操作

容器日志问题默认情况下,容器将 stdout/stderr 输出到 json-file 日志驱动,日志文件存在宿主机 /var/lib/docker/containers/&lt;container-id&gt;/&lt;container-id&gt;-json.log。如果不加限制,日志会无限增长,占满磁盘。1. 查看日志 docker logs &lt;容器名&gt; # 打印全部 docker logs --tail 100

58 0 赞2026-05-13分享技术专题

23步:Docker 技能验证测试

第 1 题:基础命令(10分)题目: 拉取 ubuntu:22.04 镜像,并运行一个交互式容器,进入 /tmp 目录,创建一个名为 test.txt 的文件,内容为 hello docker,然后退出容器。请写出完整命令: [root@localhost ~]# docker pull ubuntu:22.04 22.04: Pulling from library/ubuntu f63eb04151bc: Pull compl

101 0 赞2026-05-13分享技术专题

第 22 步:端口映射与网络隔离原理

关键理解:默认 bridge 网络:容器 IP 是 172.17.0.x,宿主机无法直接访问容器端口,必须用&nbsp;-p 8080:80&nbsp;做端口映射自定义 bridge 网络:容器间可以通信,但外界访问仍需端口映射为什么刚才的&nbsp;my-net&nbsp;容器不能从外部访问?因为它们没有&nbsp;-p&nbsp;参数,宿主机不知道如何转发流量第 22 步操作:测试端口映射 + 自定义网络1. 运行一个 Nginx

88 0 赞2026-05-12分享技术专题

第 21 步:Docker 网络基础原理

Docker 默认提供三种网络驱动:网络模式特点适用场景bridge默认网络,容器通过 NAT 访问外网,容器间需端口映射单机、简单场景host容器直接使用宿主机网络栈(无隔离)性能敏感、端口不冲突none无网络完全隔离、特殊安全场景overlay跨多台宿主机通信(Swarm/K8s)集群场景你之前用的默认 bridge 网络的问题:容器间不能直接用容器名通信(只能用 IP)需要手动&nbsp;--link(已废弃)自定义 bridge

81 0 赞2026-05-12分享技术专题

第 18 -19步:Docker Compose 原理

问题场景:一个 Web 应用通常需要:Nginx(前端)+ Python/Node(后端)+ MySQL/Redis(数据库)手动启动 3 个容器,还要配置网络、卷、依赖顺序 → 繁琐且容易出错解决方案:docker-compose.yml一个 YAML 文件定义所有容器的配置(镜像、端口、卷、网络、依赖)一条命令&nbsp;docker compose up -d&nbsp;启动全部一条命令&nbsp;docker compose d

95 0 赞2026-05-12分享技术专题

第 20 步:修改代码并热更新(使用 Compose)

在生产开发中,你修改代码后希望快速看到效果,有两种方式:重建镜像:docker compose up -d --build(会重新构建 web 镜像)挂载源码:开发时把代码目录挂载进去,改代码自动生效(无需重建)我们演示第二种(更接近真正的开发体验)。

84 0 赞2026-05-12分享技术专题

第 17 步:上传镜像到 Docker Hub(分享给别人)

前提:&nbsp;在&nbsp;https://hub.docker.com&nbsp;注册一个免费账号(如果还没有)原理:Docker Hub 是公共镜像仓库(类似 GitHub for 镜像)上传命令:docker push 用户名/镜像名:标签上传前需要先&nbsp;docker tag&nbsp;打上正确标签第 17 步操作(如果你有 Docker Hub 账号)1. 登录 Docker Hubbash docker logi

92 0 赞2026-05-12分享技术专题

第 16 步:更新镜像 - 修改代码后重新构建

场景:&nbsp;你修改了代码,需要更新容器。核心原则:&nbsp;不要手动进入容器改文件,而是重新构建镜像&nbsp;→ 删除旧容器 → 运行新容器。第 16 步操作1. 修改 app.py,改变返回内容bash cd ~/my-python-app cat &gt; app.py &lt;&lt; 'EOF' from http.server import HTTPServer, BaseHTTPRequestHandler i

90 0 赞2026-05-12分享技术专题

第 15 步:优化 Dockerfile(减小体积 + 利用缓存)

当前 Dockerfile 的问题:任何代码修改都会导致&nbsp;COPY . /app&nbsp;重新运行,但&nbsp;apt&nbsp;之类的不需要重新安装镜像包含 Python 编译工具链(slim&nbsp;已经较小,但还可以更小)优化技巧:问题优化方法体积大使用&nbsp;alpine&nbsp;基础镜像(约 50MB vs 122MB)依赖变化频繁先&nbsp;COPY requirements.txt&nbsp;安装依

87 0 赞2026-05-12分享技术专题

第 14 步:Dockerfile 基础原理

制作自己的镜像 是 Docker 最核心的技能,也是从“使用者”变成“创造者”的关键一步

59 0 赞2026-05-12分享技术专题
admin

发文31·粉丝0

目录

沉浸

点赞

分享

收藏

文章目录
广告