『 云原生·Docker』Docker存储

系列文章目录

本系列主要分为以下六大部分,正在更新中,尽请期待!

  • 『 云原生·生之门』
  • 『 云原生·前置知识』
  • 『 云原生·Docker』
  • 『 云原生·Kubernetes』
  • 『 云原生·KubeSphere』
  • 『 云原生·DevOps』

点击关注本专栏


提示:已经更新的或正在更新的文章前面打勾了哈!

文章目录

  • 系列文章目录
  • 前言
  • 一、数据卷
    • 1.列出所有卷
    • 2.创建卷
    • 3.查询卷详情
    • 4.删除卷
    • 5.移除无用卷
  • 二、存储方式
    • 1.volume卷
    • 2.bind mount绑定挂载
    • 3.tmpfs临时挂载
  • 总结


前言

将数据存储在容器中,一旦容器被删除,数据也会被删除。同时也会使容器变得越来越大,不方便恢复和迁移。

将数据存储到容器之外,这样删除容器也不会丢失数据。一旦容器故障,我们可以重新创建一个容器,将数据挂载到容器里,就可以快速的恢复。

一、数据卷

卷(volume)是docker 容器存储数据的首选方式,卷有以下优势:

  1. 卷可以在多个正在运行的容器之间共享数据。仅当显式删除卷时,才会删除卷。
  2. 你想要将容器数据存储在外部网络存储上或云提供商上,而不是本地时,卷就是最佳选择。
  3. 更容易备份或迁移,当您需要备份、还原数据或将数据从一个 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 提供了以下存储选项:

  1. volume
  2. bind mount 绑定挂载
  3. 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 不会将它当做目录,而是当做卷。

你可能感兴趣的:(『云原生专栏』,云原生,docker,容器,数据卷,docker存储)