一、学完本篇之后掌握的知识点
docker的文件系统
docker创建 Volume(数据卷)
数据卷容器
二、 docker的文件系统
2.1、docker的镜像到底是什么
Docker镜像是由多个文件系统(只读层)叠加而成,当我们启动一个容器的时候,Docker会加载只读镜像层并在其上添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上
2.2、初始化数据卷
初始化数据卷有两种方式,一种是通过命令行模式,另外一种是通过Dockerfile
2.21、通过命令行模式
#运行centos容器 docker run -dit --name centos -v $PWD:/opt/test centos /bin/bash
[root@host ~] docker inspect centos "Mounts": [ { "Type": "bind", "Source": "/root", "Destination": "/opt/test", "Mode": "", "RW": true, "Propagation": "rprivate" } ]
2.22、Dockerfile 的 VOLUME指令
FROM debian:wheezy VOLUME /data
2.3、数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载, 数据卷容器可以不用启动也可以
2.3.1、创建数据卷容器
docker run -it -v /dbdata --name dbdata centos
2.3.2、使用其它容器挂载数据卷容器
docker run -dit --name centos1 --volumes-from dbdata centos docker run -dit --name centos2 --volumes-from dbdata centos
2.3.3、备份数据卷容器
docker run --volumes-from dbdata -v $PWD/backup:/backup --name worker centos tar zcvf /backup/backup.tar dbdata #备份数据卷容器内的数据
2.3.4、在任何一个容器写入, 其它窗口都可以看到
docker exec -it centos1 bash cd /dbdata