Docker存储
Docker 管理数据的方式:数据卷 和 数据卷容器。
数据卷是Docker主机文件系统中的目录或文件,能够直接被挂到容器的文件系统中
1、数据卷
1.1、数据卷的特点
1、数据卷是目录或文件,不是没有格式化的磁盘
2、容器可以读写数据卷中的数据
3、数据卷数据可以被永久的保存,即使使用它的容器已经销毁
1.2、操作
1.2.1、添加数据卷:
1、在执行docker run 命令时使用 -v 参数来添加数据卷
命令:
docker run -it -v /data centos bash
可以在Dockefile中,使用 VOLUME 指令来创建添加一个或多个数据卷。
2、-v 参数除了可以用于创建数据卷外,还可以用来将 Docker daemon 所在主机上的文件或文件夹挂载到容器中。
docker run -it -v /home/lin/桌面/html:/data --privileged=true centos bash
加上 --privileged=true 参数后,进入data目录就拥有读写权限。
这样会把本地的 (/home/lin/桌面/html 这是自己做时的目录) 文件夹挂在容器/data目录。
添加一个ro选项,来指定挂载时文件权限是只读的。
命令:
docker run -it -v /home/lin/桌面/html:/data:ro --privileged=true centos bash
2、数据卷容器
数据卷容器是专门为其他容器提供数据卷的容器。它提供的卷可以是绑定装载的卷,也可以是Docker管理卷。
绑定装载就是把主机上已存在目录或文件挂载到容器中。
Docker管理卷与绑定装载的区别就是不需要指定绑定源,只需要指定绑定点就可以。
2.1、操作
2.1.1、创建一个带有名字的容器来共享数据。
命令:
docker run -it -v/data --name data_provider centos
或者
docker create --name data_provider -v /data centos
使用数据卷容器时,无须保证数据卷容器处于运行状态,所以用docker create命令即可。
2.1.2、查看数据卷容器
命令:
docker inspect data_provider
查看磁盘的占用情况。
命令:
df -hl
2.1.3、使用–volumes-from参数挂载/data卷。(可以把多个容器中的多个数据卷放到一起。)
命令:
docker run -it --volumes-from data_provider --name data_consume2 centos
注意:使用数据卷容器存储的数据不会轻易丢失,即便删除consume2容器,甚至是初始化数据卷容器,该数据卷也不会被删除。只有在删除最后一个使用该数据卷的容器时,使用docker rm –v命令,才会删除该数据卷。
2.1.4、列出所有数据卷。
命令:
docker volume ls
2.1.5、删除所有使用共享数据卷的容器。
首先用 docker ps 查询容器,然后用 docker rm -f 容器id 删容器。
2.1.6、列出所有不被引用的数据卷。
命令:
docker volume ls -f dangling=true
2.1.7、使用docker volume rm命令,删除数据卷容器中共享的数据卷。
命令:
docker volume rm 数据卷volume name
3、备份数据
使用数据卷的方式管理容器数据时,可以很方便地对其中的数据进行备份、转储和迁移。
使用如下命令将数据卷中的数据打包,并将打包后的文件拷贝到主机当前目录中,我们使用–volumes-from 参数来创建一个挂载了要备份数据卷的容器。
命令:
docker run --volumes-from data_provider -v $(pwd):/backup --name backup_worker1 --privileged=true centos tar -cvPf /backup/backup.tar /data
前面我们创建并登录了一个新容器,挂载了data_provider容器中的数据卷,并把本地的一个目录挂载了 /backup下,最后再传一条tar 命令来备份data 卷到/backup下,当命令执行完成后容器就会停止运行, 并保留/data 的备份,备份文件会出现在主机的当前目录(虚拟机当前目录)。
4、恢复数据
1、首先创建一个容器。
命令:
docker run -it -v /restore --name data_restore centos
2、然后再创建一个新的容器,这个容器挂载data_restore容器,并将压缩文件解压到容器卷中。
命令:
docker run -it --volumes-from data_restore -v $(pwd):/restore --privileged=true centos
tar -xvPf backup.tar /data
如果删除了挂载数据卷的容器,数据卷不会被自动删除,如果需要删除一个数据卷,必须在删除最后一个挂载该数据卷的容器时,显示的使用 docker rm -v 命令,来同时删除关联的容器。
命令:
docker rm -v 数据卷id