Docker 執行 SQL Server 容器映像
隨著.Net Core迭代,大家也都用上了Linux用上了Docker。跟.Net經常配套使用的SQL SERVER以前一直是windows only,但是從SQL Server 2017開始已經支援執行在Docker上,也就說現在SQL Serer已經可以執行在Linux/Docker下了。
下來將演示SQL Server 2019執行在Docker下
-
先決條件
-
任何受支援的 Linux 分發或用於 Mac/Windows 的 Docker 上的 Docker 引擎 1.8+。
-
有關詳細資訊,請參閱Install Docker(安裝 Docker)。 Dockeroverlay2儲存驅動程式。這是大多數使用者的預設設定。如果發現自己未使用此儲存提供程式並且需要進行更改,請參閱docker 文件中有關配置 overlay2 的說明和警告。
-
至少 2 GB 的磁碟空間。
-
至少 2 GB 的 RAM。 Linux 上的 SQL Server 的系統要求。
-
拉取並執行 2019 容器映像
Linux Docker從 Microsoft 容器登錄檔中拉取 SQL Server 2019容器映像
sudo docker pull mcr.microsoft.com/mssql/server:2019-latest
Windows Docker Desktop下從 Microsoft 容器登錄檔中拉取 SQL Server 2019容器映像,以管理員身份執行CMD或PowerShell執行一下命令
docker pull mcr.microsoft.com/mssql/server:2019-latest
待結束後,執行以下命令即可看到我們拉取成功的映象
docker images
要使用 Docker 執行容器映像,可以從 Bash Shell (Linux/macOS) 或提升的 PowerShell 命令提示符使用以下命令,Linux下使用sudo提升執行許可權
docker run -v /d/MSSQL:/var/opt/mssql --name sqlserver -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=2019@123' -p 17951:1433 -d mcr.microsoft.com/mssql/server:2019-latest
如下圖已執行成功
引數說明:
引數 | 說明 |
---|---|
-e 'ACCEPT_EULA=Y' | 設定此引數說明同意 SQL SERVER 使用條款 , 否則無法使用 |
-e 'SA_PASSWORD=密碼' | 此處設定 SQL SERVER 資料庫 SA 賬號的密碼 |
-p 17951:1433 | 將宿主機 17951埠對映到容器的 1433 埠 |
--name sqlserver | 設定容器名為 mssql |
-v/d/MSSQL:/var/opt/mssql | 將windnows宿主機目錄D:\MSSQL 對映到容器 /var/opt/mssql , 方便備份資料 |
-d | 在後臺執行 |
檢視 Docker 容器
docker ps -a
應會看到與以下螢幕截圖類似的輸出
連線到 SQL Server
使用客戶端工具Microsoft SQL Server Management 連線
連線成功
我們在客戶端Microsoft SQL Server Management 建立測試資料Test,可以在我們本地對映的目錄D:\MSSQL\data看到
如需還原資料庫我們可將xxx.bak,檔案拷貝至D:\MSSQL\data在客戶端工具中還原即可,如下圖
使用命令在容器內部互動
使用docker exec -it
命令在執行的容器內部互動,下來我們將結束通過命令在容器內部互動還原資料 /查詢/備份等。
docker exec -it sqlserver bash
使用命令在內部連線,在容器內部使用 sqlcmd 進行本地連線。預設情況下,sqlcmd 不在路徑之中,因此需要指定完整路徑。
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P [資料庫密碼]
如果成功,應會顯示 sqlcmd 命令提示符:1>
在 sqlcmd 命令提示符中,貼上以下 Transact-SQL 命令以建立測試資料庫:
CREATE DATABASE MyDB
在下一行中,編寫一個查詢以返回伺服器上所有資料庫的名稱
SELECT Name from sys.Databases
前兩個命令並沒有立即執行。在新行中鍵入GO
以執行以前的命令:
GO
插入資料
接下來建立一個新表 MyTable,然後插入兩個新行。
在 sqlcmd 命令提示符中,將上下文切換到新的MyDB資料庫:
USE MyDB
建立名為 MyTable的新表:
CREATE TABLE MyTable (id INT, name NVARCHAR(50), quantity INT)
併為MyTable表插入資料
INSERT INTO MyTable VALUES (1, 'banana', 150); INSERT INTO MyTable VALUES (2, 'orange', 154);
要執行上述命令的型別GO
:
GO
在Microsoft SQL Server Management中檢視資料
在容器內部查詢資料
SELECT * FROM MyTable WHERE id =1;
執行以上命令
GO
要結束 sqlcmd 會話,請鍵入QUIT
:
今天就分享至此,感謝你的閱讀。