Docker学习六:数据管理

来源:互联网 发布:淘宝人气宝收藏有用吗 编辑:程序博客网 时间:2024/06/05 21:01

容器数据管理的2个主要方式:

       Data volumes(数据卷)

       Data volume containers(数据卷容器)


一、数据卷

      1、数据卷特性:

      数据卷是一个由 UFS 文件系统专门设计的的特殊目录,它可以提供很多有用的特性:
      • 数据卷可以在容器之间共享和重用
      • 对数据卷的改变是立马生效
      • 当你更新数据卷中的数据的时候,不会被包含到 image 中
      • 卷会一直存在直到没有容器使用他们


      2、数据卷特点:

      • 数据卷在容器启动初始化时,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。
      • 数据卷可以在容器直接共享和重用。
      • 可以直接对数据卷里的内容进行修改。
      • 数据卷的变化不会影响镜像的更新。
      • 卷会一直存在,即使挂载数据卷的容器已经删除。


      3、添加一个数据卷

      在用 docker run 命令的时候,使用 -v 标记来添加一个数据卷。在一次 run 中多次使用可以挂载多个数据卷,下面加载一个卷到 web 容器上。

sudo docker run -it --name web -v  /webapp centos:1.0 /bin/bash

       webapp 是容器中的目录,目录不存在会从新创建。


      4、挂载一个主机目录作为数据卷

      使用 -v 标记也可以挂载一个主机的目录到容器中去

sudo docker run -it --name web -v  /opt/webapp:/webapp centos:1.0 /bin/bash
     /opt/webapp为宿主机目录、webapp 是容器中的目录,目录不存在会从新创建。这个在测试的时候特别好用,比如我们可以加载我们的源码到容器中,来查看他们是否正常工作。目录的路径必须是主机上的绝对路径。

       注意 :dockerfile  中不能用,各种操作系统的文件路径格式不一样,所以不一定适合所有的主机

sudo docker run -it --name web -v  /opt/webapp:/webapp:ro centos:1.0 /bin/bash

       docker加载的数据卷默认是读写权限,加了 ro 之后,就挂载为只读了。


       5、挂载一个宿主主机文件作为数据卷

sudo docker run --rm -it -v ~/.bash_history:/.bash_history centos:1.0 /bin/bash

二、数据卷容器

      如果你有一些持续更新的数据需要在容器之间共享,最好创建 Data Volume Container ,然后加载它。注意:数据卷容器会降低I/O性能。

      1、创建一个容器数据卷

sudo docker run -itd -v /logdata --name logdata centos:1.0

      /logdata是数据卷容器内共享的目录。


      2、在其他容器中挂载logdata容器的数据卷

sudo docker run -itd --name web1 --volumes-from logdata centos:1.0
sudo docker run -itd --name web2 --volumes-from logdata centos:1.0
       分别进入web1、web2容器中,会有一个/logdata目录,在web1里的/logdata目录创建文件,web2也能看的到。删除web1、web2,时,数据卷并不会被自动删除。如果想删除需在删除最后一个挂载着它的容器时使用docker rm -v 命令来指定删除关联的容器。



三、数据卷容器备份和还原

     1、备份

sudo docker run --volumes-from logdata -v /container_backup:/backup centos:1.0 tar cvf /backup/backup.tar /data

      说明:先创建一个临时容器,并挂载logdata容器数据卷,再挂载数据卷/container_backup目录到容器/bakcup,在容器中执行备份/data目录到/backup,也就是备份到宿主机/container_backup目录。


     2、恢复

      先创建一个数据卷容器

sudo docker run -v /data --name logdata2 centos:1.0
       注意:这个数据卷目录名要与备份的一样

      再将备份文件恢复到这个数据卷容器

sudo docker run --volumes-from logdata2 -v /container_backup:/backup centos:1.0 tar xvf /backup/backup.tar
       最后启动一个容器挂载验证/data目录数据恢复成功

sudo docker run -itd --volumes-from logdata2 --name web_recover centos:1.0



四、迁移容器和镜像

      1、先创建测试容器

sudo docker exec web touch /opt/test.txtsudo docker exec web ls /opt

      

      2、执行导出

sudo docker export web > web.tar

    

      3、执行导入

cat web.tar | sudo docker import - web:v2

    

      4、启动容器

sudo docker run -itd --name web_v2 web:v2 /bin/bash

      

      5、进入容器查看

sudo docker exec web_v2 ls /opt

      

      6、save与load命令使用,一般用于迁移镜像到别处

      导出:

sudo docker save web > web.tar
      导入:

sudo docker load < web.tar
     注:不会丢弃历史记录和元数据,并可以回滚版本。启动不用加/bin/bash


参考原始文章:http://lizhenliang.blog.51cto.com/7876557/1730892


原创粉丝点击