部署和連線到 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 命令列工具。 如果您使用互動式命令提示字元來附加至映像,則可在本機執行這些工具。
使用
docker exec -it
命令在您執行的容器中啟動互動式 Bash 殼層。 在下列範例中,e69e056c702d
是容器識別碼。docker exec -it e69e056c702d "bash"
提示
您不一定要指定整個容器識別碼。 您只需指定足夠的字元來唯一識別它。 因此,在此範例中,使用
e6
或e69
可能就已足夠。 若要尋找容器識別碼,請執行docker ps -a
命令。進入容器後,以 sqlcmd 並使用其完整路徑進行本機連線。
/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<YourPassword>'
注意
較新版本的 sqlcmd 預設為安全。 如需連線加密的詳細資訊,請參閱適用於 Windows 的 sqlcmd 公用程式,以及適用於 Linux 和 macOS 的使用 sqlcmd 進行連線。 如果連線不成功,您可以將
-No
選項新增至 sqlcmd,以指定加密是選擇性的,而不是強制性的。完成使用 sqlcmd 時,輸入
exit
。完成使用互動式命令提示字元時,輸入
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 2019 (15.x) CU3 開始支援 Ubuntu 18.04。
- 從 SQL Server 2019 (15.x) CU10 開始支援 Ubuntu 20.04。
- 您可在 https://mcr.microsoft.com/v2/mssql/server/tags/list 擷取到 mssql/server 所有可用標籤的清單。
在某些情況下,您可能不想使用最新的 SQL Server 容器映像。 若要執行特定的 SQL Server 容器映像,請使用下列步驟:
識別您想要使用之版本的 Docker
tag
。 若要檢視可用的標籤,請參閱 Microsoft 成品登錄。使用標記來提取 SQL Server 容器映像。 例如,若要提取
2019-CU18-ubuntu-20.04
映像,請以2019-CU18-ubuntu-20.04
取代下列命令中的<image_tag>
。docker pull mcr.microsoft.com/mssql/server:<image_tag>
若要使用該映像來執行新容器,則在
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) 容器,並將容器對應至主機電腦上的連接埠 1401
和 1402
。
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) 容器,並將容器對應至主機電腦上的連接埠 1401
和 1402
。
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) 容器,並將容器對應至主機電腦上的連接埠 1401
和 1402
。
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 容器映像來建立新容器,並將您的資料移轉至該新容器。
請確定您針對現有的 SQL Server 容器使用其中一種 數據持續性技術 。 這可讓您使用相同的資料來啟動新容器。
使用
docker stop
命令來停止 SQL Server 容器。使用
docker run
來建立新的 SQL Server 容器,並指定對應的主機目錄或資料磁碟區容器。 請務必針對您的 SQL Server 升級使用特定的標記。 新容器現在會使用新的 SQL Server 版本搭配您現有的 SQL Server 資料。重要
目前僅支援 RC1、RC2 和 GA 之間的升級。
在新容器中確認您的資料庫和資料。
(選擇性) 使用
docker rm
來移除舊容器。
相關內容
- 透過此快速入門,開始使用 Docker 上的 SQL Server 2017 (14.x) 容器映像
- 透過此快速入門,開始使用 Docker 上的 SQL Server 2019 (15.x) 容器映像
- 透過此快速入門,開始使用 Docker 上的 SQL Server 2022 (16.x) 容器映像
- 設定和自訂 SQL Server Linux 容器
- 請參閱 mssql-docker GitHub 存放庫,以取得資源、意見反應及已知問題
- 對 SQL Server Docker 容器進行疑難排解
- SQL Server 容器的高可用性
- 保護 SQL Server Linux 容器
參與編輯 SQL 文件
您知道您可以自行編輯 SQL 內容嗎? 這樣做不僅可以協助改善文件,也能名列該頁面的參與者。
如需詳細資訊,請參閱如何參與 SQL Server 文件