Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
18m 20s
直接在開發機器上安裝資料庫引擎是一個常見的捷徑,但會導致長期問題。 資料庫伺服器是為專用硬體設計的。 它們消耗大量的記憶體和 CPU,隨著安裝多個版本而累積配置債務,當需要測試不同的發行版本時,升級會變得複雜。 Docker 容器通過在輕量、可丟棄的環境中隔離每個資料庫實例來解決所有這些問題。
在他的影片"SQL Server in Docker on Linux"中,Tim Corey 示範如何使用一個 Docker 命令在 Linux 上啟動 Microsoft SQL Server 實例,從 VS Code 連接到它,並執行查詢。 他還展示了如何並排運行多個 SQL Server 版本以及如何在完成工作後進行清理。 如果您正在追隨 Linux 上的 C# 系列或希望快速、可重複的方式來啟動開發用的 SQL Server,這份操作指南涵蓋完整的設置。
[0:00 - 0:57] Tim 以反對本地資料庫安裝的觀點開場。 核心論點:資料庫引擎為專用伺服器設計。 本地安裝意味著無論您是否使用,它們都會消耗資源,而在同一個機器上管理多個版本(SQL 2019、2022、2025)很快就會成為一個維護負擔。
Docker 容器顛覆了這個模型。 每個資料庫都在自己的隔離環境中運行。 需要時啟動它,不需要時停止它。 刪除它並重新開始,無需剩餘配置。 對於開發和測試,此方法比傳統安裝更快設置、更易於維護,且更靈活。
[0:57 - 2:17] 在啟動 SQL Server 之前,Tim 注意到Portainer(上集的 Docker 容器 GUI 管理工具)沒有運行。 上次關閉機器時它退出了,因為沒有設置重啟策略。
修正的辦法是兩個命令:
// Set Portainer to restart automatically (unless manually stopped)
docker update --restart unless-stopped portainer
// Start it now
docker start portainer
unless-stopped策略表示 Portainer 在重啟時會自動重啟,但如果您明確停止它,它會保持停止狀態。 啟動後,在瀏覽器中可於localhost:9000存取 Portainer。 Tim 建議對於您希望始終運行的管理工具採取此策略,而讓資料庫容器採用手動啟動。
[2:17 - 6:09] 整個 SQL Server 的設置可以簡化為一個命令。 Tim 使用 LocalSend 裝置(在較早的副任務影片中提到)從他的 Windows 機器傳送該命令,然後逐步解析每一部分:
// Single command to launch SQL Server 2025 in Docker
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 1433:1433 --name sql2025 mcr.microsoft.com/mssql/server:2025-latest
每個旗幟都有特定的目的。 -e "ACCEPT_EULA=Y"旗幟接受 Microsoft 的授權協議。 -e "SA_PASSWORD=Test12345"旗幟以純文字形式設置系統管理員密碼,Tim 表示這樣做對於本地開發是可以的,但絕不能用於任何面向生產的東西。 -p 1433:1433旗幟將容器的內部 SQL Server 埠映射到主機上的相同埠。--name sql2025旗幟為容器提供一個人類可讀的標籤。 而映像標籤2025-latest從 Microsoft 的容器註冊表中提取最新的 SQL Server 2025 版本。
運行命令後,Docker 下載映像層、解壓並啟動服務。 整個過程需時數分鐘,大部分是初始下載。
[6:09 - 7:04] 回到 Portainer,新的 SQL Server 容器出現在容器列表中,顯示其狀態為運行中。 此時 Tim 做出了一個慎重的選擇:不進行資料持久化的卷掛載。 如果刪除容器,其中的資料庫也會消失。
這是針對開發設置的有意安排。重新開始意味著沒有累積的測試資料,沒有來自先前實驗的結構變動,以及沒有由於遺留狀態導致的 "在我機器上運行正常" 問題。 如果您想在刪除容器前保留資料庫,可以先導出它們,但對於本地工作,清理的方法是優先的工作流程。
[7:04 - 8:50] 為了管理資料庫,Tim 安裝了 Microsoft 為 VS Code 提供的 SQL Server 擴充功能。 安裝後,側邊欄中會出現一個新的 SQL Server 面板,您可以在其中新增連接。
連接參數非常簡單。 伺服器名稱是.(點),這意味著是本地主機。由於容器將埠1433(SQL Server 的預設值)映射過了,因此無需指定埠號。 使用者名稱是sa,密碼是 Docker 命令中的密碼,預設資料庫是master。 當提示時,請信任伺服器證書。
連接後,VS Code 顯示 Docker 圖標在連接旁,確認它已檢測到容器化環境。 系統資料庫(master、model、msdb、tempdb)出現在樹狀結構中,隨時可用。
[8:50 - 12:45] 當建立連接後,Tim 從 VS Code 側邊欄直接建立一個新資料庫,名為PeopleDB。 在其中,他使用可視化設計器建立了一個NVARCHAR(50),非空)。
然後他打開了一個新的查詢視窗並插入了測試資料:
INSERT INTO dbo.People (FirstName, LastName)
VALUES
('Tim', 'Corey'),
('Sue', 'Storm'),
('Dave', 'Corey')
執行SELECT確認行已到位:
SELECT * FROM dbo.People
-- Returns: Tim Corey, Sue Storm, Dave Corey
SELECT * FROM dbo.People WHERE LastName = 'Corey'
-- Returns: Tim Corey, Dave Corey
完整過程(建立資料庫、設計表格、插入資料、帶過濾條件的查詢)僅需數分鐘。 一切都是在Docker 容器內運行,通過 VS Code 管理,主機上無需安裝 SQL Server。
[12:45 - 14:20] 當您完成與 SQL Server 的工作後,可以在 Portainer 中單擊一下或在終端輸入一個命令來停止它:
docker stop sql2025
停止的容器釋放所有 CPU 和記憶體資源。 它繼續消耗的唯一資源是映像和容器文件的磁碟空間,這與(通常小於)本地 SQL Server 安裝相當。
Tim 指出這是相較於傳統安裝的核心優勢。 本地安裝的 SQL Server 作為 Windows 或 Linux 服務運行,始終消耗資源。 一個 Docker 容器僅在您選擇啟動時才使用資源。
[14:20 - 17:17] Docker 對資料庫開發的一個最實用的功能是能夠同時運行多個版本。 Tim 通過與現有 2025 容器並行啟動 SQL Server 2022 來展示:
// SQL Server 2022 on a different port
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 2022:1433 --name sql2022 mcr.microsoft.com/mssql/server:2022-latest
關鍵差異在於埠映射:-p 2022:1433將容器的內部埠1433映射到主機上的2022埠。這樣可以避免與已經使用1433的2025實例的埠衝突。下載完成後,兩個容器出現在 Portainer 中,可以同時運行。
這非常有用,當客戶在生產環境中運行 SQL Server 2022,而團隊在2025版本上開發。切換版本不需要重新安裝,只需啟動正確的容器。 所有可用的SQL Server 映像(2017、2019、2022、2025)均列在mcr.microsoft.com,同樣的方法也適用於 MySQL、PostgreSQL、MongoDB 和 Cosmos DB。
[17:17 - 17:47] 操作指南演示了一個 Docker 命令如何取代過去多步驟的安裝過程,涵蓋配置嚮導、服務管理和版本衝突。 容器在幾分鐘內啟動,僅在需要時運行,刪除後不會在主機系統上留下任何痕跡。
對於在多個項目中工作的開發人員來說,這個模式能夠清晰地擴展。 每個專案都有自己的容器、自己的版本和自己的隔離資料。
[17:47 - 18:20] 總結一下:SQL Server 在 Linux 上運行在 Docker 中,使用一個docker run命令。 透過使用 SQL Server 擴充功能從 VS Code 連接,通過側邊欄建立資料庫和表格,像對待任何其他 SQL Server 實例一樣撰寫查詢。 完成後,停止容器並回收資源。
using Docker 進行資料庫管理和 VS Code 進行查詢的組合,為您提供了一個完整的在 Linux 上的 SQL 開發流程,而不需要本地資料庫安裝。
範例提示:如果需要測試特定的 SQL Server 版本,請查看mcr.microsoft.com以獲取所有可用標籤。 您可以透過為每個容器指派不同的主機埠(1433、2019、2022、2025)同時運行2017、2019、2022和2025。 以具描述性的名稱命名它們(sql2022),這樣 Portainer 和docker ps輸出能夠保持可讀性。
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy