七、Docker容器的数据管理

一、Docker容器的数据卷

什么是数据卷

       数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。

       数据卷设计的目的,在于数据的永久化,它完全独立与容器的生存周期,因此,Docker不会再容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理。

七、Docker容器的数据管理

数据卷(Data Volume)的特点

       数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。

       数据卷可以在容器之间共享和重用

       可以对数据卷的中的内容直接进行修改

       数据卷的变化不会影响镜像的更新

       卷会一直存在,即使挂载数据卷的容器已经被删除

为容器添加数据卷

       sudo docker run -v ~/container_data:/data -it ubuntu /bin/bash

实例:

       docker run -it -v ~/datavolume:/data ubuntu /bin/bash

       ls -l

       touch /data/c1

       echo "I'm in container" > /data/c1

       exit

       ls -l

       ls -l datavolume

       vim datavolume/c1

       docker ps -l

查看数据卷

       docker inspect container

为数据卷添加访问权限

       sudo docker run -v ~/datavolume:/data:ro --name dvt1 ubuntu /bin/bash

       ls -l

       只读文件,不能写入

       touch data/c2

       ls data

       vi data/c1

       exit

       docker inspect dvt1

 

数据卷的使用

       使用Dockerfile构建包含数据卷的镜像

       dockerfile指令:

              VOLUME["/data"]

       实例

              dockerfile文件

              FROM ubuntu

              VOLUME ["/datavolume1", "datavolume2"]

              CMD /bin/bash

             

              cd dockerfile/dvt

              vim Dockerfile

              docker build -t shuoyu/dvt .

              docker run --name dvt3 -it shuoyu/dvt

              ls

              exit

              docker inspect dvt3

Dockerflle中创建的数据卷,宿主机会自动创建地址,每次启动容器都会产生新的映射地址。

       docker run --name dvt4 -it shuoyu/dvt

       exit

       docker inspect dvt4

二、Docker的数据卷容器

什么是数据卷容器

     命名的容器挂载数据卷,其他的容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫数据卷容器。

七、Docker容器的数据管理

挂载数据卷容器的方法

       docker run --volumes-from [CONTAINER NAME]

实例:

       docker run -it --name dvt4 shuoyu/dvt

       ls

       touch /datavolume1/dvt4_1

       ls /datavolume1

       exit
       docker run -it --name dvt5 --volumes-from dvt4 ubuntu /bin/bash

       ls

       ls /datavolume1

       touch /datavolume1/dvt5_1

       ls /datavolume1

       exit

       docker run -it --name dvt6 --volumes-from dvt4 ubuntu /bin/bash

       ls

       ls /datavolume1

       docker inspect --format="{{.volumes}}" dvt5

       docker rm dvt4

       docker restart

       docker restart dvt5

       docker attach dvt5

       ls

       touch datavolume1/dvt5_2

       ls datavolume1

       exit

三、Docker数据卷的备份和还原

数据备份

       docker run --volumes-from [container name] -v ${pwd}:/backup ubuntu tar cvf /backup/backup.tar [container data volume]

七、Docker容器的数据管理

实例:

       docker restart dvt5

       docker attach dvt5

       ls

       ls /datavolume1

       exit

       docker run --volumes-from dvt5 -v ~/backup:/backup --name dvt10 ubuntu tar cvf /backup/dvt5.tar /datavolume1

       ls backup

说明:启动新容器执行备份命令,--volumes-from dvt5指定要备份的容器的名字,-v ~/backup:/backup指定备份文件的存放目录(前面是宿主机,后面是容器中),tar cvf /backup/dvt5.tar /datavolume1执行备份的操作。

数据还原

       docker run --volumes-from [container name] -v ${pwd}:/backup ubuntu tar xvf /backup/backup.tar [container data volume]