docker常用命令volume篇目录docker常用命令volume篇1、docker volume方式2、Volume的基本使用2.1 管理卷2.2 创建使用指定卷的容器2.3 清理卷3、Bind Mounts的基本使用3.1 使用卷创建一个容器3.2 验证绑定3.3 清理3.4 应用案例4、移除未使用的数据卷。5、根据volume查询容器id6、根据overlay2的id查询容器id7、根据容器id查询overlay2的id1、docker volume方式在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中:(1)volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中;(最常用的方式)由上图可以知道,目前所有Container的数据都保存在了这个目录下边,由于没有在创建时指定卷,所以Docker帮我们默认创建许多匿名(就上面这一堆很长ID的名字)卷。注意:如果volume是空的而container中的目录有内容,那么docker会将container目录中的内容拷贝到volume中,但是如果volume中已经有内容,则会将container中的目录覆盖。(2)bind mounts:意为着可以存储在宿主机系统的任意位置;(比较常用的方式)bind mount在不同的宿主机系统时不可移植的,比如Windows和Linux的目录结构是不一样的,bind mount所指向的host目录也不能一样。这也是为什么bind mount不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。有几点需要注意:1、host机器的目录路径必须为全路径(准确的说需要以/或~/开始的路径),不然docker会将其当做volume而不是路径来处理2、如果host机器上的目录不存在,docker会自动创建该目录3、如果container中的目录不存在,docker会自动创建该目录4、如果container中的目录已经有内容,那么docker会使用host上的目录将其覆盖掉(3)tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;(一般都不会用的方式)2、Volume的基本使用2.1 管理卷# docker volume create edc-nginx-vol // 创建一个自定义容器卷# docker volume ls // 查看所有容器卷# docker volume inspect edc-nginx-vol // 查看指定容器卷详情信息例如,这里我们创建一个自定义的容器卷,名为"edc-nginx-vol":2.2 创建使用指定卷的容器有了自定义容器卷,我们可以创建一个使用这个数据卷的容器,这里我们以nginx为例:# docker run -d -it --name=edc-nginx -p 8800:80 -v edc-nginx-vol:/usr/share/nginx/html nginx其中,-v代表挂载数据卷,这里使用自定数据卷edc-nginx-vol,并且将数据卷挂载到/usr/share/nginx/html (这个目录是yum安装nginx的默认网页目录)。如果没有通过-v指定,那么Docker会默认帮我们创建匿名数据卷进行映射和挂载。创建好容器之后,我们可以进入容器里面看看:可以看到有两个默认页,这时我们新启动一个SSH连接到宿主机去到刚刚创建的数据卷里边看看:可以看到,我们可以访问到容器里面的两个默认页面,由此可知,volume帮我们做的类似于一个软链接的功能。在容器里边的改动,我们可以在宿主机里感知,而在宿主机里面的改动,在容器里边可以感知到。这时,如果我们手动stop并且remove当前nginx容器,我们会发现容器卷里面的文件还在,并没有被删除掉。