在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基本指令