如何使用 SQL Server 2019 容器

以往都是使用 localdb 來進行開發和自動化測試,但它只能支援 Windows 平台,若是要跨平台,SQL Server 容器是選項之一,接下來我們就來看看要怎麼使用。

跟資料庫有關的測試可以稱操作資料庫的動作是倉儲(Repository)物件的單元測試,或者是,商業邏輯物件和倉儲物件的集成測試,不管怎麼叫,基本上對於資料庫的操作案例也應該會涵蓋到;原則上,案例不會多,至少會有一個,再重要性來決定要不要增加。

開發環境

必要條件,參考官方文件:Docker:安裝 Linux 上的 SQL Server 容器 - SQL Server | Microsoft Docs

運行 SQL Server Container

語法:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=pass@w0rd1~" \
   -p 1433:1433 --name sql2019 -h sql2019 \
   -d mcr.microsoft.com/mssql/server:2019-latest

 

設定 SA_PASSWORD 的時候必須符合密碼複雜性要求:

  • 密碼不包含使用者的帳戶名稱,也就是不能包含 sa 這個字。
  • 密碼長度至少為 8 個字元,密碼長度最多可達 128 個字元。
  • 密碼包含下列四種類別的其中三種:
  • 拉丁文大寫字母 (A 到 Z)
  • 拉丁文小寫字母 (a 到 z)
  • 以 10 為基底的數字 (0 到 9)
  • 非英數字元,例如:驚嘆號 (!)、錢幣符號 ($)、數字符號 (#) 或百分比符號 (%)

 

執行結果如下圖:

o 
x 
) docker run -e —e 
—name sqtl —h sqt2019 
-p 1433:1433 
75566aeoeb257c847af618f5493185c74b8e5cøcdb7f14fafcc43f25bb63e44f

更多的環境變數請參考:在 Linux 上設定 SQL Server 的環境變數 - SQL Server | Microsoft Docs

PS.docker run = docker pull + docker create + docker start

若使用以 RedHat 為基礎的容器映像,請參閱 執行 RHEL 型的容器映像。 

若要查看所有可用的映像,請參閱 Docker Hub 頁面

 

下圖 docker run 參數描述,出自 Docker:安裝 Linux 上的 SQL Server 容器 - SQL Server | Microsoft Docs

下 表 提 供 了 前 述 docker run 範 例 的 參 數 描 : 
-e"ACCEPT-EULA—Y¯ 
A ( ( T u 定 為 何 • 以 認 是 否 接 受 End-User 
合 約 , 薌 為 SQLServer 的 要 定 , 
定 您 自 己 的 式 , 該 度 至 少 需 為 8 字 元 且 符 合 SQL 
Server 密 * , 此 為 SQL Server 的 必 要 定 , 
將 主 墳 上 的 TCP 埠 ( 第 - 中 的 TCP 埠 ( 第 
二 - 匣 搴 簍 中 , SQL Server 正 在 接 的 TCP 1433 且 對 主 
上 93* 接 1433 公 , 
為 客 定 自 訂 名 , 而 不 用 產 的 名 , 您 執 行 數 , 
法 用 此 同 名 稱 , 
用 來 虌 定 主 名 , 您 未 后 定 , 則 會 預 為 產 生 之 
GUID , 
SQL “ 2019 Ubuntu 客

 

官方建議,將 -h 與 --name 設為相同的值,這會讓識別目標容器更輕鬆。

 

 

從外部連結 SQL ServerContainer

使用 SSMS 連接

輸入內容如下圖:

Connect to Server 
type: 
Authentication: 
Login: 
SQL Server 
I cralhost 
SQL Server Authentication 
Remember password

連結成功,這看起來就跟一般的伺服器沒啥兩樣

File 
Search • Microsoft SQL Server Management Studio 
Edit View Debug SQLComplete Unit Test Tools Window 
JD New Query 
Help 
Quick Launch (Ctrl •Q) 
@ dbForgeSearch O Help • 
Object Explorer 
Connect • 
-s (SQL Sevvel 53.1 - Sd) 
Databases 
• Security 
Server Objects 
• Replication 
• PolyBase 
Always On High Availability 
Management 
Integration Services Catalogs 
H SQL Server Agent (Agent XPs disable 
E] XEvent Profiler 
O Ready 
Search -a 
DDL 
x 
Data Search 
p. 
• • Al object types 
devart

 

使用 sqlcmd 連結

下載位置:sqlcmd 公用程式 - SQL Server | Microsoft Docs

sqlcmd -S localhost,1433 -U SA -P "pass@w0rd1~"

 

切換到 Powershell,我的開發環境有 sqlcmd 就可以直接用了

X Yao Chang Yu-SQLCMD 
Yao Chang Yu@113Neee382 
) sqlcmd 
localhost . 11433 
-p "pass@wOrd1"" 
-s 
SA 
-U 
o 
[15:37] 
x

 

如果成功,您應該會收到 sqlcmd 命令提示字元:1>

 

進入容器

語法

docker exec -it sql2019 /opt/mssql-tools/bin/sqlcmd -U SA -P pass@w0rd1~ -W

 

如果成功,您應該會收到 sqlcmd 命令提示字元:1>

接下來就可以操作 SQL Server 了,

 

o 
x 
) docker exec —it sq 12019 /opt/mssql—tools/bin/sqlcmd —U SA

 

sqlcmd 操作

查詢

SELECT Name from sys.Databases
GO

 

結束 sqlcmd 命令提示字元

QUIT

 

執行結果如下圖:

變更 SA 密碼

docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P "<YourStrong@Passw0rd>" \
   -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong@Passw0rd>"'

 

清理

移除容器

docker ps -a
docker stop sql2019
docker rm sql2019

移除映像檔

docker images
docker rmi 56beb1db7406

 

參考

Docker:安裝 Linux 上的 SQL Server 容器 - SQL Server | Microsoft Docs

使用 Docker 執行 SQL Server on Linux 容器之常用工具與命令 | The Will Will Web (miniasp.com)

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo