部署並聯機至 SQL Server Linux 容器

適用于:SQL Server (所有支援的版本) - Linux

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

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

注意

本文特別著重于使用 mssql-server-linux 影像。 SQL Server Windows 容器中的部署不受支援所涵蓋。 若要開發和測試,您可以建立自己的自訂容器映射,以在 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 -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-tools/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
    
  3. 完成使用 sqlcmd 時,輸入 exit

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

檢查容器版本

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

sudo docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong!Passw0rd>' \
-Q 'SELECT @@VERSION'
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "<YourStrong!Passw0rd>" `
-Q "SELECT @@VERSION"
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "<YourStrong!Passw0rd>" ^
-Q "SELECT @@VERSION"

您也可以識別目標容器映射SQL Server版本和組建編號。 下列命令會顯示映射SQL Server版本和組建資訊 mcr.microsoft.com/mssql/server:2022-latest 。 執行具有環境變數 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 。 若要檢視所有可用的標記,請參閱 mssql-server-linux Docker Hub 頁面 \(英文\)。

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

    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

執行生產容器映像

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

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

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

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

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-e 'MSSQL_PID=Enterprise' -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=Enterprise" -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=Enterprise" -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) 容器,並將其對應至埠和 1402 主機電腦上的埠 1401

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) 容器,並將其對應至埠和 1402 主機電腦上的埠 1401

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) 容器,並將其對應至埠和 1402 主機電腦上的埠 1401

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 -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 來移除舊容器。

後續步驟

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