为什么需要存储卷
- 关闭并重启容器,其数据不受影响;但删除 Docker 容器,则其更改会全部丢失;
- 数据存储于联合文件系统,IO 效率低下,并且不易于宿主机访问;
- 容器间数据共享不便
存储卷(volume)是容器上的一个或多个目录,此类目录可绕过联合文件系统,与宿主机上的某个目录绑定(关联)。
使用存储卷的优势:1.存储卷的数据可以脱离容器生命周期持久存储;2.全集群范围调度容器。
对于有状态的进程,存储卷是必须的。
Volume 是独立于容器的生命周期实现数据持久化的,因此删除容器时既不会删除卷,也不会对未引用的卷做垃圾回收操作。
Volume 类型
Docker 用两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置是不同的:
- Bind mount volume
需要手动指定容器和宿主机特定的目录,宿主机的目录如果不存在,会自动创建。
- Docker-managed volume
使用存储卷
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