部署和連線到 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>。 以系統管理員 (SA) 帳戶的 SQL Server 密碼取代 <YourStrong!Passw0rd>

sudo docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong!Passw0rd>' \
-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 "<YourStrong!Passw0rd>" `
-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 "<YourStrong!Passw0rd>" ^
-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 命令會移除它。

sudo docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
-ti mcr.microsoft.com/mssql/server:2022-latest && \
sudo 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>

    重要

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

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -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:

sudo 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) 容器映像。

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-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=<YourStrong!Passw0rd>" `
-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=<YourStrong!Passw0rd>" ^
-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=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -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=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -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=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest

現在,有兩個在不同容器中執行的 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 文件