本次按照目前最新版本Sqlserver2022進行記錄
先決條件
- 任何受支援的 Linux 發行版上的 Docker 引擎 1.8 及更高版本。 有關詳細資訊,請參閱 Install Docker(安裝 Docker)。
- 有關硬體要求和處理器支援的詳細資訊,請參閱SQL Server 2022:硬體和軟體要求
-
Docker
overlay2
儲存驅動程式。 此驅動程式是大多數使用者的預設設定。 如果你未使用此儲存提供程式並且需要進行更改,請參閱有關配置 overlay2 的 Docker 文件中的說明和警告。 -
在 Docker 主機上安裝最新的 sqlcmd。
-
至少 2 GB 的磁碟空間。
-
至少 2 GB 的 RAM。
-
Linux 上的 SQL Server 的系統要求。
從登錄檔拉取容器
從 Microsoft 容器登錄檔中請求 SQL Server 2022 (16.x) Linux 容器映像。
sudo docker pull mcr.microsoft.com/mssql/server:2022-latest
執行容器
要使用 Docker 執行 Linux 容器映像,可以從 Bash Shell 或提升的 PowerShell 命令提示符使用以下命令。
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=密碼" \ -p 1433:1433 --name sql1 --hostname sql1 \ -d \ -v /data/mssql:/var/opt/mssql mcr.microsoft.com/mssql/server:2022-latest
密碼應符合 SQL Server 預設密碼策略,否則容器無法設定 SQL Server,會停止工作。 預設情況下,密碼必須為至少八個字元且包含以下四種字元中的三種:大寫字母、小寫字母、十進位制數字、符號。 可使用 docker logs 命令檢查錯誤日誌。
預設情況下,本快速入門會建立一個使用 SQL Server 開發人員版的容器。 在容器中執行生產版本的過程略有不同。 有關詳細資訊,請參閱執行生產容器映像。
下表對前一個 docker run
示例中的引數進行了說明:
引數 | 說明 |
---|---|
-e "ACCEPT_EULA=Y" |
將 ACCEPT_EULA 變數設定為任意值,以確認接受終端使用者許可協議。 SQL Server 映像的必需設定。 |
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" |
指定至少包含 8 個字元且符合密碼策略的強密碼。 SQL Server 映像的必需設定。 |
-e "MSSQL_COLLATION=<SQL_Server_collation>" |
指定自定義 SQL Server 排序規則,而不使用預設值 SQL_Latin1_General_CP1_CI_AS 。 |
-p 1433:1433 |
將主機環境中的 TCP 埠(第一個值)對映到容器中的 TCP 埠(第二個值)。 在此示例中,SQL Server 偵聽容器中的 TCP 1433,此容器埠隨後會對主機上的 TCP 埠 1433 公開。 |
--name sql1 |
為容器指定一個自定義名稱,而不是使用隨機生成的名稱。 如果執行多個容器,則無法重複使用相同的名稱。 |
--hostname sql1 |
用於顯式設定容器主機名。 如果未指定主機名,則主機名預設為容器 ID,這是隨機生成的系統 GUID。 |
-d |
在後臺執行容器(守護程式)。 |
-v |
將檔案掛載到 本機路徑/data/mssql |
mcr.microsoft.com/mssql/server:2022-latest |
SQL Server Linux 容器映像。 |
更改系統管理員密碼
SA 帳戶是安裝過程中在 SQL Server 例項上建立的系統管理員。 建立 SQL Server 容器後,可以透過在容器中執行 echo $MSSQL_SA_PASSWORD
來發現指定的 MSSQL_SA_PASSWORD
環境變數。 為了安全起見,應在生產環境中更改 SA 密碼。
-
選擇 SA 使用者要使用的強密碼。
-
使用
docker exec
執行sqlcmd,以使用 Transact-SQL 更改密碼。 以下示例將從使用者輸入中讀取舊密碼和新密碼。sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \ -S localhost -U SA \ -P "$(read -sp "Enter current SA password: "; echo "${REPLY}")" \ -Q "ALTER LOGIN SA WITH PASSWORD=\"$(read -sp "Enter new SA password: "; echo "${REPLY}")\""
連線到 SQL Server
下列步驟在容器內部使用 SQL Server 命令列工具 sqlcmd 實用程式 來連線 SQL Server。
-
使用
docker exec -it
命令在執行的容器內部啟動互動式 Bash Shell。 在下面的示例中,sql1
是在建立容器時由--name
引數指定的名稱。sudo docker exec -it sql1 "bash"
- 在容器內部使用完整路徑透過 sqlcmd 進行本地連線。
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
-
備註
預設情況下,較新版本的 sqlcmd 是安全的。 有關連線加密的詳細資訊,請參閱 sqlcmd 實用工具(對於 Windows)和使用 sqlcmd 進行連線(對於 Linux 和 macOS)。 如果連線不成功,則可以將
-No
選項新增到 sqlcmd,以指定加密是可選的,而不是強制性的。可以省略命令列上提示要輸入的密碼。 例如:
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid>
-
如果成功,應會顯示 sqlcmd 命令提示符:
1>
。
建立和查詢資料
以下部分將引導你使用 sqlcmd 和 Transact-SQL 完成新建資料庫、新增資料並執行查詢的整個過程。
新建資料庫
以下步驟建立一個名為 TestDB
的新資料庫。
-
在 sqlcmd 命令提示符中,貼上以下 Transact-SQL 命令以建立測試資料庫:
CREATE DATABASE TestDB;
-
在下一行中,編寫一個查詢以返回伺服器上所有資料庫的名稱:
SELECT Name from sys.databases;
-
前兩個命令沒有立即執行。 在新行中鍵入
GO
以執行前面的命令:GO
插入資料
接下來建立一個新表 Inventory
,然後插入兩個新行。
-
在 sqlcmd 命令提示符中,將上下文切換到新的
TestDB
資料庫:USE TestDB;
-
建立名為
Inventory
的新表:CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
-
將資料插入新表:
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
-
鍵入
GO
執行上述命令:GO
選擇資料
現在,執行查詢以從 Inventory
表返回資料。
-
透過 sqlcmd 命令提示符輸入查詢,以返回
Inventory
表中數量大於 152 的行:SELECT * FROM Inventory WHERE quantity > 152;
-
執行以下命令:
GO
退出 sqlcmd 命令提示符
-
要結束 sqlcmd 會話,請鍵入
QUIT
:QUIT
-
要在容器中退出互動式命令提示,請鍵入
exit
。 退出互動式 Bash Shell 後,容器將繼續執行。
刪除容器
sudo docker stop sql1 sudo docker rm sql1
【參考文件】
Docker:為 Linux 上的 SQL Server 安裝容器 - SQL Server | Microsoft Learn