• docker 数据卷管理


    数据卷管理
    一. 实验目的:
    1.       熟悉数据卷的基本工作原理;
    2.       掌握数据卷操作的常用命令;
    3.       熟悉数据卷容器的基本工作原理;
    4.       掌握数据卷容器操作的常用命令;
    二. 实验环境:
    Ubuntu16.04+Docker
    三. 实验内容:
    练习使用数据卷和数据卷容器操作的常用命令
    四.实验练习
    (一) 创建数据卷
    1.新建一个以ubuntu14.04为镜像,名叫web1的交互式容器,并且设置数据卷/html1
    docker create --name web1 -it  -v /html1 ubuntu:14.04
    2. 启动容器web1: docker start -i start web1
    3. 向数据卷web1中新建一个文件夹123,内容也是123.使用ctrl+P+Q 暂时退出docker容器,
    但是保持容器一直运行.
    4.在宿主机上,使用docker inspect 来查看一下上面的那个数据卷的目录路径:
    docker inspect web1|grep /var/lib/docker/volumes
    5.并在宿主机上查看本地数据卷文件的内容
    cat /var/lib/docker/volumes/273e6d1723ddb58baf3f9a925c932423e514e2ac996d85ca5793f778d73a1ab4/_data/123
    6.向文件123中,添加新的内容test
    echo "test" >>/var/lib/docker/volumes/273e6d1723ddb58baf3f9a925c932423e514e2ac996d85ca5793f778d73a1ab4/_data/123
    7.再次进入刚刚创建的容器web1 并且进入/html1目录查看文件123的值是否发生变化?
    8.利用docker CLI中专有命令来创建数据库,数据卷名称为html3并且查看数据卷的详细信息
    docker vollume create --name html3
    docker inspect html3
    (二)挂载数据卷
     
    ① 挂载宿主机文件到容器上。
    在宿主机上创建一个目录/html,并在目录中创建一个新文件web.list,内容为192.168.1.1
    以ubuntu:14.04为模板,创建一个容器web4,挂载宿主机文件/html4/web.list到容器/html4/web.list中,并且挂载共享的数据设置为只读。
    进入容器之后,用echo命令往/html4/web.list中写数据,是否可以写入,为什么?
    用ctrl+p+q退出容器,但是不关闭容器,发现在宿主机中可以修改数据卷的内容。
    ② 挂载宿主机目录到容器上
    在宿主机上创建一个目录/var/spp,并在目录中新建两个文件test1test2,内容为test1test2。以ubuntu:14.04为模板,创建一个容器web6,挂载宿主机文件/var/spp到容器/var/spp中。
     
    (3)挂载多个目录到容器上
    在宿主机中新建两个目录/var/spp1/var/spp2,/var/spp1中新建文件test1,内容为123456,/var/spp2中新建文件test2,内容为qwert。以ubuntu:14.04为模板,新建一个容器web7,并且挂载两个目录/var/spp1/var/spp2,并且把/var/spp2目录设置为只读。在容器内,查看/var/spp1/test1内容,并且向/var/spp2/test2中添加数据asdfg,请问是否能够添加成功,为什么?
     
    (三)删除数据卷
    ① 直接删除数据卷
    我们可以通过docker提供的数据卷管理命令,查看宿主机中所有的数据卷,并且删除它。
    Docker volume list //列出宿主机中的所有数据卷
    Docker volume rm volumeID  //直接删除,但是这样会误删
    ② 随着容器删除数据卷
    Volume 只有在下列情况下才能被删除:
    1docker rm -v删除容器时添加了-v选项,只有无人使用该数据卷时候,才会被真正删除!
    2docker run --rm运行容器时添加了--rm选项
    可以使用 docker rm -v 命令在删除容器时删除该容器的卷。示例如下:
    (四) 设置数据卷的VOLUME指令
    VOLUME指令可以向镜像创建的容器中添加数据卷,数据卷可以在容器之间共享和重用。数据卷的修改是立即生效的。volume格式:
    VOLUME [“/data”,”/data2”]
    VOLUME /data
    举例:
    FROM ubuntu:14.04
    RUN mkdir /app && echo“hello” >/app/test.txt
    VOLUME /home
    CMD [“cat”,”/app/test.txt”]
    然后构建:docker build -t test .
    执行:docker run --rm test(容器退出时就能够自动清理容器内部的文件系统。)
    输出hello
    在本地创建一个文件:
    mkdir local
    echo “here is a test”>~/local/test.txt
    再次运行容器,使用-v参数指定/app目录,然后查看cat结果,发现目标文件并不是容器上的test.txt文件,而是宿主机上的test.txt文件
    docker run --rm -v ~/local:/app test
    输出结果是here is a test
    (五)挂在一个数据卷容器
    启动一个名为container1容器,此容器包含两个数据卷/var/volume1和/var/volume2(这两个数据卷目录是在容器里的,容器创建的时候会自动生成这两目录)查看/var/volume1是空的
    用docker inspect 命令查看宿主机上与数据卷对应的目录路径:
    由上面命令结果可以查到,两个数据卷/var/volume1和/var/volume2下的数据在/var/lib/docker/volumes/下对于的两个目录的_data下面
    创建App1_container容器,挂载container1容器中的数据卷
    可以再创建一个容器,挂载App1_container中从container1挂载的数据卷。当然也可以直接挂载初始的container1容器数据卷
    即便是删除了初始的数据卷容器App1_container,或是删除了其它容器,但只要是有容器在使用该数据卷,那么它里面的数据就不会丢失。
     
    (六) 数据卷迁移
    自拟题目,进行数据卷的备份操作和恢复导出操作!
    备份:
    我们先创建一个data容器.
    docker run -i -t -v /data --name data ubuntu:14.04 /bin/bash
    上面创建的data数据卷容器挂载了data目录.
    为了验证数据卷容器的备份功能,在挂载的/data目录下创建一个data文件,并写入内容"data"。
    然后为了利用数据卷容器备份,使用 volumes-from 标记来创建一个加载data容器卷的容器,并从主机挂载当前目录到容器的/backup目录。
    docker run -i -t --volumes-from data -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/backup.tar /data
    $(pwd)docker支持的指定当前目录的方法
    容器启动后,在当前目录下生成的backup.tar文件就是data容器卷的备份文件。
    这样,数据卷容器中的数据就备份完成。
    恢复
    首先,创建一个带有空数据卷的容器data1。
    docker run -itd -v /data --name data1 ubuntu:14.04 /bin/bash
     
    然后,创建另一个容器,挂载data1容器卷中的数据卷,并使用untar解压备份文件到挂载的容器卷中。
    docker run --volumes-from data1 -v $(pwd):/backup ubuntu:14.04 tar xvf /backup/backup.tar
    这个时候,之前备份的数据卷容器的数据已经恢复到了容器data1中了。
    为了查看和验证恢复的数据,我们可以再启动一个容器挂载data1容器卷来查看。
     
  • 相关阅读:
    【原】IOS文件操作
    【原】UIWebView加载本地pdf、doc等文件
    【转】好东西!sqlite3中BLOB数据类型存储大对象运用示例
    ASP.NET环境下配置FCKEditor并上传图片及其它文件
    iis php环境配置完整版
    js校验服务器控件是否为空
    vim 分屏显示
    各大搜索引擎网站提交端口的快速通道
    unix动态链接库操作
    回车(CR)与换行(LF), '\r'和'\n'的区别
  • 原文地址:https://www.cnblogs.com/duyachao/p/11100651.html
Copyright © 2020-2023  润新知