快速入门:使用 Docker 运行 SQL Server 容器映像
Choose your command shell
BashPowerShellCmd
適用對象:SQL Server(僅限 Linux)Azure SQL 數(shù)據(jù)庫?Azure SQL 數(shù)據(jù)倉庫?并行數(shù)據(jù)倉庫
在本快速入門教程中,你使用 Docker 請求和運行 SQL Server 2017 容器映像?mssql server linux。?然后使用?sqlcmd?連接,以創(chuàng)建第一個數(shù)據(jù)庫并運行查詢。
?提示
若要試用 SQL Server 2019 預覽版映像,請參閱本文的 SQL Server 2019 預覽版。
此映像包含在 Linux 上運行的 SQL Server(基于 Ubuntu 16.04)。?它可與 Linux 上或用于 Mac/Windows 的 Docker 上的 Docker 引擎 1.8+ 配合使用。?本快速入門專門介紹?linux?上 SQL Server 映像的使用。?雖然未介紹 Windows 映像,但可在?mssql-server-windows-developer Docker 中心頁上找到關于它的詳細信息。
?
先決條件
- 任何受支持的 Linux 分發(fā)版上或用于 Mac/Windows 的 Docker 上的 Docker 引擎 1.8+。?有關詳細信息,請參閱?Install Docker(安裝 Docker)。
- Docker?overlay2?存儲驅(qū)動程序。?這是大多數(shù)用戶的默認設置。?如果發(fā)現(xiàn)自己未使用此存儲提供程序并且需要進行更改,請參閱?docker 文檔中有關配置 overlay2?的說明和警告。
- 至少 2 GB 的磁盤空間。
- 至少 2 GB 的 RAM。
- Linux 上的 SQL Server 的系統(tǒng)要求。
拉取并運行容器映像
在開始執(zhí)行以下步驟之前,請確保已在本文頂部選擇了首選的 shell(bash、PowerShell 或 cmd)。
從 Microsoft 容器注冊表中拉取 SQL Server 2017 Linux 容器映像。
bash復制
sudo docker pull mcr.microsoft.com/mssql/server:2017-latest?提示
若要試用 SQL Server 2019 預覽版映像,請參閱本文的 SQL Server 2019 預覽版。
前一個命令請求最新的 SQL Server 2017 容器映像。?如果想請求某個特定映像,需添加一個冒號和標記名稱(例如?mcr.microsoft.com/mssql/server:2017-GA-ubuntu。?若要查看所有可用映像,請參閱?mssql-server Docker hub 頁。
對于本文中的 bash 命令,將使用?sudo。?在 MacOS 上,可能不需要?sudo。?在 Linux 上,如果不想使用?sudo?來運行 Docker,可以配置一個?docker?組,并將用戶添加到該組。?有關詳細信息,請參閱?Post-installation steps for Linux(適用于 Linux 的安裝后步驟)。
要使用 Docker 運行容器映像,可以從 Bash Shell (Linux/macOS) 或提升的 PowerShell 命令提示符使用以下命令。
bash復制
sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" \-p 1433:1433 --name sql1 \-d mcr.microsoft.com/mssql/server:2017-latest?備注
密碼應符合 SQL Server 默認密碼策略,否則容器無法設置 SQL Server,將停止工作。?默認情況下,密碼的長度必須至少為 8 個字符,并且必須包含以下四種字符中的三種:大寫字母、小寫字母、十進制數(shù)字和符號。?你可以通過執(zhí)行?docker logs命令檢查錯誤日志。
?備注
默認情況下,這會創(chuàng)建一個使用 SQL Server 2017 開發(fā)人員版的容器。?在容器中運行生產(chǎn)版本的過程略有不同。?有關詳細信息,請參閱運行生產(chǎn)容器映像。
下表對前一個?docker run?示例中的參數(shù)進行了說明:
| -e 'ACCEPT_EULA=Y' | 將?ACCEPT_EULA?變量設置為任意值,以確認接受最終用戶許可協(xié)議。?SQL Server 映像的必需設置。 |
| -e 'SA_PASSWORD=<YourStrong!Passw0rd>' | 指定至少包含 8 個字符且符合?SQL Server 密碼要求的強密碼。?SQL Server 映像的必需設置。 |
| -p 1433:1433 | 將主機環(huán)境中的 TCP 端口(第一個值)映射到容器中的 TCP 端口(第二個值)。?在此示例中,SQL Server 偵聽容器中的 TCP 1433,并對主機上的端口 1433 公開。 |
| --name sql1 | 為容器指定一個自定義名稱,而不是使用隨機生成的名稱。?如果運行多個容器,則無法重復使用相同的名稱。 |
| mcr.microsoft.com/mssql/server:2017-latest | SQL Server 2017 Linux 容器映像。 |
要查看 Docker 容器,請使用?docker ps?命令。
bash復制
sudo docker ps -a應會看到與以下屏幕截圖類似的輸出:
如果“狀態(tài)”列顯示“正常運行”,則 SQL Server 將在容器中運行,并偵聽“端口”列中指定的端口 。?如果 SQL Server 容器的“狀態(tài)”列顯示“已退出”,則參閱配置指南的疑難解答部分?。
-h(主機名)參數(shù)也非常有用,但為了簡單起見,本教程中不使用它。?這會將容器的內(nèi)部名稱更改為一個自定義值。?也就是以下 Transact-SQL 查詢中返回的名稱:
SQL復制
SELECT @@SERVERNAME,SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),SERVERPROPERTY('MachineName'),SERVERPROPERTY('ServerName')將?-h?和?--name?設為相同的值是一種很好的方法,可以輕松地識別目標容器。
更改 SA 密碼
SA 帳戶是安裝過程中在 SQL Server 實例上創(chuàng)建的系統(tǒng)管理員。?創(chuàng)建 SQL Server 容器后,通過在容器中運行?echo $SA_PASSWORD,可發(fā)現(xiàn)指定的?SA_PASSWORD?環(huán)境變量。?出于安全考慮,請考慮更改 SA 密碼。
選擇 SA 用戶要使用的強密碼。
使用?docker exec?運行sqlcmd ,以使用 Transact-SQL 更改密碼。?在下面的示例中,將舊密碼?<YourStrong!Passw0rd>?和新密碼?<YourNewStrong!Passw0rd>?替換為你自己的密碼值。
bash復制
sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \-S localhost -U SA -P "<YourStrong!Passw0rd>" \-Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong!Passw0rd>"'連接到 SQL Server
下列步驟在容器內(nèi)部使用 SQL Server 命令行工具?sqlcmd?來連接 SQL Server。
使用?docker exec -it?命令在運行的容器內(nèi)部啟動交互式 Bash Shell。?在下面的示例中,sql1?是在創(chuàng)建容器時由?--name?參數(shù)指定的名稱。
bash復制
sudo docker exec -it sql1 "bash"在容器內(nèi)部使用 sqlcmd 進行本地連接。?默認情況下,sqlcmd 不在路徑之中,因此需要指定完整路徑。
bash復制
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong!Passw0rd>"?提示
可以省略命令行上提示要輸入的密碼。
如果成功,應會顯示 sqlcmd 命令提示符:1>。
創(chuàng)建和查詢數(shù)據(jù)
以下部分將引導你使用 sqlcmd 和 Transact-SQL 完成新建數(shù)據(jù)庫、添加數(shù)據(jù)并運行簡單查詢的整個過程。
新建數(shù)據(jù)庫
以下步驟創(chuàng)建一個名為?TestDB?的新數(shù)據(jù)庫。
在 sqlcmd 命令提示符中,粘貼以下 Transact-SQL 命令以創(chuàng)建測試數(shù)據(jù)庫:
SQL復制
CREATE DATABASE TestDB在下一行中,編寫一個查詢以返回服務器上所有數(shù)據(jù)庫的名稱:
SQL復制
SELECT Name from sys.Databases前兩個命令沒有立即執(zhí)行。?必須在新行中鍵入?GO?才能執(zhí)行以前的命令:
SQL復制
GO插入數(shù)據(jù)
接下來創(chuàng)建一個新表?Inventory,然后插入兩個新行。
在 sqlcmd 命令提示符中,將上下文切換到新的?TestDB?數(shù)據(jù)庫:
SQL復制
USE TestDB創(chuàng)建名為?Inventory?的新表:
SQL復制
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)將數(shù)據(jù)插入新表:
SQL復制
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);要執(zhí)行上述命令的類型?GO:
SQL復制
GO選擇數(shù)據(jù)
現(xiàn)在,運行查詢以從?Inventory?表返回數(shù)據(jù)。
通過 sqlcmd 命令提示符輸入查詢,以返回?Inventory?表中數(shù)量大于 152 的行:
SQL復制
SELECT * FROM Inventory WHERE quantity > 152;執(zhí)行命令:
SQL復制
GO退出 sqlcmd 命令提示符
要結束 sqlcmd 會話,請鍵入?QUIT:
SQL復制
QUIT要在容器中退出交互式命令提示,請鍵入?exit。?退出交互式 Bash Shell 后,容器將繼續(xù)運行。
從容器外連接
還可以從支持 SQL 連接的任何 Linux、Windows 或 macOS 外部工具連接到 Docker 計算機上的 SQL Server 實例。
以下步驟在容器外使用?sqlcmd?連接在容器中運行的 SQL Server。?這些步驟假定你已在容器外安裝了 SQL Server 命令行工具。?使用其他工具時,同樣的原則依然適用,但連接過程因工具而異。
查找承載容器的計算機的 IP 地址。?在 Linux 上,使用?ifconfig?或?ip addr。在 Windows 上,使用?ipconfig。
對于本示例,請在客戶端計算機上安裝?sqlcmd?工具。?有關詳細信息,請參閱在 Windows 上安裝 sqlcmd?或在 Linux 上安裝 sqlcmd。
運行 sqlcmd,指定 IP 地址和映射容器中的端口 1433 的端口。?本例中為主機上的相同端口 1433。?如果在主機上指定了不同的映射端口,則在此處使用它。
bash復制
sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong!Passw0rd>"運行 Transact-SQL 命令。?完成后,鍵入?QUIT。
連接到 SQL Server 的其他常見工具包括:
- Visual Studio Code
- 適用于 Windows 的 SQL Server Management Studio (SSMS)
- Azure Data Studio
- mssql-cli(預覽版)
- PowerShell Core
刪除容器
如果想刪除本教程中使用的 SQL Server 容器,請運行以下命令:
bash復制
sudo docker stop sql1 sudo docker rm sql1?警告
停止并永久刪除容器會刪除容器中的所有 SQL Server 數(shù)據(jù)。?如果你需要保留數(shù)據(jù),請在容器外創(chuàng)建并復制備份文件或使用容器數(shù)據(jù)暫留技術。
Docker 演示
嘗試對 Docker 使用 SQL Server 容器映像后,你可能想知道如何 Docker 是如何用于改進開發(fā)和測試的。?下面的視頻介紹如何在持續(xù)集成和部署方案中使用 Docker。
?
后續(xù)步驟
有關如何將數(shù)據(jù)庫備份文件還原到容器中的教程,請參閱在 Linux Docker 容器中還原 SQL Server 數(shù)據(jù)庫。?若要瀏覽其他方案(例如運行多個容器、數(shù)據(jù)暫留和故障排除),請參閱在 Docker 上配置 SQL Server 容器映像。
并且,請查看?mssql-docker GitHub 存儲庫,了解資源、反饋和已知問題。
總結
以上是生活随笔為你收集整理的快速入门:使用 Docker 运行 SQL Server 容器映像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员的三门课之项目管理篇
- 下一篇: NYOJ 678 最小K个数之和