如何在Docker中进行数据管理

Docker 数据管理

在Docker内部以及容器之间管理数据,在容器中管理数据主要有两种方式

数据卷

数据卷容器

一、数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:

数据卷可以在容器之间共享和重用 
对数据卷的修改会立马生效 
对数据卷的更新,不会影响镜像 
卷会一直存在,直到没有容器使用

数据卷的使用,类似于Linux下对目录或文件进行mount。

1.创建一个数据卷

在用 docker run命令的时候,使用-v标记来创建一个数据卷并挂载到容器里。在一次run中多次使用可以挂载多个数据卷。

下面创建一个web容器,并加载两个数据卷到容器的/webdata1/webdata2目录

首先在本地创建两个目录/tmp/webdata1webdata2

这里写图片描述

然后将数据卷挂载到容器上去

# docker run -t -i --name datac -v /tmp/webdata1:/webdata1 -v /tmp/webdata2:/webdata2 ubuntu:14.04 /bin/bash

这里写图片描述
可以看到在容器内自动创建了webdata1webdata2这两个目录的,-v可以多次使用,-v后面接的是宿主机的目录:容器中的目录

扫描二维码关注公众号,回复: 358701 查看本文章

2.查看数据卷的信息

使用docker inspect <container id>docker inspect <container NAMES>查看datac容器中的数据卷信息

# docker inspect c60b21d79e3f

这里写图片描述

3.验证是否挂载成功

然后进入容器,在数据卷里写入数据,然后在宿主机查看是否存在信息

创建一个test.txt文件

这里写图片描述

然后去宿主机的/tmp/webdata1/下查看是否存在该文件

这里写图片描述

如图,发现是有该文件的,说明成功了

4.数据卷权限

挂载的数据卷默认是可读可写权限RW,但是我们可以限制该权限

可以在启动容器时,限制为只读权限(ro->onlyread)

创建目录mkdir /tmp/readonlydataweb

以只读的方式挂载到容器

# docker run -t -i --name datacro -v /tmp/readonlydata:/rodata:ro ubuntu:14.04 /bin/bash

然后尝试在容器的rodata目录创建文件,发现是不允许的

这里写图片描述

二、数据卷容器

如果我们有一些持续更新的数据需要在容器之间共享,那最好创建数据卷容器。数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。

1.创建一个命名的数据卷容器dbdata

数据卷容器创建方法跟普通容器一样,只需要指定宿主机的一个文件夹作为数据卷即可,使用docker create命令创建但不启动数据卷容器

# docker create -v /tmp/webdata1 --name dbdata ubuntu:14.04 /bin/true

这里写图片描述

2.创建其他容器来挂载数据卷容器dbdata

在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷。

创建db1容器和db2容器,挂载数据卷容器dbdata:

# docker run --volumes-from dbdata --name db1 -i -t ubuntu:14.04 /bin/bash

这里写图片描述

# docker run --volumes-from dbdata --name db2 -i -t ubuntu:14.04 /bin/bash

这里写图片描述

3.验证

在db1容器中创建db1.txt文件,在db2容器中创建db2.txt文件

db1:
# touch /tmp/webdata1/db1.txt
db2:
# touch /tmp/webdata1/db2.txt

这里写图片描述

然后分别查看/tmp/webdata1/目录下的文件

这里写图片描述

彼此之间已经有了共享文件

三、数据卷容器的备份、恢复、迁移

可以利用数据卷对其中的数据进行进行备份、恢复和迁移。

1.备份

# docker run --volumes-from dbdata -v /tmp/backup:/backup ubuntu:14.04 tar cvf /backup/dbdata.tar /dbdata

这里写图片描述


# docker run --volumes-from dbdata -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/dbdata.tar /dbdata

$(pwd)当前目录

容器启动后,使用了 tar命令来将dbdata卷备份为本地的/backup/backup.tar。


# docker run --rm --volumes-from dbdata -v /tmp/backup:/backup ubuntu:14.04 tar cvf /backup/dbdata.tar /dbdata

完成备份操作后容器销毁

2.恢复

如果要恢复数据到一个容器,首先创建一个带有数据卷的容器 dbdata2

# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

这里写图片描述

然后创建另一个容器,挂载dbdata2的容器,并使用解压备份文件到挂载的容器卷中

# docker run --volumes-from dbdata2 -v /tmp/backup:/backup busybox tar xvf /backup/dbdata.tar

这里写图片描述

Docker的数据管理在这里就基本完成了

猜你喜欢

转载自blog.csdn.net/qq_39629343/article/details/80216811