docker 数据卷

1数据卷

数据卷是一个可供容器使用的特殊目录。它将主机操作系统目录直接映射进容器,类似于Linux中的mount的命令

    1.数据卷可以在容器之间共享和重用,容器间传递数据将变得高效和方便

    2. 对数据卷的修改会马上生效,无论容器内操作还是本地操作

    3. 对数据卷的更新,不会影响镜像,解耦开应用和数据;

    4. 卷会一直存在,知道没有容器使用,可以完全的卸载它

 1.1创建数据卷

docker 提供了volume子命令来管理数据卷

docker volume create -d centos test

查看

ls -l  /var/lib/docker/volumes

除了create 子命令外,docker volume还支持inspect(查看详细信息),ls (列出已有数据卷),prune (清理无用数据卷),rm(删除数据卷)等

1.2 绑定数据卷

在用docker  [container] run 命令的时候,可以使用-mount 选项来使用数据卷

-mount 数据卷如下:

volume: 普通数据卷,映射到主机/var/lib/docker/volumes路径下;

bind: 绑定数据卷,映射到主机指定路径下

tmpfs: 临时数据卷,只存在于内存中

使用training/webapp镜像创建一个web容器,并创建一个数据卷挂载到容器/opt/webapp目录

docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py

可以使用-v标记在容器内创建一个数据卷

docker run -d -P --name web -v /webapp:/opt/webapp  training/webapp python app.py

-v 也可以指定挂载一个本地的已有目录到容器中去作为数据卷

docker run -d -P --name web -v /src/webapp:/opt/webapp test

加载主机的/src/webapp 目录到容器的/opt/webapp 目录

这个功能在进行测试的时候十分方便,用户可以放置一些程序或数据到本地目录中,然后在容器内运行和使用。另外目录的路径必须是绝对路径,如果目录不存在,docker 会自动创建

docker 挂载数据卷的默认权限为读写(rw),可以通过ro指定为只读

docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

挂载一个本地主机文件作为数据卷

docker run --rm -it -v ~/.bash_history:/.bash_history  ubuntu /bin/bash

注释:如果直接挂载一个文件到容器,使用文件编辑工具,包括vi或者sed --in -place的时候,可能会造成文件inode的改变,从Docker1.1.0起,这会导致报错误信息,所以推荐的方式是直接挂载文件所在的目录

2. 数据卷容器

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

1.创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata

[root@ybsrv1 /data/webapp]# docker run -ti -v /dbdata --name dbdata centos 

[root@d68d854d552a /]# 

然后可以在其他容器中使用--volumes-from 来挂载dbdata容器中的数据卷,创建db1 db2 并从dbdata容器挂载数据卷

[root@ybsrv1 /data/webapp]# docker run -it --volumes-from dbdata --name db1 centos

[root@ybsrv1 /data/webapp]# docker run -it --volumes-from dbdata --name db2 centos

测试:

#在dbdata上/dbdata文件下创建文件
[root@ybsrv1 /data/webapp]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b2f0ea880639        centos              "/bin/bash"         2 minutes ago       Up 2 seconds                            db2                 
7265c5c841b8        centos              "/bin/bash"         3 minutes ago       Up 8 seconds                            db1                 
d68d854d552a        centos              "/bin/bash"         6 minutes ago       Up 14 seconds                           dbdata              
[root@ybsrv1 /data/webapp]# docker attach d6
[root@d68d854d552a /]# cd dbdata/
[root@d68d854d552a dbdata]# ll
total 0
[root@d68d854d552a dbdata]# echo 'niu' >ceshi.txt


#在db2上查看
[root@ybsrv1 ~]# docker attach b2f 
[root@b2f0ea880639 /]# cd dbdata/
[root@b2f0ea880639 dbdata]# ll
total 4
-rw-r--r--. 1 root root 4 Apr  9 09:12 ceshi.txt

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

[root@ybsrv1 ~]# docker run  -d --name db3 --volumes-from db1 centos 
f74d8658e2414a105b524cb9602f08b1c3e9ff0a261c1803413a45062db71048

注意:

使用 --volumes-from 参数所挂载数据卷的容器姿势并不需要保持在运行状态

如果删除了挂载的容器(包括dbdata, db1 和db2 )数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载这它的容器时显示使用docker rm -v 命令来指定同事删除关联的容器

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

3. 利用数据卷容器迁移数据

可以利用数据卷容器对其中的数据卷进行备份,恢复,以实现数据的迁移

1. 备份

docker run --volumes-from dbdata -v /data/webapp:/backup --name worker centos

tar cvf /backup/backup.tar.gz /dbdata

解析如下:

       使用centos镜像创建一个容器worker.使用--volumes-from dbdata 参数来让worker 容器挂载到dbdata容器的数据卷(即dbdata数据卷);使用-v /data/webapp:/backup参数来挂载本地的当前目录到worker容器的/backup目录。

       worker 容器启动后,使用 tar cvf /backup/backup.tar.gz /dbdata命令来将/dbdata下内容为容器的/backup/backup.tar ,即宿主主机当前目录下的backup.tar.gz

恢复

恢复数据到一个容器,如下 

docker run -v /dbdata --name db4 centos /bin/bash

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

docker run --volumes-from db4 -v /data/webapp/:/backup busybox tar xf /backup/backup.tar.gz

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值