如何在ubuntu[linux] 上用docker安裝Sqlserver

高宏顺發表於2024-04-12

本次按照目前最新版本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 密碼。

  1. 選擇 SA 使用者要使用的強密碼。

  2. 使用 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

  1. 使用 docker exec -it 命令在執行的容器內部啟動互動式 Bash Shell。 在下面的示例中,sql1 是在建立容器時由 --name 引數指定的名稱。

    sudo docker exec -it sql1 "bash"
  2. 在容器內部使用完整路徑透過 sqlcmd 進行本地連線。
    sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
  3. 備註

    預設情況下,較新版本的 sqlcmd 是安全的。 有關連線加密的詳細資訊,請參閱 sqlcmd 實用工具(對於 Windows)和使用 sqlcmd 進行連線(對於 Linux 和 macOS)。 如果連線不成功,則可以將 -No 選項新增到 sqlcmd,以指定加密是可選的,而不是強制性的。

    可以省略命令列上提示要輸入的密碼。 例如:

    sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid>
  4. 如果成功,應會顯示 sqlcmd 命令提示符:1>

建立和查詢資料

以下部分將引導你使用 sqlcmd 和 Transact-SQL 完成新建資料庫、新增資料並執行查詢的整個過程。

新建資料庫

以下步驟建立一個名為 TestDB 的新資料庫。

  1. 在 sqlcmd 命令提示符中,貼上以下 Transact-SQL 命令以建立測試資料庫:

    CREATE DATABASE TestDB; 
  2. 在下一行中,編寫一個查詢以返回伺服器上所有資料庫的名稱:

    SELECT Name from sys.databases;
  3. 前兩個命令沒有立即執行。 在新行中鍵入 GO 以執行前面的命令:

    GO

插入資料

接下來建立一個新表 Inventory,然後插入兩個新行。

  1. 在 sqlcmd 命令提示符中,將上下文切換到新的 TestDB 資料庫:

    USE TestDB;
  2. 建立名為 Inventory 的新表:

    CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
  3. 將資料插入新表:

    INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
  4. 鍵入 GO 執行上述命令:

    GO

選擇資料

現在,執行查詢以從 Inventory 表返回資料。

  1. 透過 sqlcmd 命令提示符輸入查詢,以返回 Inventory 表中數量大於 152 的行:

    SELECT * FROM Inventory WHERE quantity > 152;
  2. 執行以下命令:

    GO

退出 sqlcmd 命令提示符

  1. 要結束 sqlcmd 會話,請鍵入 QUIT

    QUIT
  2. 要在容器中退出互動式命令提示,請鍵入 exit。 退出互動式 Bash Shell 後,容器將繼續執行。

刪除容器

sudo docker stop sql1 sudo docker rm sql1

【參考文件】

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

相關文章