十年河东,十年河西,莫欺少年穷
学无止境,精益求精
本文参考:你必须知道的Docker数据卷(Volume) 【作者是阿里云最有价值MVP,第一次见到这个称呼~_~】
docker的镜像是由多个只读的文件系统叠加在一起形成的。当我们在我启动一个容器的时候,docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层。这时如果修改正在运行的容器中已有的文件,那么这个文件将会从只读层复制到读写层。该文件的只读版本还在,只是被上面读写层的该文件的副本隐藏。当删除docker,或者重新启动时,之前的更改将会消失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。
为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。
在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中:说白了就是当我们删除容器时,为了保留容器运行期间产生的数据,通过数据卷volume技术,实现容器内部与linux主机上文件目录共享的技术。
2.1、创建数据卷,新建的数据卷默认会放在linux主机的位置为: /var/lib/docker/volumes 目录中
docer volume create 数据卷名称
2.2、 查看数据卷
docker volume ls // 查看所有容器卷 docker volume inspect 数据卷名称 //查看数据卷详情
2.3、删除数据卷
# docker stop edc-nginx // 暂停容器实例 # docker rm edc-nginx // 移除容器实例 # docker volume rm edc-nginx-vol // 删除自定义数据卷
创建使用指定卷的容器,也称之为挂载数据卷
docker run -it --name=centos01 -v myvol01:/home/centosvol01 centos /bin/bash
其中myvol01 为我们创建的数据卷 /home/centosvol01 为容器内路径
如果不使用默认的数据卷存放路径,我们可以显式的指定一个本机路径,如下:
docker run -it --name=centos01 -v /home/share/centosvol01:/home/centosvol01 --name=centos002 centos /bin/bash
其中 /home/share/centosvol01 为本地路径 /home/centosvol01 为容器内路径
2.4、查看容器是否数据卷挂载是否成功
docker inspect 容器ID
此时,我们不管是在主机路径内新建一个文件,还是在容器内路径新建一个文件,都会展示到两个目录中。也可以理解为:这两个路径进行了双向绑定,或者一致性映射。
@天才卧龙的波尔克