Docker存储卷

  • Docker镜像由多个只读层叠加而成,启动容器时Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。
  • 如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件只读版本仍然存在。只是已经被读写层中该文件的副本所隐藏,此即“写时复制(COW)”机制。
Data Volume
  • 关闭并重启容器其数据不受影响,但删除Docker容器则其更改将会全部丢失。

  • 存在的问题:

    • 存储于联合文件系统中,不易于宿主机访问;
    • 容器间数据共享不便
    • 删除容器其数据会丢失。
  • 解决办法:卷(volume)

    • 卷 是容器上的一个或多个目录,此类目录可绕过联合文件系统,与宿主机上的某种目录“绑定(关联)”
  • Volume types

    • Bind-mount volume:宿主机和容器上2个已知路径建立联系,必须双方都指定。
    • Docker-managed volume:指定容器挂载目录,存储上由docker自动指定挂载目录(/var/lib/docker/vfs/dir/<容器长id>),只用指定容器目录,但是宿主机上是随机生成的不能指定。
容器中使用volumes
  • Bind-mount volume
    • docker run -it -v HOSTDIR:VOLUMEDIR –name bbox1 busybox
    • docker inspect -f { {.Mounts} } bbox1 # 过滤数据
  • Docker-managed volume
    • docker run -it –name bbox2 -v /data busybox
    • docker inspect -f { {.Mounts} } bbox2
    • docker inspect -f { {.NetworkSettings.IPAddress} } bbox2
Sharing volumes
  • 多个容器的卷使用同一个主机目录
    • docker run -it –name c1 -v /data/volumes/v1:/data busybox
    • docker run -it –name c2 -v /data/volumes/v1:/data busybox
  • 复制使用其他容器的卷,为docker run 命令使用–volumes-from选项
    • docker run -it –name b1 -v /data/volumes/v2:/data busybox
    • docker run -it –name b2 –volumes-from b1 busybox
-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。