Docker管理应用数据
1.??Manage data in Docker 默认情况下,所有在容器内部创建的文件被存储在一个可写的容器层。这就意味着:
Docker有两种方式将容器中的文件存储到主机上,这样的话即使容器停止了,文件依然被持久化下来。这两种方式分别是:volumes和bind mounts。如果你是在Linux上运行Docker,那么你还可以使用tmpfs mount。 2.??选择正确的挂载类型 无论你选择哪种挂载类型,数据看起来是一样的。它以目录或者容器的文件系统中的单个文件的形式暴露出来。 下面这幅图可以帮助我们更好的理解 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.? 文档 https://docs.docker.com/storage/ https://docs.docker.com/storage/volumes/ ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |