我想知道为什么我们有两个不同的选项来做同一件事,两者之间有什么区别。
对于持久性数据,我们基本上有3种类型的卷或装载:
绑定坐骑
命名卷
dockerfile中的卷
绑定挂载基本上只是从容器内的主机绑定某个目录或文件(docker run -v /hostdir:/containerdir IMAGE_NAME)
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。
docker volume create VOLUME_NAME
/var/lib/docker/volumes
docker run -v mysql_data:/containerdir IMAGE_NAME
然后在dockerfiles中有由VOLUME指令创建的卷。这些卷也以以下/var/lib/docker/volumes名称创建,但没有特定名称。他们的“名字”仅仅是某种哈希。在运行容器时将创建该卷,并且无论您是否启动容器,该卷都可以方便地保存持久数据-v。开发人员可以说出重要数据在哪里以及应该保留哪些数据。
VOLUME
-v
我应该使用什么?
您要使用的功能主要取决于首选项或您的管理。如果要将所有内容保留在“ docker区域”(/var/lib/docker)中,则可以使用卷。如果要保留自己的目录结构,则可以使用绑定。
/var/lib/docker
Docker建议使用卷而不是使用binds ,因为卷是由docker创建和管理的,并且绑定具有更大的失败可能性(同样由于第8层问题)。
如果使用绑定并想在其他主机上传输容器/应用程序,则必须重建目录结构,因为每台主机上的卷都更加统一。