Docker容器中数据和主机卷之间的差异?

Docker容器中数据和主机卷之间的差异?,docker,docker-compose,dockerfile,docker-volume,Docker,Docker Compose,Dockerfile,Docker Volume,据我所知,在Docker中使用卷有两个选项: 一,。将主机目录装载为数据卷: docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>/data:/var/opt/mssql/data -d mcr.microsoft.com/mssql/server:2019-lates

据我所知,在Docker中使用卷有两个选项:

一,。将主机目录装载为数据卷:

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 
-v <host directory>/data:/var/opt/mssql/data 
-d mcr.microsoft.com/mssql/server:2019-latest
二,。使用数据卷容器:

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 
-v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-latest
我的问题是:

1在第一个选项中,我认为/var/opt/mssql/data中的数据完全保持打开状态。但是在第二个选项中,它保存在Docker数据文件中的什么位置

2假设我有一个当前使用的容器,其中存储了/var/opt/mssql/data,然后决定将其装载到一个容器中。在这个场景中,我可以使用第二个选项中的docker run命令将这些数据直接移动到主机目录吗?或者我应该备份和恢复此数据

3在主机目录中装载数据并删除所有容器和卸载Docker时,我们仍然拥有数据。那么,在重新安装Docker并将相同的数据库装载到相同的主机之后,我们会在卸载Docker之前获得相同的数据吗

绑定装载的数据保存在主机上的绑定装载文件夹中。这没有什么神秘的。对于docker卷,在大多数典型情况下,数据保存在docker主机上。确切的位置和文件夹体系结构取决于您的配置,更具体地说取决于。同时,检查/var/lib/docker/volumes可能是一个良好的开端。请注意,一些驱动程序支持通过网络存储数据,例如vieux/sshfs…,但从您的问题来看,我怀疑您目前是否使用这些驱动程序

我不完全确定你在问什么。同时,docker卷(而非绑定装载)提供的一个功能,即将主机文件夹装载到容器时,能够在容器启动时进行复制

数据就是数据,不管你把它放在哪里。如果你有任何类型的彻底测试!备份时,您将始终能够恢复它并将其提供给新容器。对于docker初学者来说,绑定挂载的情况通常很容易想象,即备份主机上的文件夹,将其还原并绑定挂载回新容器。如果您决定使用卷,这可能是一个很好的建议,如中所述,请参阅以获得如何继续的第一个想法


非常感谢您的详细解释,投票通过;另一方面,我需要关于以上几点的一些细节。1我使用Windows,在最新版本的Docker之前,我认为数据保存在Program data文件夹中。但在WLS2支持之后,它可能会保留在为WLS2支持而安装的Linux部件中。这是真的吗?2你的例子很有用。我只是想了解一下,假设我的数据库中有一个Docker容器中的数据,但没有装入卷。然后我决定将数据库移动到主机目录中的一个卷。在这个场景中,我想我可以轻松地将这些数据传输到我的装载和重新启动Docker?这是真的吗?如果是,那么旧数据呢?它还会保存在容器中吗?3实际上我现在更喜欢备份数据库而不是Docker容器或卷。所以,我只是要求继续使用以前的数据文件,而不进行备份。场景是这样的:我有一个数据库,它的数据被装载到主机目录。然后我删除Docker容器并卸载Docker。然后安装Docker并将新数据库的数据文件夹装载到我的主机中以前的数据目录中。那么我想我可以在没有任何备份/恢复操作的情况下获取以前的数据吗?这是真的吗?1-我不知道我不认识windows。2-您可以将文件从一个文件夹复制到另一个文件夹,无论是否装入,请自行决定。试试看,这比问问题快多了。是的。今天早上我有一些时间,我通常喜欢做一个乐于助人的人,所以我决定回答你的问题。同时,它肯定表明你没有花太多时间阅读文档,也没有在你这方面进行试验,这可能就是为什么有人认为它值得投反对票的原因。而不是问你为什么投票?在没有任何证据或要求增加选票的情况下,将此视为您的问题需要改进的迹象。如果你真的不喜欢被否决的风险,就不要这样做,因为它会发生的。