为什么需要存储卷

  1. 关闭并重启容器,其数据不受影响;但删除 Docker 容器,则其更改会全部丢失;
  2. 数据存储于联合文件系统,IO 效率低下,并且不易于宿主机访问;
  3. 容器间数据共享不便

存储卷(volume)是容器上的一个或多个目录,此类目录可绕过联合文件系统,与宿主机上的某个目录绑定(关联)。
使用存储卷的优势:1.存储卷的数据可以脱离容器生命周期持久存储;2.全集群范围调度容器。
对于有状态的进程,存储卷是必须的。
Volume 是独立于容器的生命周期实现数据持久化的,因此删除容器时既不会删除卷,也不会对未引用的卷做垃圾回收操作。

Volume 类型

Docker 用两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置是不同的:

  • Bind mount volume

需要手动指定容器和宿主机特定的目录,宿主机的目录如果不存在,会自动创建。

  • Docker-managed volume

Docker daemon 自行维护宿主机的目录

使用存储卷

docker-managed volume

~]# docker container run -it -name bbox1 -v /data busybox
~]# docker inspect -f {{.Mounts}} bbox1 #查看 bbox1 容器的卷、卷标识符及挂载的主机目录

bind-mount Volume

~]# docker container run -it -v ``**HOSTDIR**``:VOLUMEDIR --name bbox2 busybox
~]# docker inspect -f {{.Mounts}} bbox2
~]# docker inspect -f {{.NetwordSettings.IPAddress}} bbox2 模板的使用方法查看容器 IP

Sharing volumes

  • 多个容器的卷使用同一个主机目录

~]# docker container run -it --name c1 -v /docker/volumes/v1:/data/ busybox
~]# docker container run -it --name c2 -v /docker/vloumes/v2:/data busybox

  • 复制使用其他容器的卷,为 docker run 命令使用 --volume-from 选项

~]# docker container run -it --name bbox1 -v /docker/volumes/v1:/data busybox #此容器作为基础架构支撑容器完全可以不运行,只需要本地存在此容器即可。
~]# docker container run --it --name bbox2 --volumes-from bbox1 busybox