当前位置: 首页 > 面试题库 >

在Docker容器中处理持久数据时,绑定挂载和卷之间有什么区别?

吕奇
2023-03-14
问题内容

我想知道为什么我们有两个不同的选项来做同一件事,两者之间有什么区别。


问题答案:

对于持久性数据,我们基本上有3种类型的卷或装载:

  1. 绑定坐骑

  2. 命名卷

  3. dockerfile中的卷

绑定挂载基本上只是从容器内的主机绑定某个目录或文件(docker run -v /hostdir:/containerdir IMAGE_NAME

命名卷是您使用手动创建的卷docker volume create VOLUME_NAME。它们是在它们中创建的/var/lib/docker/volumes,只能由它们的名称引用。假设您创建了一个名为“
mysql_data”的卷,您可以像这样引用它docker run -v mysql_data:/containerdir IMAGE_NAME

然后在dockerfiles中有由VOLUME指令创建的卷。这些卷也以以下/var/lib/docker/volumes名称创建,但没有特定名称。他们的“名字”仅仅是某种哈希。在运行容器时将创建该卷,并且无论您是否启动容器,该卷都可以方便地保存持久数据-v。开发人员可以说出重要数据在哪里以及应该保留哪些数据。

我应该使用什么?

您要使用的功能主要取决于首选项或您的管理。如果要将所有内容保留在“
docker区域”(/var/lib/docker)中,则可以使用卷。如果要保留自己的目录结构,则可以使用绑定。

Docker建议使用卷而不是使用binds ,因为卷是由docker创建和管理的,并且绑定具有更大的失败可能性(同样由于第8层问题)。

如果使用绑定并想在其他主机上传输容器/应用程序,则必须重建目录结构,因为每台主机上的卷都更加统一。



 类似资料:
  • 问题内容: Docker中的容器和映像之间有什么区别?在《Docker入门》教程中,这两个术语都被使用,但是我不明白它们之间的区别。 有人可以说明一下吗? 问题答案: 图像是实时容器的固定不变快照。容器正在运行(或停止)某些图像的实例。 从名为“ubuntu”的基本映像开始。让我们在ubuntu映像中交互式运行bash并创建一个文件。我们将使用和标志为我们提供一个交互式bash shell。 不要

  • 问题内容: 使用Docker时,我们从基础映像开始。我们启动它,创建更改,并将这些更改保存在形成另一个映像的层中。 因此,最终我为自己的PostgreSQL实例提供了一个映像,为我的Web应用程序提供了一个映像,对它们的更改将继续保留。 什么是容器? 问题答案: 图像的实例称为容器。您有一张图像,该图像是您描述的一组图层。如果启动此映像,则该映像具有正在运行的容器。您可以有多个运行中的同一图像容器

  • 我想在Docker上运行SonarQube。当我运行whiteout volume Persisted选项时,它与以下命令一起正常工作: 2019-07-07 06:42:41,143无法创建文件/opt/sonarqube/logs/es.log java.io.io.ioException:在java.base/java.io.unixfilesystem.createFileTraction

  • 问题内容: 我了解(对于容器)和(对于图像)之间的区别。但最终,保存或导出产生的tarball应该用作 图像 。 那么,为什么有2条命令可以从压缩包制作图像呢? 问题答案: 确实会产生tarball, 但 包含所有父图层以及所有标签+版本。 也会产生压缩包,但没有任何层/历史记录。 当人们想“展平”映像时通常使用它,如Thomas Uhrig的 “展平Docker容器或映像 ” 所示: 但是,一旦

  • 问题内容: 嗨,我正在使用Docker部署一些服务,在这里我想在不同的Docker容器之间共享Docker卷。 假设我有一个Docker容器A在/ data挂载了一个卷。这是A的Dockerfile 据我了解,这会将一个卷附加到容器,但不会将主机目录装载到该容器。因此,该卷内的数据仍位于容器A内。 我有另一个提供ftp服务的容器B。它访问卷/ public下的数据。B的Dockerfile是 现在

  • 我正在使用Docker部署一些服务,我想在不同的容器之间共享Docker卷。 假设我有一个Docker容器a,它在/data处挂载了一个卷。下面是它的DockerFile: 根据我的理解,这会将卷附加到容器,但不会将主机目录挂载到容器。所以这个卷里面的数据仍然在容器A里面。