docker 数据管理

一、docker存储资源类型

用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理

(1)Data Volume (数据卷)

(2)Data Volume Dontainers --- 数据卷容器

二、Data Volume ---数据卷

Data Volume 本质上是 Docker Host 文件系统中的目录或文件,使用类似与 Linux 下对目录或者文件进行 mount 操作。数据卷可以在容器之间共享和重用,对数据卷的更改会立马生效,对数据卷的更新不会影响镜像,卷会一直存在,直到没有容器使用

Data Volume 有以下特点:

a)Data Volume 是目录或文件,而非没有格式化的磁盘(块设备)。

b)容器可以读写 volume 中的数据。

c)volume 数据可以被永久的保存,即使使用它的容器已经销毁。

Data Volume的使用:

通过-v 参数格式为 <host path>:<container path>

(1)运行一个容器,并创建一个数据卷挂载到容器的目录上

[root@localhost ~]# docker run -itd -v /web mariadb:latest /bin/bash

clip_image001

进入新创建的容器中

[root@localhost ~]# docker exec -it 5ab9c9ceb08cc74a28382691c8d37cf71eae1320e2bf54ab663507409aeb6a8d /bin/bash

clip_image002

clip_image003

可以看到创建的数据卷/web,此时里面为空

[root@localhost ~]# mkdir /test

[root@localhost ~]# cd /test/

[root@localhost test]# ls

[root@localhost test]# echo "test"> hello

[root@localhost test]# ls

hello

(2)将/web映射到宿主机的/test目录上,在容器里,不能直接映射硬盘,必须先将硬盘格式化,挂载到目录上,然后将该目录映射到共享数据卷的方法来实现

[root@localhost test]# docker run -itd -v /test:/web mariadb:latest /bin/bash

71f433584b1345d96b8b2699f58d2f1d8e0d7be2ef024551420085ca851b910f

[root@localhost ~]# docker exec -it

71f433584b1345d96b8b2699f58d2f1d8e0d7be2ef024551420085ca851b910f /bin/bash

clip_image004

在该容器里创建测试文件

clip_image005

退出该容器

clip_image006

发现在容器做的操作保存到了/test上

将该容器删除毁灭后,/test中的内容不变。

三、DataVolumeDontainers --- 数据卷容器

如果用户需要在容器之间共享一些持续更新的数据,最简单的方法就是使用数据卷容器,其实数据卷容器就是一个普通的容器,只不过是专门用它提供数据卷供其他容器挂载使用

Data Volume Dontainers使用:

a)创建一个名为 dbdata 的数据卷,并在其中创建一个数据卷挂载到 /dbdata

[root@localhost /]# docker run -dti -v /test:/dbdate --name dbser centos:latest /bin/bash

46baf4b8377674f024991eab7cd5c9410bf0c30a8fea874e1fe409756a98378d

参数为给容器指定名字为dbser方便记忆

进入创建好容器里

[root@localhost /]# docker exec -it 46baf4b8377674f024991eab7cd5c9410bf0c30a8fea874e1fe409756a98378d /bin/bash

clip_image007

b)其他容器使用--volume-from 去挂载dbdata容器中的/dbdata数据卷

[root@localhost ~]# docker run -itd --volumes-from dbser --name db1 centos:latest /bin/bash

465b7f7bbf5d42988d70ea4936fcd8f2050f47dfac791ff73bea578688fe08f4

[root@localhost ~]# docker run -itd --volumes-from dbser --name db2 centos:latest /bin/bash

ce92d47a023ca09a8a3176893b7a403f405c095d83ba5ffcc7ab73e11a8f8cdd

[root@localhost ~]# docker ps -a

clip_image008

进入db1容器内

[root@localhost ~]# docker exec -it 465b7f7bbf5d42988d70ea4936fcd8f2050f47dfac791ff73bea578688fe08f4 /bin/bash

clip_image009

进入db2容器内

[root@localhost ~]# docker exec -it ce92d47a023ca09a8a3176893b7a403f405c095d83ba5ffcc7ab73e11a8f8cdd /bin/bash

clip_image010

在db2容器内写入新内容

clip_image011

进入db1容器内查看,发现在db2中写的内容也能在db1中看到

此时,容器 db1 和 db2 同时挂载了同一个数据卷到本地相同 /dbdata目录。三个容器任何一个目录下的写入,都可以时时同步到另外两个

clip_image012

原文地址:https://www.cnblogs.com/liangzb310/p/11179732.html