在处理Docker容器中的持久数据时绑定装载和容量有什么区别?

我想知道为什么我们有两个不同的select来做同样的事情,两者有什么区别。

我们基本上有三种types的卷或挂载持久性数据:

  1. 绑定坐骑

  2. 命名的卷

  3. dockerfiles中的卷

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

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

然后是由VOLUME指令创build的dockerfiles中的卷。 这些卷也在/var/lib/docker/volumes下创build,但没有特定名称。 他们的“名字”只是某种散列。 运行容器时会创build卷,并且可以方便地保存持久数据,无论是否使用-v启动容器。 开发人员可以说明重要数据在哪里,什么应该是持久的。

我应该使用什么?

你想要使用的东西主要归结为偏好或pipe理。 如果要将所有内容保存在“泊坞区”( /var/lib/docker )中,则可以使用卷。 如果你想保留自己的目录结构,你可以使用绑定。

Dockerbuild议使用卷来使用绑定 ,因为卷是由docker创build和pipe理的,绑定具有更多的失败潜力(也是由于第8层的问题)。

如果使用绑定并希望将容器/应用程序转移到另一主机上,则必须重build目录结构,因为每个主机上的卷更均匀。