使用 Docker 安裝 SQL Server on Windows

一般而言我們都會直接安裝 SQL Server,但會牽涉到安裝的方式與設定的參數。透過 Docker 可以直接使用微軟原始的設定,並且不需要安裝在 Host machine。當然主要目的還是測試使用,正式環境還是推薦直接安裝。

在安裝之前,建議先安裝 server core image,理由是因為後續可以安裝不同版本的 sql server,但同樣都是架構在 server core 之上,因為 docker 會自動管理磁碟空間,透過 image 是層層疊加的,安裝兩個 images 的空間會被重複利用。

作法如下:

  1. 安裝 server core image

docker pull microsoft/windowsservercore

  1. 安裝 sql server developer edition:

docker run -d -p 1433:1433 -e sa_password=<SA_PASSWORD> -e ACCEPT_EULA=Y microsoft/mssql-server-windows-developer

其中, -d 代表 detach (也就是在背景中執行)、 -p 代表 port number(與外部 host 的 mapping)、 -e  / –env 代表環境變數,這裡使用 ACCEPT_EULA(必須要接受微軟的條款才可以使用),加上 sa_password 代表對應的 sa 密碼

因為在背景執行,必須要透過 logs 檢查是否 SQL Server 正在執行。透過 docker ps 只能看到 windows server instance 而已:

說明實際上是失敗的,因為密碼強度不夠(因前面的設定密碼 = password),因此必須要加入英數字等密碼字母組合:

首先用 stop 停止執行中的 image:

再次執行 run 並指定包含數字與特殊符號的密碼:

這次再使用 docker logs 就可以看到有正確的執行:

接下來就可以透過 SSMS 存取 localhost database (因為 port mapping 的關係,但實際上是不同的IP,可以透過 inspect 檢查):

Linux Container 與 Windows Container 的差異

在 Windows 執行 docker container,主要有兩種方法:

windows Container

只有在 windows 2016 server core 才提供,利用內建的 dockerd 可以直接運行 container,不需要額外的 VM。架構如下:

Linux Container

windows 2016 Server & windows 10 Pro 以上版本都有提供,必須要透過 Hyper-V (參閱安裝 docker for windows) ,主要透過 docker proxy 執行 VM 裡面的 container:

Windows container 最大的優勢是可以在 host machine 上,直接看到 container 的執行序、新增的硬碟空間等,因為他們的底層 Kernel 是一樣的;

相反的 Linux container 的執行序無法被 host 得知,並且也無法直接存取 container 的目錄,因為底層 Kernel 不一樣。

安裝 Docker for Windows

  • 安裝 hyper-v

首先要確定 virtualization 是否啟用:『模擬』要設定為啟用:

        

上圖代表已被停用,因此需要在硬體的 bios 上啟用虛擬化:

  • 啟動 hyper-Vdocker for Windows 使用 hyper-V,如果我們不設定啟用,docker 也會自動協助設定
  • 安裝 Install Docker for Windows

必須要是 windows 10 pro 64 bits,目前主要還是要選擇 edge channel,因為 stable channel 目前不支援 windows container。如果要安裝穩定版本,可以在 Docker 官網下載

  • 安裝完畢後,要等待 docker initialization

完畢後,就會出現 docker Welcome 畫面,代表 Docker 已經啟動成功:

       

我們可以檢查 hyper-v,會出現 linux VM,這是 Docker host 主要的 VM

透過 docker cli 可以查詢 docker info,在此可以看到執行的環境是 linux: