系列文章目录
本系列主要分为以下六大部分,正在更新中,尽请期待!
- 『 云原生·生之门』
- 『 云原生·前置知识』
- 『 云原生·Docker』
- 『 云原生·Kubernetes』
- 『 云原生·KubeSphere』
- 『 云原生·DevOps』
🚩点击关注本专栏
提示:已经更新的或正在更新的文章前面打勾了哈!
文章目录
前言
将数据存储在容器中,一旦容器被删除,数据也会被删除。同时也会使容器变得越来越大,不方便恢复和迁移。
将数据存储到容器之外,这样删除容器也不会丢失数据。一旦容器故障,我们可以重新创建一个容器,将数据挂载到容器里,就可以快速的恢复。
一、数据卷
卷(
volume
)是docker 容器存储数据的首选方式,卷有以下优势:
- 卷可以在多个正在运行的容器之间共享数据。仅当显式删除卷时,才会删除卷。
- 你想要将容器数据存储在外部网络存储上或云提供商上,而不是本地时,卷就是最佳选择。
- 卷更容易备份或迁移,当您需要备份、还原数据或将数据从一个 Docker 主机迁移到另一个 Docker 主机时,卷是更好的选择。
接下来我们结合上一篇文章Docker容器数据卷继续完善一下docker的命令吧!
1.列出所有卷
- 命令:
docker volume ls
2.创建卷
- 命令:
docker volume create 卷名
3.查询卷详情
- 命令:
docker volume inspect 卷名
4.删除卷
- 命令:
docker volume rm 卷名
5.移除无用卷
- 命令:
docker volume prune
二、存储方式
docker 提供了以下存储选项:
volume
卷bind mount
绑定挂载tmpfs
临时挂载
1.volume卷
卷存储在主机文件系统分配一块专有存储区域,由 Docker(在 Linux 上)管理,并且与主机的核心功能隔离。非 Docker 进程不能修改文件系统的这一部分。卷是在 Docker 中持久保存数据的最佳方式。
卷适用于以下类型的用例:
- 在多个运行中的容器之间共享数据。如果您未明确创建它,则将在第一次将其挂载到容器时创建该卷。当该容器停止或删除时,该卷仍然存在。多个容器可以同时挂载相同的卷(可读写或只读)。仅在显式删除卷时才将它们删除。
- 不保证Docker主机具有给定的目录或文件结构时。卷可帮助您将Docker主机的配置与容器运行时解耦。
- 当您要将容器的数据存储在远程主机或云提供商上时,而不是在本地。
- 当您需要将数据从一个Docker主机备份,还原或迁移到另一个Docker主机时,卷是一个更好的选择。您可以停止使用该卷的容器,然后备份该卷的目录(例如/var/lib/docker/volumes/)。
我们可以使用该命令显式的创建卷dome,或者在容器创建时创建卷,如下:
docker volume create dome
2.bind mount绑定挂载
绑定挂载可以将主机文件系统上目录或文件装载到容器中,但是主机上的非 Docker 进程可以修改它们,同时在容器中也可以更改主机文件系统,包括创建、修改或删除文件或目录,使用不当,可能会带来安全隐患。
绑定挂载适用于以下类型的用例:
- 将配置文件从主机共享给容器。这是Docker为容器提供DNS解析的方式的默认方式,通过将
/etc/resolv.conf
从主机挂载到每个容器中来。 - 在Docker主机上的开发环境和容器之间共享源代码或构建工件。例如,您可以将
Maven target/目录
挂载到容器中,这样每次在Docker主机上构建Maven项目时,容器都可以访问重建的工件。如果您以这种方式使用Docker进行开发,那么您的生产Dockerfile会将生产就绪的工件直接复制到映像中,而不是依赖于绑定挂载。 - 当需要确保Docker主机的文件或目录结构与绑定挂载容器所需的一致时。
我们通过
-v
选项绑定挂载一个目录/dome/html到容器中,如下:
docker run -dt-v /dome/html:/usr/html/html --name dome dome
3.tmpfs临时挂载
tmpfs挂载仅存储在主机系统的内存中,从不写入主机系统的文件系统。当容器停止时,数据将被删除。
tmpfs临时挂载适用于以下类型的用例:
- 当您不希望数据在主机上或容器内持久存在时,tmpfs挂载最适合使用。这可能是出于安全原因或为了保护容器的性能,当您的应用程序需要写入大量非持久状态数据时。
我们通过–tmpfs选项挂载一个内存块,如下:
docker run -dt--name dome_tmpfs --tmpfs /etc/running dome
看看本专栏文章有哪些吧!
本系列文章目录:
- 『 云原生·生之门』
- 『 云原生·前置知识』
- 『 云原生·Docker』
- 『 云原生·Kubernetes』
- 『 云原生·KubeSphere』
- 『 云原生·DevOps』
🚩点击关注本专栏
可以看出来本系列文章将会带你从-1到1的学习云原生的,一起加油吧!
总结
当使用
-v
参数的时候,如果是
docker run 宿主机绝对路径:Docker容器内部绝对路径
的方式,就是挂载,会有空挂载的问题;如果是
docker run -v 不以/开头的路径:Docker容器内部绝对路径的方式
,就是绑定,Docker 会自动管理,Docker 不会将它当做目录,而是当做卷。
版权归原作者 abcccccccccccccccode 所有, 如有侵权,请联系我们删除。