欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Docker 数据卷管理

程序员文章站 2022-03-21 17:33:50
数据卷介绍 宿主机无法直接访问容器中的文件 容器中的文件没有持久化,导致容器删除后,文件数据也随之消失 容器之间无法直接访问相互的文件 为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题,以实现: 容器与主机之间,容器与容器之间共享文件 容器中的数据持久化 将容器中的... ......

数据卷介绍

 

  1. 宿主机无法直接访问容器中的文件
  2. 容器中的文件没有持久化,导致容器删除后,文件数据也随之消失
  3. 容器之间无法直接访问相互的文件

为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题,以实现:

  1. 容器与主机之间,容器与容器之间共享文件
  2. 容器中的数据持久化
  3. 将容器中的数据备份,迁移,恢复等

 

数据卷特点

 

  1. 数据卷存在宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
  2. 数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换
  3. 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中
  4. 容器对数据卷的修改是实时进行的
  5. 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会有相互影响

 

数据卷的挂载方式(三种)

 

  1. bind mounts:将宿主机上的一个文件或目录被挂载到容器上
  2. volumes:由docker创建和管理。使用docker volume命令管理
  3. tmpfs mounts:tmpfs 是一种基于内存的临时文件系统。tmpfs mounts 数据不会存储在磁盘上

     

    Docker 数据卷管理

 

bind mounts挂载

 

利用docker run/create d的参数为容器进行挂载数据卷

用法:

  1. 方式一:  
  2.     
  3.     -v, --volume list  
  4.     -v 宿主机文件路径:容器中的文件路径  
  5.     
  6. 方式二:  
  7.     --mount  
  8.     --mount type=bindsrc=宿主机路径dst=容器路径  
  9.     
  10. 注意:  
  11.     src指定的文件或者路径必须存在  

 

Docker 数据卷管理

 

Docker 数据卷管理

 

 

volumes挂载

利用docker run/create为容器挂载数据卷

用法:

  1. 方式一:  
  2.     -v, --volume参数  
  3.     -v volume-name:容器中的文件或者文件夹路径  
  4.     
  5. 方式二:  
  6.     --mount 参数  
  7.     --mount type=volumesrc=volume-name, dst=容器中的文件或者文件夹路径  
  8.     
  9. volume对象管理:  
  10.     docker volume 命令管理volume数据卷对象  
  11.     docker volume create        创建数据卷对象  
  12.     docker volume inspect       查看数据卷详细信息  
  13.     docker volume ls            查看已创建的数据卷对象  
  14.     docker volume prune     删除未被使用的数据卷对象  
  15.     docker volume rm        删除一个或多个数据卷对象  

 

 

Docker 数据卷管理

 

tmpfs mount挂载

 

利用docker run/create为容器挂载数据卷

用法:

    --mount type=tmpfsdst=path  

 

Docker 数据卷管理

 

 

共享其他容器的数据卷

 

利用docker run/create 的--volumes-from参数指定数据卷容器

 

用法:

    docker run/create --volumes-from container  

 

Docker 数据卷管理

 

 

数据卷使用注意项

 

  1. 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
  2. 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
  3. 这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。