1. Manage data in Dockerdocker
默认状况下,全部在容器内部建立的文件被存储在一个可写的容器层。这就意味着:安全
Docker有两种方式将容器中的文件存储到主机上,这样的话即便容器中止了,文件依然被持久化下来。这两种方式分别是:volumes和bind mounts。若是你是在Linux上运行Docker,那么你还能够使用tmpfs mount。性能
2. 选择正确的挂载类型spa
不管你选择哪一种挂载类型,数据看起来是同样的。它以目录或者容器的文件系统中的单个文件的形式暴露出来。blog
下面这幅图能够帮助咱们更好的理解 volumes 、 bind mounts 、 tmpfs mounts 三者的区别生命周期
3. 关于挂载类型进程
Volumes内存
Volumes由Docker建立并管理。你能够用docker volume create命令显式地建立一个volume,或者在容器或服务建立的时候建立一个volume。开发
当你建立了一个volume之后,它被存储到Docker主机上的一个目录下。当你挂载这个volume到一个容器的时候,这个目录就是挂载到容器中的目录。这种方式跟bind mounts很像,除了volumes被Docker管理并与主机的核心功能隔离之外。文档
一个volume能够同时挂载到多个容器中。当没有一个运行中的容器使用这个volume的时候,这个volume仍然是可用的,而且不会被自动删除。你能够用docker volume prune命令删除未使用的volumes。
当你挂载一个volume的时候,它多是被命名的或者匿名的。匿名的volumes在它首次被挂载到一个容器中的时候不会被指定一个明确的名字,所以Docker给它们一个随机的名字,以保证它在Docker主机中是惟一的。关于名字,命名的和匿名的volumes在使用上是同样的。
Volumes也支持volume驱动,能够运行你存储数据到远程主机或云上。
Bind mounts
与volumes相比,bind mounts有一些功能限制。当你使用bind mount的时候,主机上的一个文件或目录被挂载到一个容器。这个文件或目录关联主机上的绝对路径。这个文件或目录不须要事先在Docker主机上存在,若是没有则会自动在后台建立。Bind mounts的性能很是好,但它依赖于主机的文件系统上有一个特定的目录结构可用。若是你正在开发一个新的Docker应用,建议用volumes。你不能直接用Docker命令来直接管理bind mounts。
tmpfs mounts
一个tmpfs挂载不会持久化数据到磁盘,不管是在Docker主机上仍是在容器中。容器能够在容器的生命周期中使用它来存储非持久性状态或敏感信息。例如,在内部,群集服务使用tmpfs挂载来将秘钥挂载到服务的容器中。
4. volumes最佳实践
Volumes是在Docker容器和服务中保存数据的首选方式。使用volumes的一些场景:
5. bind mounts最佳实践
通常而言,你应该尽量地用volumes。Bind mounts适用于下列情形:
6. tmpfs mounts最佳实践
当你不想要数据持久化到主机或容器的时候,tmps mounts是最好的选择。这多是出于安全缘由,或者是为了在应用程序须要编写大量非持久性状态数据时保护容器的性能。
7. 文档