《Docker技术入门与实战》 6 Docker数据管理

目录

概述

数据卷

数据卷命令与参数

创建数据卷

绑定数据卷

数据卷容器

1.创建数据卷容器

2.容器间卷挂载

利用数据卷容器实现迁移

备份

恢复


 

概述

对于Docker中的数据需要进行持久化,或者需要在多个容器间数据共享,涉及到数据管理操作。

容器中的管理数据有两种方式:

  • 数据卷 Data Volumes
    • 容器内数据直接映射到主机环境
  • 数据卷容器 Data Volume Containers
    • 使用特定容器维护数据卷
  • 容器内创建数据卷
  • 把本地目录挂载到容器内数据卷
  • 数据卷容器实现共享数据
  • 数据的备份和恢复

数据卷

可共容器使用的特殊目录,将主机操作系统目录直接映射到容器,类似mount。

特性:

  • 容器之间共享和重用,便于容器间传递数据。
  • 数据卷内修改立刻生效,无论容器还是本地操作。
  • 数据卷与镜像相互不影响,解耦应用和数据。
  • 卷会一直存在,直至没有容器使用,可安全卸载。

数据卷命令与参数

[root@VCentOS8-181 ~]# docker volume --help

Usage:  docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

Run 'docker volume COMMAND --help' for more information on a command.

创建数据卷

[root@VCentOS8-181 ~]# docker volume create --help

Usage:  docker volume create [OPTIONS] [VOLUME]

Create a volume

Options:
  -d, --driver string   Specify volume driver name (default "local")
      --label list      Set metadata for a volume
  -o, --opt map         Set driver specific options (default map[])

示例:

[root@VCentOS8-181 ~]# docker volume create helloVolume
helloVolume
[root@VCentOS8-181 ~]# ll /var/lib/docker/volumes/
0f2bfdf60f40ee7d53a2a3bcc1188ee6ada12c4a88e1a40c6e89ecab8699fc87/ helloVolume/
12e4fb093527f17c99fab4734347699c802389b3f08f32d2801f3b03ca252b08/ metadata.db
6ba8dcd6cdeb62bbf82cd0177a47d20f727f8dae90ce0447c7903bfd08677610/ portainer_data/
[root@VCentOS8-181 ~]# ll /var/lib/docker/volumes/
总用量 24
drwxr-xr-x. 3 root root    19 11月 19 09:09 0f2bfdf60f40ee7d53a2a3bcc1188ee6ada12c4a88e1a40c6e89ecab8699fc87
drwxr-xr-x. 3 root root    19 11月 23 19:56 12e4fb093527f17c99fab4734347699c802389b3f08f32d2801f3b03ca252b08
drwxr-xr-x. 3 root root    19 11月 19 09:06 6ba8dcd6cdeb62bbf82cd0177a47d20f727f8dae90ce0447c7903bfd08677610
drwxr-xr-x. 3 root root    19 11月 25 03:15 helloVolume
-rw-------. 1 root root 32768 11月 25 03:15 metadata.db
drwxr-xr-x. 3 root root    19 11月 18 05:47 portainer_data

创建了一个名为helloVolume的卷,默认会创建到目录/var/lib/docker/volumes/

绑定数据卷

除了使用volume命令外,也可以在创建或运行容器时,绑定数据卷。

使用docker run 时,可使用-mount选项,支持三种类型。

  • volume 普通数据卷
    • 默认映射到主机 /var/lib/docker/volumes下
    • 此方式等同于-v 参数
    • 如果本地路径不存在会自动创建。
    • 可追加挂载权限,如ro等,默认是rw。
    • 也可以挂载文件,但1.1.0版本后,更建议挂载目录而不是文件。
  • bind 绑定数据卷
  • tmpfs 临时数据卷

举例:

[root@VCentOS8-181 volumes]# docker run --mount type=bind,source=/home/yeqiyu/volumes,destination=/opt nginx

将本地的/home/yeqiyu/volumes 映射到容器的/opt,等价于如下命令。

[root@VCentOS8-181 volumes]# docker run -v/home/yeqiyu/volumes:/opt nginx

数据卷容器

如果希望在多个容器之间更新数据,可使用数据卷容器,通过容器将数据卷映射给其他容器。数据卷容器首先是个容器,通过共享容器,将其中的数据卷共享给其他容器。

1.创建数据卷容器

docker run -it -v /dbdata --name dbdata ubuntu

2.容器间卷挂载

[root@VCentOS8-181 composetest]# docker run -it --volumes-from dbdata --name db2 ubuntu
root@c1f02cb97364:/# ls
bin  boot  dbdata  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@c1f02cb97364:/# cd /dbdata
#在db2中 创建一个文件
root@c1f02cb97364:/dbdata# touch hello01

[root@VCentOS8-181 volumes]# docker run -it --volumes-from dbdata --name db1 ubuntu
root@1c0e633b8da9:/# cd /dbdata
#在db1中可看到该文件
root@1c0e633b8da9:/dbdata# ls
hello01
  • 使用--volumes-from,挂载数据卷的容器不需要保持运行状态
  • 当有多个容器挂载到数据卷时,删除一个容器,数据卷不会被删除
  • 当删除最后一个容器时,需要使用 docker rm -v 才能同时删除关联的容器

利用数据卷容器实现迁移

备份

docker run --volumes-from dbdata -v /hostbackup:/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata

看似复杂,没步骤拆开看就比较清晰了。

docker run #运行容器

--volumes-from dbdata #使用挂载到数据卷容器

-v /hostbackup:/backup #将主机的/hostbackup目录挂载到容器的/backup目录

--name worker #将容器命名为 worker

ubuntu #使用镜像ubuntu启动容器

tar cvf /backup/backup.tar /dbdata #使用tar命令,将容器内/dbdata内容备份到/backup目录。也就是备份到了主机的/hostbackup目录。

#上个例子中数据卷容器dbdata使用默认挂载,因此最终实现的是将主机 /var/lib/docker/volumes/dbdata/* 压缩复制到了 /hostbackup目录。

恢复

docker run --volumes-from dbdata -v /hostbackup:/backup --name worker ubuntu tar xvf /backup/backup.tar

是备份的一个逆过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水牧羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值