如何在Docker容器中引用外部的SQL存储。
如何在Docker容器中引用外部的SQL存储。
作为一个对Docker不太熟悉的新手,并且考虑到一个大小为几百GB或更大的SQL Server的存储问题,我觉得在一个容器中存储这么多数据是不可行的。加载大文件需要时间,而在TB级别的文件中,合理的位置应该是将其与容器分开挂载。
在尝试了几天的谷歌搜索之后,我觉得向社区寻求帮助更有道理。希望能用一张图片代表1000个字。
在这些源文件位于Fortress(见屏幕截图)且Docker容器位于云中的某个地方的情况下,SQL Server容器如何挂载外部SQL Server源(mdf、ldf、ndf)?同样,Fortress也可以是云上的位置。
示例:
SQL容器 192.169.20.101 SQL数据库文件 192.168.10.101
目前,.mdf、.ldf文件位于容器中。它们应该连接到不在容器中的另一个位置。同时,我也很想知道如何将备份文件从"/var/opt/mssql/data/xxxx.bak"移动到我的Windows机器上的某个位置。
在使用Docker容器时,如果需要引用外部的SQL存储,一个明智的做法是将其与容器分开挂载。当更新SQL Server时,需要替换容器。更新SQL Server镜像将会对新创建的容器生效,但却不会更新正在运行的容器中的SQL Server。要实现这一点,需要创建一个新的容器,使用最新的SQL Server容器镜像,并将数据迁移到新容器中。
所以,要解决这个问题,可以先了解Docker卷以及如何将其与SQL Server一起使用。具体方法可以参考博文中提供的链接:[Upgrade SQL Server in containers](https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-docker-container-deployment?view=sql-server-ver15&pivots=cs1-bash#upgrade)以及[Docker Volumes](https://docs.docker.com/storage/volumes/)。
问题的出现原因是需要在Docker容器中引用外部的SQL存储。解决方法如下:
1. 在Visual Studio Code中打开终端。
2. 使用此链接(https://stackoverflow.com/questions/60408574)中的步骤,从VSCode中获取Linux Bash命令。
3. 使用VSCode中的cd ..命令,直到达到根目录,并执行find命令。
4. find / -name "*.mdf"命令将显示存储位置,例如/var/lib/docker/overlay2/merged/var/opt/mssql/data。
5. 使用docker-compose.yml文件在Windows机器上添加存储位置。
6. 将源文件复制到共享驱动器的卷中(路径为/var/lib/docker/overlay2/volumes/)。
7. 在SSMS中连接到Docker中的SQL实例,并更改文件位置。
8. 使用VSCode中的root权限,打开/var/opt/docker/volumes/Fortress文件夹,并为mssql登录用户授予对数据文件夹的权限。
9. 使用SSMS和新的权限,将mdf/ldf文件重新附加到Docker容器的SQL Server中。
最后,可以参考此链接(https://stackoverflow.com/questions/22049212)了解如何在容器和托管容器的Windows机器之间传递文件。