Docker:在Windows上安裝WSL2並建立MS SQL Server Container

在Windows上安裝WSL2並建立MS SQL Server Container

公司資料庫是使用PostgreSQL,但有些資料處理還是習慣用MS SQL Server來做,但公司電腦因為某些因素而無法安裝MS SQL Server。

一開始是先建立一個Azure SQL Server來做測試,雖然沒有使用流量,但卻在一個月後收到將近7000塊的帳單…想必這方法是不可行(參考:Azure隨付隨用的問題)。


後來在公司筆電上安裝Docker Desktop on Windows,成功用Docker建立一個本機的MS SQL Server(請參考:利用Docker Desktop on Windows建立Sql Server Container),沒想到過沒多就卻收到MIS來信通知,Docker Desktop on Windows安裝在公司電腦有授權相關問題,請盡速移除。


後來乾脆自己架了台Linux VM並安裝Docker Engine來跑MS SQL Server,也終於成功了。但因為公司的IP不是固定的,VM的IP又是從實體機橋接後取得的,只要實體機換IP後VM的IP也會跟著換,MS SQL Server又連不上去了。

這問題擱置了幾天後,忽然發現自己的筆電有安裝WSL2,可以直接在本機執行Linux。於是又想到了可以把Docker安裝在WSL2上面,於是就來實作試試看,最後也成功了,順便把相關的資訊記錄下來。


正文開始前,先統整一下我試過的在Windows上面安裝Docker並建立SQL Server Container的方法:

1.安裝Docker Desktop on Windows: 這方法最簡單,也有UI介面可以查看Image跟Container的相關資訊,但會有授權的問題。 
2.Hyper-V上面安裝Linux VM,接著在VM裡面安裝Docker Engine:這方法最麻煩,要先安裝VM,還要設定VM的網路連線相關問題,實體機換IP後,MS SQL又會連不上了。
3.安裝WSL2,接著透過WSL2安裝Docker Engin:如果有安裝過Docker Desktop on Windows的話,其實也會順便安裝好WSL2,跟方法1.其實差不多。只是少了Docker Desktop on Windows這個管理UI而已。


這裡開始正文啦:

  • Step 1:安裝WSL(Windows Subsystem for Linux) & Ubuntu

安裝過程可以先參考這篇文章:Windows 10 安裝 WSL1、WSL2(手動安裝)

安裝好後,我們就可以直接在Windows上面使用Linux Ubuntu了

  • 安裝Docker Engin
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo service docker start
  • 安裝好後,可以試著查詢看看image
$ docker images

目前還沒有任何image,但可以看到Docker已經可以Run了,接著就可以依照之前的步驟先pull mssql Image,並建立Container


  • pull Image & 查詢Image


到Docker Hub找到sqlserver的image,並pull下來。我在Docker Hub搜尋mssql都找不到Microsoft官方的image,後來直接用谷歌[docker mssql image]就有了。
相關連結:https://hub.docker.com/_/microsoft-mssql-server

網頁裡會有pull cmd讓你複製

我也順便附上cmd

docker pull mcr.microsoft.com/mssql/server

拉下來後,可以查詢到有一個mssql的Image

docker images

  • 建立Container

把image拉下來後,就可以開始建立Container了。相關的cmd,sqlserver Docker Hub的網頁裡面也有。不同的版本cmd也會不一樣!!!

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=[你的密碼]" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

查詢Container

docker ps

如果Container狀態為Exit的話,要使用下面指令才能查詢的到,上面指令只能查詢狀態為Up的Container

docker ps -a

  • 使用SSMS測試連線

如果重開機後,Docker的Service可能會被停掉,我們必須要重新啟動Docker服務

先檢查一下Docker Service的狀態,可以看到Docker is not running

service docker status

重新啟動Docker Service

sudo service docker start

Docker的Container狀態也會變成Exit

順便重啟Container

docker start [Container ID]

 


更新(2024/01/12)

後來有自費申請了VPS,並裝了台Linux Ubuntu 伺服器,照著上面的步驟要來安裝MSSQL。結果到最後要啟用Container時,卻一直起不來

後來去微軟的docker hub看到配置要求,至少要有2GB的RAM,我的VPS為了求便宜,只開了最低的規格只有1GB的RAM,不知道是不是這個原因導致Container一直起不來。

後來又另外申請了一個2GB RAM的VPS後,MSSQL就正常的Run起來了!

順便附上我的簡樸規格


Ref:
1.Windows 10 安裝 WSL1、WSL2(手動安裝)
2.WSL|在 WSL2 中安装 Docker
3.How to Resolve the “cannot connect to the Docker daemon” Error
4.Docker基本指令