7、Docker容器的数据管理

一、Docker容器的数据卷
         docker的理念之一是将应用与其运行的环境进行打包,因此通常docker容器的生存周期与在容器中运行的程序的
生存周期是一致的,但对于数据的要求是持久化的。另外,docker容器之间也需要一个共享数据的渠道,故有了数据卷。
        1、什么是数据卷
                   a)数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。
                   b)数据卷的设计的目的,在于数据的永久化,它完全独立与容器的生命周期,因此,docker不会在容器删除
            时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理。
                   
                   数据卷:a)它是独立存在于docker宿主机中,与docker容器的生命周期是分离的;b)docker数据卷本
            质上是存在于docker宿主机中的文件系统;c)docker数据卷可以是文件也可以是目录;d)docker容器可以利用
            数据卷与宿主机进行数据共享;e)同一个目录或文件可以支持多个容器的访问。
                    数据卷的特点:a)数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷
            贝到新初始化的数据卷中。b)数据卷可以在容器之间共享和重用。c)可以对数据卷里的内容直接进行修改。
            d)数据卷的变化不会影响镜像的更新。e)卷会一直存在,即使挂载数据卷的容器已经被删除
           
                    ~/container_data指定宿主机中的目录:data指定容器中的目录
                    在容器中往data目录下添加文件,也是在宿主机中的container_data目录下添加文件。
                   
                    使用docker inspect 查看刚创建的容器,可以查看容器是否挂载了数据卷
                   
                docker run -it -v ~/datavolume:/data:ro --name=dvt2 ubuntu /bin/bash   :ro设置容器对数据卷只有只读权限

      2、数据卷的使用
                使用dockerfile构建包含数据卷的镜像
                    dockerfile指令:  volume ["/data"]
                    dockerfile中创建的数据卷是不能映射到系统中已存在的文件目录的。

                    #For Data Volume Test
                    FROM ubuntu:14.04
                    VOLUME ["/datavolume1","/datavolume2"]
                    CMD /bin/bash
                    如上创建的镜像创建了两个数据卷   docker build -t myrep01/dvt3 .
                    依据创建的镜像启动容器     docker run --name=dvt4 -it myrep01/dvt3
                    在容器中查看文件有datavolume1,datavolume2两个文件夹
                    退出容器,使用docker inspcet dvt4查看容器信息,可以看到数据卷在宿主机的位置
                   
                   
               
   
二、Docker的数据卷容器
                1、什么是数据卷容器
                        命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器称为数据卷容器
                       
                2、数据卷容器的使用
                      docker run --volumns-from [container name]   由创建容器时通过--volumns-from 指定

                     docker run -it --name dvt6 --volumes-from dvt5 ubuntu /bin/bash
                     docker run -it --name dvt7 --volumes-from dvt5 ubuntu /bin/bash
                     dvt5是挂载了数据卷的数据卷容器
                     dvt6和dvt7也会挂载dvt5中挂载的数据卷,docker rm dvt5,将dvt5删除,并不影响dvt6和dvt7的数据卷加载
                    
                     docker run -it --name dvt8 --volumes-from dvt7 ubuntu /bin/bash
                     docker rm -v dvt7
                     使用docker rm -v 表示将容器挂载的数据卷也同时删除,
                     docker start dvt8
                     docker attach dvt8
                     进入dvt8容器中,依然可以使用挂载的数据卷,这是因为,在docker中如果一个数据卷还在被容器使用,那么它就会一直
                     存在。

三、Docker数据卷的备份和还原
                    1、数据备份方法
                         a)docker run --volumes-from [container name]    -v $(pwd):/backup ubuntu  tar cvf /backup/backup.tar   [container data volume]
                       
                        执行以上命令后的结果:执行备份命令容器既挂载了一个需要备份的数据卷,同时也挂载了一个存放备份数据的数据卷;
                       
                        docker run --volume-from dvt5 -v ~/backup:/backup --name dvt10 ubuntu tar cvf /backup/dvt5.tar /datavolume1
                         --volume-from dvt5指定要备份数据卷容器
                         -v ~/backup  -v 指定宿主机中备份文件存放路径
                        :/backup 指定容器中备份文件存放路径
                         tar cvf /backup/dvt5.tar 执行备份命令,压缩文件
                        /datavolume1 需要备份的数据卷
                       
                       
                    2、数据还原方法
                            docker run --volumes-from [container name]    -v $(pwd):/backup ubuntu  tar cvf /backup/backup.tar   [container data volume]
                            与数据卷的备份是一样的
                   

猜你喜欢

转载自chentian114.iteye.com/blog/2293556