Docker之数据卷和数据卷容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker之数据卷和数据卷容器相关的知识,希望对你有一定的参考价值。

数据卷是一个可供容器使用的特殊目录,可以在容器之间共享和重用,对数据卷的修改会马上生效,卷会一直存在直到没有容器使用,数据卷的使用类似于mount

数据卷容器就是一个普通的容器,可专门提供数据卷供其他容器挂载使用,可以在容器之间共享一些持续更新的数据


1:创建数据卷

利用镜像centos,创建一个名为tomcat的容器,并在后台以守护进程方式工作,且将本地的/b2b/目录挂在在新建立的tomcat容器的/test目录下

[email protected]:/home/zxl# docker run -d --name=tomcat -v /b2b:/test -it centos 

3865efc4c698fe74c4975e18ca80f113130e8c76e0d4f175dc53e22f68a9ec15

进入tomcat容器,并启动/bin/bash

[email protected]:/home/zxl# docker exec -it tomcat /bin/bash

[[email protected] /]# ls /test/

在tomcat容器的/test目录下创建一个叫haha的文件

[[email protected] /]# touch /test/haha

[[email protected] /]# ls /test/

haha

[[email protected] /]# exit

exit

退出tomcat容器后,进入本地的/b2b/目录下

[email protected]:/home/zxl# cd /b2b/

可以看到高才在tomcat容器中创建的文件在

[email protected]:/b2b# ll

total 8

drwxr-xr-x  2 root root 4096 Aug  3 11:18 ./

drwxr-xr-x 24 root root 4096 Aug  3 11:17 ../

-rw-r--r--  1 root root    0 Aug  3 11:18 haha


2:创建数据卷容器

首先用centos镜像创建一个叫dbdata的数据卷容器,并将本地的/dbdata目录挂载到dbdata数据卷容器的/dbdata目录下,也可以不挂载

[email protected]:/b2b# docker run -it -v /dbdata:/dbdata --name dbdata centos

[[email protected] /]# exit

exit

再用centos镜像新创建db1和db2两个容器,并用--volumes-from 参数挂载dbdata数据卷容器上的数据卷

[email protected]:/b2b# docker run -it --volumes-from dbdata --name db1 centos

[[email protected] /]# exit

exit

[email protected]:/b2b# docker run -it --volumes-from dbdata --name db2 centos

[[email protected] /]# exit 

exit

启动db1容器

[email protected]:/b2b# docker start db1

db1

进入到db1容器中的/dbdata目录下,创建一个叫做hehehe的文件

[email protected]:/b2b# docker exec -it db1 /bin/bash

[[email protected] /]# 

[[email protected] /]# cd /dbdata/

[[email protected] dbdata]# ll

total 0

[[email protected] dbdata]# touch hehehe

[[email protected] dbdata]# ll

total 0

-rw-r--r-- 1 root root 0 Aug  3 04:02 hehehe

[[email protected] dbdata]# exit

exit

启动db1容器

[email protected]:/b2b# docker start db2

db2

进入到db1容器中的/dbdata目录下,可以看到db1创建的hehehe文件,并创建一个叫做hahaha的文件

[email protected]:/b2b# docker exec -it db2 /bin/bash 

[[email protected] /]# cd /dbdata/

[[email protected] dbdata]# ll

total 0

-rw-r--r-- 1 root root 0 Aug  3 04:02 hehehe

[[email protected] dbdata]# touch hahaha

[[email protected] dbdata]# ll

total 0

-rw-r--r-- 1 root root 0 Aug  3 04:05 hahaha

-rw-r--r-- 1 root root 0 Aug  3 04:02 hehehe

[[email protected] dbdata]# exit 

exit

启动并进入数据卷容器dbdata

[email protected]:/b2b# docker start dbdata 

dbdata

[email protected]:/b2b# docker exec -it dbdata /bin/bash 

[[email protected] /]# cd /dbdata/

在/dbdata目录下可以看到db1和db2创建的文件,且创建一个叫aaaa的文件

[[email protected] dbdata]# ll

total 0

-rw-r--r-- 1 root root 0 Aug  3 04:05 hahaha

-rw-r--r-- 1 root root 0 Aug  3 04:02 hehehe


[[email protected] dbdata]# touch aaaaa

[[email protected] dbdata]# ll

total 0

-rw-r--r-- 1 root root 0 Aug  3 07:24 aaaaa

-rw-r--r-- 1 root root 0 Aug  3 04:05 hahaha

-rw-r--r-- 1 root root 0 Aug  3 04:02 hehehe

将hehehe文件删除

[[email protected] /]# rm /dbdata/hehehe 

rm: remove regular empty file ‘/dbdata/hehehe‘? y

[[email protected] /]# cd /dbdata/

[[email protected] dbdata]# ll

total 0

-rw-r--r-- 1 root root 0 Aug  3 07:24 aaaaa

-rw-r--r-- 1 root root 0 Aug  3 04:05 hahaha

[[email protected] dbdata]# exit

exit

进入db1容器,可以看到aaaa且hehehe被删除了

[email protected]:/b2b# docker exec -it db1 /bin/bash

[[email protected] /]# cd /dbdata/

[[email protected] dbdata]# ll

total 0

-rw-r--r-- 1 root root 0 Aug  3 07:24 aaaaa

-rw-r--r-- 1 root root 0 Aug  3 04:05 hahaha


在本地的/dbdata目录下叶可以看到文件,因为在创建数据卷容器dbdata时,将本地的/dbdata目录挂在到了数据卷容器的/dbdata目录下

[email protected]:/b2b# cd /dbdata/

[email protected]:/dbdata# ll

total 8

drwxr-xr-x  2 root root 4096 Aug  3 15:25 ./

drwxr-xr-x 25 root root 4096 Aug  3 11:41 ../

-rw-r--r--  1 root root    0 Aug  3 15:24 aaaaa

-rw-r--r--  1 root root    0 Aug  3 12:05 hahaha


可以多次使用--volumes-from 参数从多个容器挂在多个数据卷,也可以从其他已经挂载了容器卷的容器来挂载数据卷。

使用数据卷容器可以让用户在容器之间自由的升级和移动数据


备份


首先利用centos镜像创建一个容器worker,使用--volumes-from dbdata参数来让worker容器挂载的数据卷容器dbdata的数据卷,使用-v $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录,worker容器启动后,使用tar -cvf /backup/back.tar /dbdata来将/dbdata下的文件备份为容器内的/backup/back.tar,即宿主机当前目录下的back.tar(因为宿主机的当前目录挂载在容器内的/backup目录,宿主机=本地)


[email protected]:~# docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos  tar -cvf /backup/back.tar /dbdata

tar: Removing leading `/‘ from member names

/dbdata/

/dbdata/hahaha

/dbdata/aaaaa


[email protected]:~# pwd

/root

[email protected]:~# ll 

total 40

drwx------  3 root root  4096 Aug  3 16:57 ./

drwxr-xr-x 25 root root  4096 Aug  3 11:41 ../

-rw-r--r--  1 root root 10240 Aug  3 16:44 back.tar

drwxr-xr-x  2 root root  4096 Aug  3 15:25 dbdata/


恢复

首先利用centos镜像创建一个数据卷容器dadata1

[email protected]:~# docker run -v /dbdata1 --name dadata1 centos /bin/bash 

然后利用centos镜像新创建另一个容器,挂载dadata1的数据卷,并使用untar解压备份文件到挂载的数据卷之中,这样就实现了利用备份压缩文件.tar,重新解压恢复到一个新容器中

[email protected]:~# docker run --volumes-from dadata1 -v $(pwd):/backup centos tar xvf /backup/back.tar

dbdata/

dbdata/hahaha

dbdata/aaaaa



本文出自 “11097124” 博客,请务必保留此出处http://11107124.blog.51cto.com/11097124/1953392

以上是关于Docker之数据卷和数据卷容器的主要内容,如果未能解决你的问题,请参考以下文章

Docker创建私有仓库 | 数据卷和数据卷容器 | 容器互联 操作详解

Docker创建私有仓库 | 数据卷和数据卷容器 | 容器互联 操作详解

Docker-数据卷和数据容器卷

docker-ce-17.09 数据卷和数据卷容器

docker数据管理与网络通信之数据卷与数据卷容器

Docker 数据卷