美文网首页
Docker数据管理一(数据卷 volume)

Docker数据管理一(数据卷 volume)

作者: 平头哥2 | 来源:发表于2019-03-01 14:28 被阅读0次
    Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。
    数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用`mount`挂载一个文件系统。
    
    Docker Volume数据卷可以实现:
    1)绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上的数据卷中的内容,所以是本地磁盘IO的性能,而不是先在容器中写一份,最后还要将容器中的修改的内容拷贝出来进行同步。)
    2)绕过“拷贝写”系统,有些文件不需要在docker commit打包进镜像文件。
    3)数据卷可以在容器间共享和重用数据
    4)数据卷可以在宿主和容器间共享数据
    5)数据卷数据改变是直接修改的
    6)数据卷是持续性的,直到没有容器使用它们。即便是初始的数据卷容器或中间层的数据卷容器删除了,只要还有其他的容器使用数据卷,那么里面的数据都不会丢失。
      
    Docker数据持久化:
    容器在运行期间产生的数据是不会写在镜像里面的,重新用此镜像启动新的容器就会初始化镜像,会加一个全新的读写入层来保存数据。
    如果想做到数据持久化,Docker提供数据卷(Data volume)或者数据容器卷来解决问题,另外还可以通过commit提交一个新的镜像来保存产生的数据。
    

    一、创建一个数据卷

    查看镜像

    [root@langzi01 ~]# docker images
    REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
    docker.io/tomcat     latest              168588387c68        2 weeks ago         463 MB
    docker.io/ubuntu     latest              47b19964fb50        3 weeks ago         88.1 MB
    docker.io/registry   latest              d0eed8dad114        4 weeks ago         25.8 MB
    

    创建

    [root@langzi01 ~]# docker run --name ubuntu -v /opt/data -t -i ubuntu:latest /bin/bash
    

    创建文件并追加内容

    root@995048cfbebb:/# cd /opt/data/
    root@995048cfbebb:/opt/data# ls
    root@995048cfbebb:/opt/data# echo "123" > 123
    root@995048cfbebb:/opt/data# echo "123456" > 123456
    root@995048cfbebb:/opt/data# ls
    123  123456
    

    退出,查看本地的系统文件:

    [root@langzi01 ~]# docker inspect ubuntu|grep /var/lib/docker/volumes
                    "Source": "/var/lib/docker/volumes/48acac93b3fc1d1060defe7c19f9f97ae601e24a8af99b7b9f26d632ac04a920/_data",
    

    查看文件:

    [root@langzi01 ~]# cd /var/lib/docker/volumes/48acac93b3fc1d1060defe7c19f9f97ae601e24a8af99b7b9f26d632ac04a920/_data
    [root@langzi01 _data]# ls
    123  123456
    [root@langzi01 _data]# cat 123
    123
    [root@langzi01 _data]# cat 123456 
    123456
    

    向文件追加内容:

    [root@langzi01 _data]# echo "aaaaaaaaaaaaaa" >> 123
    [root@langzi01 _data]# cat 123
    123
    aaaaaaaaaaaaaa
    

    进入容器查看文件

    [root@langzi01 _data]# docker exec -it 995048cfbebb  /bin/bash
    root@995048cfbebb:/# cd opt/data/
    root@995048cfbebb:/opt/data# ls
    123  123456
    root@995048cfbebb:/opt/data# cat 123
    123
    aaaaaaaaaaaaaa
    

    二、挂载宿主机文件或目录到容器数据卷

    可以直接挂载宿主机文件或目录到容器里,可以理解为目录映射,这样就可以让所有的容器共享宿主机数据,从而只需要改变宿主机的数据源就能够影响到所有的容器数据。

    [root@langzi01 ~]# docker images
    docker.io/centos     latest              1e1148e4cc2c        2 months ago        202 MB
    

    内容:

    [root@langzi01 ~]# pwd
    /root
    [root@langzi01 ~]# cat ip.list 
    192.168.1.100
    192.168.1.101
    192.168.1.103
    

    创建数据卷:

    [root@localhost ~]# docker run -t -i --name test -v /root/ip.list:/centos/ip.list:ro docker.io/centos /bin/bash
    

    --name: 指定数据卷的名字:这里为 test

    -v /root/ip.list:/centos/ip.list: "宿主机文件/目录:容器里对应的文件/目录"

    ro: read-only 只读: 挂载的数据默认为可读写权限,但也可以根据自己的需求,将容器里挂载共享的数据设置为只读,这样数据修改就只能在宿主机上操作。如下:

    [root@f0ea32bad913 /]# cat /centos/ip.list 
    192.168.1.100
    192.168.1.101
    192.168.1.103
    [root@f0ea32bad913 /]# echo "192.168.1.115" >> /centos/ip.list 
    bash: /centos/ip.list: Read-only file system
    

    在宿主机上修改共享数据

    [root@langzi01 ~]# echo "192.168.1.115" >> ip.list
    

    容器里查看数据:

    [root@f0ea32bad913 /]# cat /centos/ip.list 
    192.168.1.100
    192.168.1.101
    192.168.1.103
    192.168.1.115
    

    三、挂载宿主机目录到容器上

    [root@localhost ~]# docker run -t -i --name test -v /etc:/centos/etc.list:ro docker.io/centos /bin/bash
    

    四、挂载宿多个主机目录到容器上

    [root@localhost ~]# docker run --name data -v /opt/data1:/var/www/data1 -v /opt/data2:/var/www/data2:ro -t -i docker.io/ubuntu /bin/bash
    

    相关文章

      网友评论

          本文标题:Docker数据管理一(数据卷 volume)

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