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

Difference between data and host volume in Docker containers?

据我所知,在 Docker 中有 2 个使用音量的选项:

1. 挂载主机目录作为数据卷:

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

2. 使用数据量容器:

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 中的数据完全保留在 <host directory> 中。但是在第二个选项中,它保存在 Docker 数据文件中的什么地方?

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

3)在主机目录挂载数据,删除所有容器,卸载Docker,数据还在。那么,重装Docker,将同一个数据库挂载到同一个主机上,是否会得到卸载Docker前相同的数据?

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

  2. 我不太确定你在这里问什么。同时,docker 卷(而不是绑定挂载,即将主机文件夹挂载到容器)可用的一项功能是能够在容器启动时 copy the content from the path in the image to a freshly created volume

  3. 数据就是数据,不管你把它放在哪里。如果您有任何类型的(经过全面测试!)备份,您将始终能够恢复它并将其提供给您的新容器。 docker 初学者的绑定挂载情况通常很容易想象(即备份主机上的文件夹,恢复它并将其绑定挂载回新容器)。如果您决定使用卷(这可能是一个很好的建议,如 volume documentation introduction), see Backup, restore, or migrate data volumes 中所述,以便初步了解如何进行。