提醒:请务必使用root帐号,以免在后面应用系统部署时,发生权限问题。

    默认情况下,保存在Docker的数据会随着Docker的关闭而消失。Docker提供三种模式可以将数据持久化:卷(Volume)、绑定挂载(bind mount)、tmpfs挂载(tmpfs mount)。

docker实际使用的仓库 docker存储有哪两种方式_docker

保存在Docker管理的主机文件系统中 (Linux默认路径在 /var/lib/docker/volumes/),非Docker进程不能修改这部分文件系统。卷是在Docker下最佳持久化方式。

docker volume create

    创建卷时,它存储在Docker主机上的目录中。当将卷装入容器时,这个目录就是装入容器的目录。这与绑定装载的工作方式类似,只是卷由Docker管理,并且与主机的核心功能隔离。

docker volume prune

    装载卷时,它可以是命名的或匿名的。当匿名卷第一次装入容器时,Docker会给它们一个随机的名称,保证在给定的Docker主机中是唯一的。除了名称之外,命名卷和匿名卷的行为也相同。

    卷还支持卷驱动程序的使用,它允许您将数据存储在远程主机或云提供商上,以及其他可能性。

绑定挂载 可以保存在主机系统的任何路径下。非Docker进程可以在任何时候访问这些数据。

docker cli

tmpfs挂载 保存在内存中,它可以依附于主机或某个容器。

绑定挂载和卷都可以使用 -v 或 --volume 参数,只是语法上稍有不同,使用 --tmpfs 可以实现tmpfs挂载。Docker 17.06及以上版本,我们建议使用 --mount 参数,在容器和服务上实现绑定挂载和卷、tmpfs挂载,语法会更加简洁。

优势

 

    卷是在Docker容器和服务中保存数据的首选方法。卷的一些用例包括:

    1. 在多个正在运行的容器之间共享数据。如果不显式创建卷,则在第一次将卷装入容器时创建卷。当容器停止或移除时,卷仍然存在。多个容器可以同时装载同一个卷,读写或只读。只有在显式删除卷时才删除它们。

    2. 当Docker主机不能保证具有给定的目录或文件结构时。卷帮助您将Docker主机的配置与容器运行时分离。

    3. 当您希望将容器的数据存储在远程主机或云提供程序上,而不是本地时。

    4. 当您需要从一个Docker主机备份、恢复或迁移数据到另一个Docker主机时,卷是更好的选择。您可以停止使用卷的容器,然后备份卷的目录(例如/var/lib/docker/volume s/<volume name>)。

绑定挂载

    一般来说,您应该尽可能使用卷。绑定装载适用于以下类型的用例:

    1. 将配置文件从主机共享到容器。这就是Docker默认情况下通过将/etc/resolv.conf从主机装载到每个容器中为容器提供DNS解析的方式。

    2. 在Docker主机和容器上的开发环境之间共享源代码或构建工件。例如,您可以将maven目标/目录装入容器中,并且每次在Docker主机上构建maven项目时,容器都可以访问重建的工件。

    3. 如果您使用docker进行这种开发,那么您的生产dockerfile将直接将生产就绪的工件复制到映像中,而不是依赖于绑定挂载。

    4. 当docker主机的文件或目录结构保证与bind挂载所需的容器一致时。

tmpfs挂载

    当您不希望数据在主机或容器中持久化时,最好使用tmpfs装载。这可能是出于安全原因,或者在应用程序需要写入大量非持久状态数据时保护容器的性能。

小提示

    如果将空卷装入文件或目录所在容器中的目录中,这些文件或目录将被传播(复制)到卷中。同样,如果启动容器并指定一个不存在的卷,则会为您创建一个空卷。这是预填充另一个容器所需数据的好方法。

    如果将绑定挂载或非空卷挂载容器中的某个目录(其中存在某些文件或目录),这些文件或目录将被装入掩盖,就像将文件保存到Linux主机上的/mnt中,然后将USB驱动器装入 /mnt 一样。/mnt的原有内容将被USB驱动器的内容遮蔽,直到USB驱动器卸载为止。被遮蔽的文件不会被删除或更改,但在装入绑定装入或卷时无法访问。