美文网首页Pentest
Docker之数据卷

Docker之数据卷

作者: cws | 来源:发表于2017-12-09 22:43 被阅读13次

    原文链接:http://wyb0.com/posts/docker-volume/

    0x00 为什么使用数据卷

    Docker镜像是由多个文件系统(只读层)叠加而成的。
    当一个容器启动时Docker会加载只读镜像层并在其上添加一个读写层。
    读写层中的修改在镜像重新启动后会全部丢失。
    在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。
    
    如果想要保存数据,则可以使用数据卷来在容器外面保存数据,主要为如下两种方式:
    * 使用docker run运行容器时指定数据卷
    * 在Dockerfile中直接指定数据卷
    

    0x01 docker run挂载Volume(使用-v参数)

    • 不指定主机目录
    #运行完后容器中的根目录下就会多个data文件夹,这个就是数据卷
    $ docker run -itd --name v_test -v /data debian:jessie /bin/bash
    root@d145e8c6f874:/# ls
    bin   data  etc   lib    media  opt   root  sbin  sys  usr
    boot  dev   home  lib64  mnt    proc  run   srv   tmp  var
    root@d145e8c6f874:/# exit
    exit
    
    #查看数据卷的对应位置,前者是宿主机的位置,后者是容器中的位置
    $ docker inspect -f {{.Mounts}} v_test
    [{volume 8f39f7de0f851e0bfbcfdd4561fbb20484f01f864ce00a159b09bdcdf743e068 /var/lib/docker/volumes/8f39f7de0f851e0bfbcfdd4561fbb20484f01f864ce00a159b09bdcdf743e068/_data /data local  true }]
    
    • 指定主机目录(只能通过-v参数实现,Dockerfile不行)
    $ docker run -itd -v /home/var/docker_data:/data debian:jessie /bin/bash
    root@d853c4ca7632:/# exit
    exit
    $ docker inspect -f {{.Mounts}} d853c4ca7632
    [{bind  /home/var/docker_data /data   true rprivate}]
    $ docker inspect -f {{.Mounts}} d853c4ca7632
    [{bind  /home/var/docker_data /data   true rprivate}]
    
    # 本机创建文件,容器中就会同时出现
    #宿主机创建文件
    $ sudo touch /var/lib/docker/volumes/8f39f7de0f851e0bfbcfdd4561fbb20484f01f864ceb09bdcdf743e068/_data/a.txt
    
    #容器可以查看到文件同样被创建
    root@8e1ccd30fe33:/# ls data/
    a.txt
    

    0x02 通过Dockerfile声明Volume

    FROM debian:jessie VOLUME /data #之后的任何命令都不能更改Volume的任何东西
    

    0x03 数据共享

    使用--volumes-from参数项即可访问另外一个容器的Volume。
    因为数据容器不启动也可以被其它容器访问,所以一般不推荐启动数据容器。

    #启动一个容器,使用v_test这个容器的数据卷,v_test没有启动,但依然有data这个数据卷
    $ docker run -itd --volumes-from v_test debian:jessie /bin/bash
    root@65aedf9c2ee1:/# ls
    bin   data  etc   lib    media  opt   root  sbin  sys  usr
    boot  dev   home  lib64  mnt    proc  run   srv   tmp  var
    root@65aedf9c2ee1:/# exit
    exit
    
    #可以看下65aedf9c2ee1这个容器的数据卷和v_test数据卷在宿主机对应的是同一个文件夹
    $ docker inspect -f {{.Mounts}} 65aedf9c2ee1
    [{volume 8f39f7de0f851e0bfbcfdd4561fbb20484f01f864ce00a159b09bdcdf743e068 /var/lib/docker/volumes/8f39f7de0f851e0bfbcfdd4561fbb20484f01f864ce00a159b09bdcdf743e068/_data /data local  true }]
    

    0x04 删除Volumes

    docker rm -v d145e8c6f874 #删除容器时一起删除数据
    

    相关文章

      网友评论

        本文标题:Docker之数据卷

        本文链接:https://www.haomeiwen.com/subject/hdzpixtx.html