docker Volume
对于docker来讲,作为容器运行的底层引擎,在组织及运行容器时每个容器内只运行一个程序及子程序。对于这个容器来讲,启动时依赖于 底层镜像联合挂载启动而成。 底层能够存储此类分层构建并联合挂载镜像的文件系统。最上层构建读写层。对于此读写层来说。所有对容器的操作都保存在最上层之上。而下层内容的操作需要使用写时复制。 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层,如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即 写时复制(COW)机制。此机制对IO较高的应用在实现持久化存储时,势必对在底层应用数据存储时性能要求较高。要想绕过使用限制,可以使用存储卷机制。 Why Data Volume? 宿主机的主机文件系统直接与容器内部的文件系统之上的某一访问路径建立绑定关系。 在宿主机上目录和容器内文件系统建立绑定关系的目录相对于容器来讲被称为volume。容器内所有有效数据都是保存在存储卷,从而脱离容器自身文件系统。当容器关闭并删除时,只要不删除与宿主机与之绑定的存储目录,就能实现数据脱离容器的生命周期而持久化。docker的存储卷默认情况下使用其所在宿主机之上的本地文件系统目录的。 关闭并重启容器,其数据不受影响;但删除Docker容器,则其更改将会全部丢失 存在的问题 存储于联合文件系统中,不易于宿主机访问; 容器间数据共享不便 删除容器其数据会丢失 解决方案:“卷(volume)” “卷”是容器上的一个或多个“目录”,此类目录可绕过联合文件系统,与宿主机上的某目录“绑定(关联)” 在docker中如果需要动刀存储卷时,不必要手动创建,Volume于容器初始化之时即会创建,由base image提供的卷中的数据会于此期间完成复制 Volume的初衷是独立于容器的生命周期实现数据持久化,因此删除容器之时既不会删除卷,也不会对哪怕未被引用的卷做垃圾回收操作; Data volumes ·卷为docker提供了独立于容器的数据管理机制 ·可以把“镜像”想像成静态文件,例如“程序”,把卷类比为动态内容,例如“数据 “;于是,镜像可以重用,而卷可以共享; ·卷实现了“程序(镜像)”和“数据(卷)”分离,以及“程序(镜像)”和“制作镜像的主机 “分离,用户制作镜像时无须再考虑镜像运行的容器所在的主机的环境; Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同; Bind mount volume 绑定挂载卷 在宿主机指定一个特定路径,在容器内指定一个特定路径,二者已知路径建立关联关系。 a volume that points to a user-specified location on the host file system Docker-managed volume docker管理卷 指定容器内的挂载点,与之关联的是宿主机的目录由docker daemon引擎自行创建空目录,或者使用已存在目录与存储卷路径建立关联关系。 the Docker daemon creates managed volumes in a portion of the host’s file system that’s owned by Docker 在容器中使用Volumes 为docker run命令使用一v选项即可使用Volume...