一尘不染

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

docker

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


阅读 724

收藏
2020-06-17

共1个答案

一尘不染

对于持久性数据,我们基本上有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层问题)。

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

2020-06-17