在 Windows 容器中執行 SQL Server 2016 Express

在 SQL Server Sample GitHub 提供 SQL Server 2016 Express 版的 Windows 容器後,透過這種方式建立 SQL Server 執行個體來進行應用程式開發或測試就更加便利囉!本文將詳細介紹如何下載、執行與連接至 SQL Server 2016 Express 版的 Windows 容器,也歡迎大家立即試用 180 天的 SQL Server 2016 喔!

目錄

摘要

Windows Server 2016 正式支援容器 (Containers) 技術,同時 Windows 10 在安裝周年更新 (Anniversary Update) 後,也一樣可以使用這項功能,對於開發人員進行部署與測試時相當方便。

近期更在 SQL Server Sample GitHub 提供 SQL Server 2016 Express 版的 Windows 容器,透過這種方式建立 SQL Server 執行個體來進行應用程式開發或測試會更加便利,讓您輕易的在現有環境上建構高密集度的微服務架構 (microservice architectures),以及更適合在多租戶 (multi-tenant infrastructure) 架構下實現應用程式的隔離與控制。

經由本文的介紹您將學習到:

  • 在 Windows 10 或 Windows Server 2016 啟用容器功能
  • 下載 SQL Server 2016 Express 版的 Windows 容器
  • 執行 SQL Server 2016 Express 版的 Windows 容器
  • 連接至 SQL Server 2016 Express 版的 Windows 容器

啟用容器功能及 Hyper-V 角色

在使用 Windows 容器之前必須啟用 Hyper-V 角色與容器功能,在 Windows Server 2016 可以透過【伺服器管理員】來啟用,若是 Windows 10 則可透過【開啟或關閉 Windows 功能】來開啟前述功能。

更建議的做法是透過 PowerShell 指令碼來達成,將來還可以重複使用部署到不同台伺服器上直接進行設定。

以下指令碼示範使用 PowerShell 來啟用容器功能。

1

執行結果如下圖所示:

2

啟用成功後就可以在【新增角色和功能】視窗中看到 Containers 已經安裝。

3

在 Windows 10 則是在【開啟或關閉 Windows 功能】視窗中可以看到容器已經被啟用。

4

除了啟用容器功能外,另外還需啟用 Hyper-V 角色。

下列指令碼示範以 PowerShell 啟用 Hyper-V 角色。

5

執行結果如下圖所示:

6

由於上述步驟必須重開機,可以利用下列 PowerShell 指令碼來重新開機讓相關設定得以生效。 7

安裝容器

完成上一節的功能設定後,接著就是使用 Invoke-WebRequest 來下載容器。

8

執行結果如下圖所示:

9

將下載下來的容器解壓縮,使用的 PowerShell 指令碼如下:

10

為了後續使用的便利性,設定相關環境變數,PowerShell 指令碼如下:

11

使用下列 PowerShell 指令碼將容器註冊成為服務,並且啟動容器服務。

12 13

下載並執行 SQL Server 2016 Express 版的 Windows 容器

以下列 PowerShell 指令碼下載 SQL Server 2016 Express 版的 Windows 容器。

14

執行結果如下圖所示:

15

下載完成後可以再次透過 docker images 確認 SQL Server 2016 Express 版的 Windows 容器是否正確下載。

16

使用 docker 指令搭配 run 參數來啟動 SQL Server 2016 Express 版的 Windows 容器,其中 env 參數是用來引入 sa 的初始密碼,設定 sa 密碼時須遵守複雜密碼的規則,需特別留意的是,根據作業系統不同指令碼稍有不同。

下列指令碼適用於 Windows Server 2016:

17

下列指令碼適用於 Windows 10,差別在於必須多加【--isolation=hyperv】參數:

18

執行結果如下圖所示:

19

利用 docker ps 指令可以查看目前正在執行的 docker 的運作狀況,其中 CONTAINER ID 欄位尤其重要,要存取正在運行的容器主要是透過 CONTAINER ID 來識別。

20

使用 docker exec 指令碼搭配 sqlcmd 來連接 SQL Server 執行個體,您可以選擇使用 SQL Server 驗證來連接執行個體:

21

或是使用 Windows 驗證也沒問題。

22

一旦連接成功後就可以執行 T-SQL 指令碼來操作資料庫,例如下列 T-SQL 指令碼示範取得機器名稱與版本資訊,一切的操作就和在實體機器或虛擬機器中執行 SQL Server 沒兩樣。 23

從容器外部存取 SQL Server 2016 Express 執行個體

當您想要利用 SQL Server Management Studio 或是應用程式存取運行於 Windows 容器的 SQL Server 2016 Express 執行個體,首先必須先取得容器的 IP 位址。

下列指令碼示範使用 docker inspect 來取得正在執行的容器 IP 位址。

24

執行結果如下圖所示,可以看到容器的 IP 位址即為 172.22.166.246。

25

您可以在 SQL Server Management Studio 中使用【IP 位址,Port\SQLEXPRESS】搭配 SQL Server 驗證來連接 SQL Server 2016 Express 執行個體。

26

若您想要透過網路連接 Windows 容器中的 SQL Server 執行個體,則必須先開啟容器所在的伺服器防火牆,允許外部連線透過執行容器所指定的連接埠連線才可以。

下列 PowerShell 指令碼示範建立防火牆的輸入規則,允許外部透過 TCP 1433 通訊埠來連接資料庫。

27

執行結果如下圖所示:

28

如此一來,在遠端的伺服器中就可以用【容器所在的伺服器 IP 位址,連接埠\SQLEXPRES】來連接 SQL Server 2016 執行個體。 29

補充說明

若您想要在同一台伺服器執行多個 SQL Server 2016 Express 版的 Windows 容器,只要在每次使用 docker run 指令時,指定不同的連接埠即可。

30


更多 SQL Server 相關文章 >> https://blogs.technet.microsoft.com/technet_taiwan/tag/sql-server/

SQL Server 2016 試用 180 天 >> 立即試用

觀看最新、最夯的技術文章與課程,歡迎至 TechNet 台灣