1. 程式人生 > 實用技巧 >Docker 執行 SQL Server 容器映像

Docker 執行 SQL Server 容器映像

隨著.Net Core迭代,大家也都用上了Linux用上了Docker。跟.Net經常配套使用的SQL SERVER以前一直是windows only,但是從SQL Server 2017開始已經支援執行在Docker上,也就說現在SQL Serer已經可以執行在Linux/Docker下了。
下來將演示SQL Server 2019執行在Docker下

  • 先決條件

  1. 任何受支援的 Linux 分發或用於 Mac/Windows 的 Docker 上的 Docker 引擎 1.8+。

  2. 有關詳細資訊,請參閱Install Docker(安裝 Docker)。 Dockeroverlay2儲存驅動程式。這是大多數使用者的預設設定。如果發現自己未使用此儲存提供程式並且需要進行更改,請參閱docker 文件中有關配置 overlay2 的說明和警告。

  3. 至少 2 GB 的磁碟空間。

  4. 至少 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

今天就分享至此,感謝你的閱讀。