Docker入门(4)-数据管理

  • Docker系列参考自书籍<Docker技术入门与实战>,本博客以笔记为主. 如果转载请注明出处,谢谢各位大哥了. -博客园:玲珑骰子安红豆

   

   

  • 前文提要
    • 用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据惊醒备份,甚至多个容器之间进行共享,这必然涉及到容器的数据管理操作.
    • 容器中管理数据有两种主要方式:
      • 数据卷;
      • 数据卷容器

   

  • 数据卷
    • 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:
      • 数据卷可以在容器之见共享和重用
      • 对数据卷的修改会立马生效
      • 对数据卷的更新不会影响镜像
      • 卷会一直存在,直到没有容器使用
    • 数据卷的使用,类似于Linux下对目录或者文件进行mount操作.

       

    • 在容器内创建一个数据卷
      • 在用docker run 命令的时候,使用-v标记可以在容器内创建一个数据卷.多次使用-v标记可以创建多个数据卷.
      • 下面将使用centos镜像创建一个容器,并创建一个数据卷挂在到容器的/webapp目录
        • docker run -t -i -P -v /webapp --privileged=true --name web centos:latest bash
      • ps:--privileged=true命令是为了给docker容器提权,让其能访问宿主机文件 -P是允许外部访问容器需要暴露的端口

         

       

    • 挂载一个主机目录作为数据卷(最常用)
      • 使用-v标记可以指定挂在一个本地的有目录到容器中作为数据卷:
        • [root@izt4n97garwn1ni986vmhjz wordpress]# docker run -ti --name web1 --privileged=true -v /home/wordpress/:/home/:ro centos:latest bash
        • [root@9f599a8ed882 /]# cd /home/
        • [root@9f599a8ed882 home]# ll
        • total 8444
        • drwxr-xr-x 5 nobody 65534 4096 Aug 17 08:02 wordpress
        • -rw-r--r-- 1 root root 8641990 Aug 4 07:54 wordpress-4.8.1-zh_CN.tar.gz

         

      • 上面的命令是加载/home/wordpress目录到容器的/home目录下.
        • 注意:1.本地路径必须是绝对路径
          • 2.如果本地路径不存在,docker会自动创建
          • 3.Docker挂载数据卷的默认权限是读写(rw),用户可以指定,ro为只读
            • 例子:docker run -ti --name web1 --privileged=true -v /home/wordpress/:/home/:ro centos:latest bash

                 

    • 挂在一个本地主机文件作为数据卷
      • -v标记也可以挂载单个文件到容器中作为数据卷.其命令与挂载目录大同小异.
        • [root@izt4n97garwn1ni986vmhjz wordpress]# docker run -ti --name web2 --privileged=true -v /home/wordpress/wordpress-4.8.1-zh_CN.tar.gz:/home/wordpress-4.8.1-zh_CN.tar.gz centos:latest bash
        • [root@2b928dba921d /]# cd /home/
        • [root@2b928dba921d home]# ll
        • total 8440
        • -rw-r--r-- 1 root root 8641990 Aug 4 07:54 wordpress-4.8.1-zh_CN.tar.gz

   

  • 挂载文件会有一些问题,比如修改文件的话,会改变文件的inode,会引发异常.所以一般是挂在文件所在目录到docker容器中

   

  • 数据卷容器
    • 如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器.
    • 数据卷容器其实就是一个普通的容器,专门用它提供数据卷供其他容器挂载,使用方法如下:
      • 容器创建:
        • 首先,创建一个数据卷容器data,并在其中创建一个数据卷挂载到/data:
          • [root@Ninemax-LPC3 data]# docker run -ti -v /data/:/data --name data centos:7.3 bash

           

        • 然后再其他容器使用--volumes-from 来挂载data容器中的数据卷,例如创建db1和db2都挂载同一个数据卷到相同的/data目录,
          • [root@Ninemax-LPC3 data]# docker run -ti --volumes-from data --name db1 centos:7.3 bash
          • [root@Ninemax-LPC3 data]# docker run -ti --volumes-from data --name db2 centos:7.3 bash
        • 三个容器任何一方在改目录下写入,其他容器都可以看到.
        • 也可以多次使用 --volumes-from参数来从多个容器挂载多个数据卷,还可以从其他已经挂在了数据卷的容器来挂载数据卷.
          • 从其他容器挂载数据卷:
            • [root@Ninemax-LPC3 data]# docker run -ti --volumes-from db1 --name db3 centos:7.3 bash

             

        • 注意:使用--volumes-from参数挂载目标容器,目标容器不需要保持在运行状态.

         

      • 容器删除:
        • 如果删除了挂载的容器(包括data db1 db2),数据卷并不会被自动删除,如果要删除数据卷,必须在删除最后一个还挂载着它的容器的时候,添加-v命令(docker rm -v data),来删除.

           

  • 用数据卷容器迁移数据
    • 可以利用数据卷容器对其中的数据进行备份,恢复以及实现数据的迁移,也可以在容器之间自由地升级和移动数据卷.

       

    • 备份
    • 使用下面的命令备份数据卷:
      • docker run --volumes-from data -v ${pwd}:/backup --name back centos tar cvf /backup/back.tar /data
      • 命令解释:(顺序)
        • 利用镜像创建了一个名为back的容器
        • 同时将当前目录挂载到back容器的/backup下
        • 在容器启动后,/data目录进行压缩,压缩文件(back.tar)保存在back容器的/backup目录下
        • 因为back容器的/backup关联的是宿主机的当前目录,所以返回到宿主机就会看见备份文件啦!

           

    • 恢复
      • 如果要恢复数据到一个容器,可以按照下面的操作.
        • 首先创建一个带有数据卷的容器:db2
          • docker run -v /data --name db2 centos:7.3 bash
        • 然后创建另一个新的容器,挂载db2的容器,并且使用untar解压备份文件到所挂载的容器卷中即可
          • docker run --volumes-from db2 -v ${pwd}:/backup centos tar xvf /backup/back.tar (此命令操作的文件与备份相关)
        • 其实也不需要创建两个容器,也可以合并成一个容器去操作! 但是为了保证数据卷容器与宿主机分离,所以建议像上面一样操作

       

   

posted @ 2017-08-22 19:38  玲珑骰子安红豆  阅读(365)  评论(0编辑  收藏  举报