Linux 上用於 SQL Server + Docker 的 Linux 卷
我正在 Linux 上的 Docker 容器上測試 SQL 的 POC 項目,並且想要一些有關如何請求 Linux VM 上的儲存的背景資訊。該計劃是使用 SQL 2019 在至少 10 TB 的儲存空間上啟動 10 個容器
我的問題特定於 sql 容器在 Linux VM 中的儲存位置。這將幫助我相應地請求該特定掛載點的儲存容量
謝謝
在容器中執行 SQL Server 時,您需要使用綁定掛載或命名卷來持久化數據庫。
通過使用綁定掛載或命名卷,您正在做的是將數據從 SQL 實例中分離出來,這樣如果容器有問題需要刪除,您可以啟動另一個容器並將數據庫掛載到其中。
綁定掛載是將捲從主機掛載到容器中,命名卷是在 docker 中創建的捲,可以從一個容器映射到另一個容器。
兩者都是通過在 docker 容器執行語句中使用 –volume 標誌指定的。
通過使用這些,您可以確定 SQL Server 數據庫將在主機上的哪個位置保留並相應地請求儲存。
綁定掛載的範例:-
mkdir /mnt/mssqlsystem mkdir /mnt/mssqluser docker container run -d \ --publish 1433:1433 \ --volume /mnt/mssqlsystem:/var/opt/mssql/data \ --volume /mnt/mssqluser:/var/opt/sqlserver \ --env ACCEPT_EULA=Y \ --env MSSQL_SA_PASSWORD=Testing1122 \ --env MSSQL_DATA_DIR=/var/opt/sqlserver \ --env MSSQL_LOG_DIR=/var/opt/sqlserver \ --name sqlcontainer1 \ mcr.microsoft.com/mssql/server:2019-CU6-ubuntu-18.04
這裡發生的是在主機上創建了兩個目錄並映射到容器內的 /var/opt/mssql/data(系統數據庫的位置)和 /var/opt/sqlserver。/var/opt/sqlserver 也是 ENV 變數設置的使用者數據和日誌目錄的預設位置。
命名卷的範例:-
docker volume create mssqlsystem docker volume create mssqluser docker container run -d \ --publish 1433:1433 \ --volume mssqlsystem:/var/opt/mssql \ --volume mssqluser:/var/opt/sqlserver \ --env ACCEPT_EULA=Y \ --env MSSQL_SA_PASSWORD=Testing1122 \ --env MSSQL_DATA_DIR=/var/opt/sqlserver \ --env MSSQL_LOG_DIR=/var/opt/sqlserver \ --name sqlcontainer1 \ mcr.microsoft.com/mssql/server:2019-CU6-ubuntu-18.04
這裡創建了兩個命名卷並映射到容器內的 /var/opt/mssql/data 和 /var/opt/sqlserver。您實際上不需要單獨創建卷,如果它們在 docker 容器執行語句中指定並且不存在,則 docker 將創建它們。
您可以通過執行查看命名卷在主機上的位置
docker volume inspect mssqlsystem docker volume inspect mssqluser
可以使用 docker 卷外掛來更改創建命名卷的位置。更多細節在這裡: - https://dbafromthecold.com/2018/05/02/chang-the-location-of-docker-named-volumes/
此處的 SQL Server 和容器指南詳細介紹了使用綁定掛載和命名卷的完整過程:- https://github.com/dbafromthecold/SqlServerAndContainersGuide/wiki