1.container可以保存数据,但是有以下缺点:
a.数据不能持久化,只有container运行时这些数据才存在,并且其他进程很难获取container内的数据。
b.container读写与它正在运行的机器紧密耦合,很难移动数据。
c.container读写需要存储驱动来管理文件系统,存储驱动通过Linux内核提供联合文件系统。这层额外的抽象比直接读写主机文件系统耗费性能。
2.为了解决以上问题,Docker提供了三种方式保存数据volumes、bind mounts、tmpfs(推荐使用volumes)
Volumes 是Docker管理的主机中的文件系统,非Docker进程不能修改。是官方推荐最好的存储方式。
Bind mounts 可以存储在主机的任何位置,甚至可以是重要的系统文件夹,非Docker进程也可以修改。
tmpfs 只在主机的内存中,从不写入的文件系统
3.使用场景
Volumes:
a.在多个运行的container间共享数据,当container停止或被删除,volume仍然存在。多容器可以同时使用volume,volume会一直存在直到手动将其删除。
b.使container与宿主机的配置文件分离。
c.想将docker数据存储到远程主机或者云主机中。
d.想从一个宿主机备份container数据到另一个宿主机。
Bind mounts:
a.使主机和container共享配置文件。
b.共享代码或者构建工程,举例:可以在container放一个maven的target文件夹,每次在主机构建工程,container都能得到构建成果。
c.当主机的文件或者目录需要和container保持一致时。
tmpfs
不需要持久化数据时,更安全,更高效。
4.使用方式
Volumes https://docs.docker.com/engine/admin/volumes/volumes/
Bind mounts https://docs.docker.com/engine/admin/volumes/bind-mounts/
网友评论