【Docker 数据卷】笔记📒

2025-10-22 16:24:48

目录:

创建数据卷

使用 -v 参数创建数据卷 /mydata。

$ docker run -it -d --name study-volume -v /mydata ubuntu:latest

使用 docker exec 进入容器内部,查看根目录,可以看到根目录下有一个 mydata 的目录,就是我们刚才创建的数据卷。

docker exec -it study-volume /bin/bash
# ls
bin  boot  dev  etc  home  lib  media  mnt  mydata  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

数据卷就是在容器内创建目录?暂时可以这么认为,实际并不是这样的,待会儿在 数据卷容器 中会介绍实际用处。

挂载一个本机目录作为数据卷

将本机某个目录作为数据卷,和容器内目录关联起来,不管是在容器内修改文件,还是在本机修改文件,另一边都会同步变化。

比如创建一个 Nginx 容器,每次进入容器内部修改配置是件麻烦事,可以将容器内配置文件所在目录映射到本机某个目录,这样修改本机文件,容器内文件也会同步修改。

比如学习一个新的编程语言 Dart,使用 Docker 快速创建 Dart 运行环境,创建容器的同时挂载一个数据卷将本地目录和容器内目录关联起来,这样直接在本机上写代码,使用docker exec 进入容器内可以直接运行脚本,熟悉 Dart 语法。

$ docker pull dart:stable
$ docker run -it -d -v /Users/dkvirus/test:/home/dkvirus/test --name study-dart dart:stable
$ docker exec -it study-dart /bin/bash

注意:

数据卷容器

如果需要在多个容器之间共享数据,可以使用数据卷容器。数据卷容器本身也是一个容器。

创建一个容器 db-data-container,-v /dbdata 表示在容器内部创建数据卷 /dbdata

$ docker run -it -d -v /dbdata --name db-data-container ubuntu:latest

进入容器内部,可以看到根目录下有 /dbdata 目录。

$ docker exec -it db-data-container /bin/bash
# ls
bin  boot  dbdata  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

创建两个容器 db1 和 db2,创建的时候使用 --volumes-from db-data-container 命令将数据卷容器 dbdata 的数据卷挂载到 db1 和 db2 容器中。

$ docker run -it -d --volumes-from db-data-container --name db1 ubuntu:latest
$ docker run -it -d --volumes-from db-data-container --name db2 ubuntu:latest

现在不管进入 db-data-container / db1 / db2 这三个容器中的哪一个,修改 /dbdata 目录下文件,其它容器中的文件都会同步修改,做到了不同容器之间的文件共享。

$ docker exec -it db-data-container /bin/bash
$ docker exec -it db1 /bin/bash
$ docker exec -it db2 /bin/bash

db1 和 db2 都是使用 --volumes-from 参数从 db-data-container 容器挂载的数据卷,db-data-container 容器即便没有运行,数据卷共享文件也是生效的。

使用数据卷备份数据

需求:备份 db-data-container 容器 /dbdata 目录下的数据。

$ docker run --volumes-from db-data-container -v $(pwd):/backup --name worker ubuntu:latest tar cvf /backup/backup.tar /dbdata 

说明:

  1. --volumes-from db-data-container

创建 worker 容器,关联 db-data-container 数据卷容器,这样 worker 容器根目录也有 /dbdata 目录了;

  1. -v $(pwd):/backup

将本机当前目录和容器内 /backup 目录关联起来;

  1. tar cvf /backup/backup.tar /dbdata

worker 容器启动后,使用 tar 命令将容器内的 /dbdata 目录打包到容器内的 /backup/backup.tar 文件中;

  1. 在第二步时将本机当前目录和容器内 backup 目录关联起来了,这会儿查看本机当前目录下会出现 backup.tar 文件;

使用数据卷恢复数据

需求:本机当前目录下有 backup.tar 文件,将数据恢复到 db-data-container2 容器中。

$ docker run -it -d -v /dbdata --name db-data-container2 ubuntu:latest
$ docker run --volumes-from db-data-container2 -v $(pwd):/backup ubuntu:latest tar xvf /backup/backup.tar

说明:

  1. 创建一个数据卷容器 db-data-container2,容器内有一个数据卷 /dbdata;
  2. --volumes-from db-data-container2

创建一个容器,关联数据卷容器 db-data-container2,这样新容器根目录下也有 /dbdata 目录了;

  1. -v $(pwd):/backup

将本机当前目录和容器内 backup 目录关联起来;

  1. tar xvf /backup/backup.tar

新容器启动后,使用 tar 命令将容器内的 /backup/backup.tar 文件解压到容器内的 /dbdata 目录中;

这里 tar 命令不需要加 -C 参数指定将压缩包解压缩到哪个目录,默认是直接解压缩到数据卷中;

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: