共用方式為


部署和連線到 SQL Server Linux 容器

適用於:SQL Server - Linux

本文說明如何部署及連線到 SQL Server Linux 容器。

如需了解其他部署案例,請參閱:

注意

本文特別著重於 mssql-server-linux 映像的使用。 Windows 容器中的 SQL Server 部署不受支持所涵蓋。 若要進行開發和測試,您可以建立自己的自訂容器映像,在 Windows 容器中使用 SQL Server。 範例檔案可從 GitHub 上取得。 這些範例檔案僅供參考。

重要

選擇執行生產環境使用案例的 SQL Server 容器之前,請先檢閱 SQL Server 容器 的支持原則,以確保您在支援的設定上執行。

這段 6 分鐘的影片會介紹如何在容器上執行 SQL Server:

提取及執行容器映像

若要提取並執行適用於 SQL Server 的 Docker 容器映像,請遵循下列快速入門中的必要條件和步驟:

本設定文章將在下列各節中提供其他使用案例。

連線和查詢

您可以從容器外部或從容器內部,連線和查詢容器中的 SQL Server。 下列各節將說明這兩種案例。

容器外部的工具

您可以從支援 SQL 連線的任何外部 Linux、Windows 或 macOS 工具連線到容器主機上的 SQL Server 執行個體。 一些常用工具包括:

下列範例會使用 sqlcmd 來連線到在容器中執行的 SQL Server。 連接字串中的 IP 位址是執行容器之主機電腦的 IP 位址。

注意

較新版本的 sqlcmd (在 mssql-tools18 中) 預設為安全。 如果使用 18 版或更新版本,您必須將 No 選項新增至 sqlcmd,以指定加密是選擇性的,而不是強制性的。

sqlcmd -S 10.3.2.4 -U sa -P '<YourPassword>'
sqlcmd -S 10.3.2.4 -U sa -P "<YourPassword>"
sqlcmd -S 10.3.2.4 -U sa -P "<YourPassword>"

如果您對應的主機連接埠不是預設的 1433,請將該連接埠新增至連接字串。 例如,如果您在 docker run 命令中指定了 -p 1400:1433,則要明確地指定連接埠 1400 來連線。

sqlcmd -S 10.3.2.4,1400 -U sa -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1400 -U sa -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1400 -U sa -P "<YourPassword>"

容器內部的工具

從 SQL Server 2017 (14.x) 開始,容器映像會包含 SQL Server 命令列工具。 如果您使用互動式命令提示字元來附加至映像,則可在本機執行這些工具。

  1. 使用 docker exec -it 命令在您執行的容器中啟動互動式 Bash 殼層。 在下列範例中,e69e056c702d 是容器識別碼。

    docker exec -it e69e056c702d "bash"
    

    提示

    您不一定要指定整個容器識別碼。 您只需指定足夠的字元來唯一識別它。 因此,在此範例中,使用 e6e69 可能就已足夠。 若要尋找容器識別碼,請執行 docker ps -a 命令。

  2. 進入容器後,以 sqlcmd 並使用其完整路徑進行本機連線。

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<YourPassword>'
    

    注意

    較新版本的 sqlcmd 預設為安全。 如需連線加密的詳細資訊,請參閱適用於 Windows 的 sqlcmd 公用程式,以及適用於 Linux 和 macOS 的使用 sqlcmd 進行連線。 如果連線不成功,您可以將 -No 選項新增至 sqlcmd,以指定加密是選擇性的,而不是強制性的。

  3. 完成使用 sqlcmd 時,輸入 exit

  4. 完成使用互動式命令提示字元時,輸入 exit。 結束互動式 Bash 殼層後,容器會繼續執行。

檢查容器版本

如果您想要知道執行中容器內的 SQL Server 版本,請執行下列命令來顯示。 以目標容器識別碼或名稱取代 <Container ID or name>。 將取代 <password> 為系統管理員 (sa) 帳戶的 SQL Server 密碼。

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U sa -P '<password>' \
-Q 'SELECT @@VERSION'

注意

較新版本的 sqlcmd 預設為安全。 如需連線加密的詳細資訊,請參閱適用於 Windows 的 sqlcmd 公用程式,以及適用於 Linux 和 macOS 的使用 sqlcmd 進行連線。 如果連線不成功,您可以將 -No 選項新增至 sqlcmd,以指定加密是選擇性的,而不是強制性的。

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
-S localhost -U sa -P "<password>" `
-Q "SELECT @@VERSION"

注意

較新版本的 sqlcmd 預設為安全。 如需連線加密的詳細資訊,請參閱適用於 Windows 的 sqlcmd 公用程式,以及適用於 Linux 和 macOS 的使用 sqlcmd 進行連線。 如果連線不成功,您可以將 -No 選項新增至 sqlcmd,以指定加密是選擇性的,而不是強制性的。

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U sa -P "<password>" ^
-Q "SELECT @@VERSION"

注意

較新版本的 sqlcmd 預設為安全。 如需連線加密的詳細資訊,請參閱適用於 Windows 的 sqlcmd 公用程式,以及適用於 Linux 和 macOS 的使用 sqlcmd 進行連線。 如果連線不成功,您可以將 -No 選項新增至 sqlcmd,以指定加密是選擇性的,而不是強制性的。

您也可以識別目標容器映像的 SQL Server 版本和組建編號。 下列命令會顯示 mcr.microsoft.com/mssql/server:2022-latest 映像的 SQL Server 版本和組建資訊。 其執行方式是使用環境變數 PAL_PROGRAM_INFO=1 來執行新容器。 產生的容器會立即結束,而且 docker rm 命令會移除它。

docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
-ti mcr.microsoft.com/mssql/server:2022-latest && \
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
-ti mcr.microsoft.com/mssql/server:2022-latest; `
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver ^
-ti mcr.microsoft.com/mssql/server:2022-latest && ^
docker rm sqlver

先前的命令會顯示類似下列輸出的版本資訊:

sqlservr
  Version 16.0.1000.6
  Build ID d81e9b6de06534e649bd57dd609aa3050f5e380f361b7f8a80a80eeb71e7422c
  Build Type release
  Git Version 2aede92f
  Built at Tue Nov 01 06:11:40 GMT 2022

PAL
  Build ID 754097e8f0db68f559e1cbc9d46952ac9fd518b5da9f12964ef40fc9033720e3
  Build Type release
  Git Version d88e3e1130
  Built at Tue Nov 01 06:08:02 GMT 2022

Packages
  system.security                         mssql-16.0.1000.6_26_official-release
  system.certificates                     mssql-16.0.1000.6_26_official-release
  sqlagent                                16.0.1000.6
  system.wmi                              10.0.17763.2061.202107231
  system.netfx                            4.7.0.0.202104262
  system                                  mssql-16.0.1000.6_26_official-release
  system.common                           10.0.17763.2061.202107231
  sqlservr                                16.0.1000.6
  secforwarderxplat                       16.0.1000.6

執行特定的 SQL Server 容器映像

注意

在某些情況下,您可能不想使用最新的 SQL Server 容器映像。 若要執行特定的 SQL Server 容器映像,請使用下列步驟:

  1. 識別您想要使用之版本的 Docker tag。 若要檢視可用的標籤,請參閱 Microsoft 成品登錄

  2. 使用標記來提取 SQL Server 容器映像。 例如,若要提取 2019-CU18-ubuntu-20.04 映像,請以 2019-CU18-ubuntu-20.04 取代下列命令中的 <image_tag>

    docker pull mcr.microsoft.com/mssql/server:<image_tag>
    
  3. 若要使用該映像來執行新容器,則在 docker run 命令中指定標記名稱。 在下列命令中,以您想要執行的版本取代 <image_tag>。 您的密碼應遵循 SQL Server 預設 密碼原則。 依預設,密碼長度必須至少有 8 個字元,並包含下列四種字元組合中其中三種組合的字元:大寫字母、小寫字母、以 10 為底數的數字以及符號。 密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。

    重要

    SA_PASSWORD 環境變數已被取代。 請改用 MSSQL_SA_PASSWORD

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    

這些步驟也可以用來將現有的容器降級。 例如,您可能想要復原或降級執行中的容器,以進行疑難排解或測試。 若要將執行中的容器降級,您必須使用適用於資料資料夾的持續性技術。 遵循升級小節中概述的相同步驟,但在執行新容器時指定較舊版本的標記名稱。

執行 RHEL 型容器映像

適用於 SQL Server Linux 容器映像的文件都指向 Ubuntu 型容器。 從 SQL Server 2019 (15.x) 開始,您可以使用 Red Hat Enterprise Linux (RHEL) 型容器。 RHEL 的映像範例看起來會像是 mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8

例如,下列命令會為使用 RHEL 8 的 SQL Server 2019 (15.x) 容器提取累積更新 18:

docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4

執行生產容器映像

上一節中的快速入門會執行來自 Microsoft 成品登錄的免費 SQL Server 開發人員版本。 如果您想要執行生產容器映像 (例如 Enterprise、Standard 或 Web 版本),大部分的資訊仍然適用。 但仍有一些此處概述的差異。

  • 如果您具備有效授權,則只能在生產環境中使用 SQL Server。 您可以在此處取得免費的 SQL Server Express 生產授權。 SQL Server Standard 和 Enterprise Edition 授權可透過 Microsoft 大量授權取得。

  • 開發人員容器映像也可以設定為執行生產版本。

若要執行生產版本,請檢閱快速入門中的需求和執行程序。 您必須使用 MSSQL_PID 環境變數來指定生產版本。 下列範例示範如何針對 Enterprise 核心版本執行最新的 SQL Server 2022 (16.x) 容器映像。

您的密碼應遵循 SQL Server 預設 密碼原則。 依預設,密碼長度必須至少有 8 個字元,並包含下列四種字元組合中其中三種組合的字元:大寫字母、小寫字母、以 10 為底數的數字以及符號。 密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-e 'MSSQL_PID=EnterpriseCore' -p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" `
-e "MSSQL_PID=EnterpriseCore" -p 1433:1433 `
-d "mcr.microsoft.com/mssql/server:2022-latest"
docker run --name sqlenterprise ^
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" ^
-e "MSSQL_PID=EnterpriseCore" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2022-latest"

重要

將值 Y 傳遞至環境變數 ACCEPT_EULA ,並將版本值傳遞至 MSSQL_PID,表示您想要使用的SQL Server 版本和版本具有有效且現有的授權。 您也同意在容器映像中執行的 SQL Server 軟體之使用,將受到 SQL Server 授權條款所規範。

如需 MSSQL_PID 的完整可能值清單,請參閱在 Linux 上使用環境變數設定 SQL Server 設定

執行多個 SQL Server 容器

Docker 提供一種方法,可在相同的主機電腦上執行多個 SQL Server 容器。 請針對相同主機上需要多個 SQL Server 執行個體的案例使用此方法。 每個容器都必須在不同的連接埠上公開其本身。

下列範例會建立兩個 SQL Server 2017 (14.x) 容器,並將容器對應至主機電腦上的連接埠 14011402

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest

下列範例會建立兩個 SQL Server 2019 (15.x) 容器,並將容器對應至主機電腦上的連接埠 14011402

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest

下列範例會建立兩個 SQL Server 2022 (16.x) 容器,並將容器對應至主機電腦上的連接埠 14011402

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest

警告

您的密碼應遵循 SQL Server 預設 密碼原則。 依預設,密碼長度必須至少有 8 個字元,並包含下列四種字元組合中其中三種組合的字元:大寫字母、小寫字母、以 10 為底數的數字以及符號。 密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。

現在,有兩個在不同容器中執行的 SQL Server 執行個體。 用戶端可以使用容器主機的 IP 位址和容器的連接埠號碼,來連線到每個 SQL Server 執行個體。

注意

較新版本的 sqlcmd (在 mssql-tools18 中) 預設為安全。 如果使用 18 版或更新版本,您必須將 No 選項新增至 sqlcmd,以指定加密是選擇性的,而不是強制性的。

sqlcmd -S 10.3.2.4,1401 -U sa -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1402 -U sa -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1401 -U sa -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U sa -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1401 -U sa -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U sa -P "<YourPassword>"

在容器中升級 SQL Server

若要使用 Docker 來升級容器映像,請先識別適用於您升級之版本的標記。 使用 docker pull 命令,從登錄中提取此版本:

docker pull mcr.microsoft.com/mssql/server:<image_tag>

這會更新您所建立之任何新容器的 SQL Server 映像,但不會更新任何執行中容器內的 SQL Server。 若要執行此動作,您必須使用最新的 SQL Server 容器映像來建立新容器,並將您的資料移轉至該新容器。

  1. 請確定您針對現有的 SQL Server 容器使用其中一種 數據持續性技術 。 這可讓您使用相同的資料來啟動新容器。

  2. 使用 docker stop 命令來停止 SQL Server 容器。

  3. 使用 docker run 來建立新的 SQL Server 容器,並指定對應的主機目錄或資料磁碟區容器。 請務必針對您的 SQL Server 升級使用特定的標記。 新容器現在會使用新的 SQL Server 版本搭配您現有的 SQL Server 資料。

    重要

    目前僅支援 RC1、RC2 和 GA 之間的升級。

  4. 在新容器中確認您的資料庫和資料。

  5. (選擇性) 使用 docker rm 來移除舊容器。

  • 透過此快速入門,開始使用 Docker 上的 SQL Server 2017 (14.x) 容器映像
  • 透過此快速入門,開始使用 Docker 上的 SQL Server 2019 (15.x) 容器映像
  • 透過此快速入門,開始使用 Docker 上的 SQL Server 2022 (16.x) 容器映像

參與編輯 SQL 文件

您知道您可以自行編輯 SQL 內容嗎? 這樣做不僅可以協助改善文件,也能名列該頁面的參與者。

如需詳細資訊,請參閱如何參與 SQL Server 文件