SQL Server Container 快速入門
下載 Images 與執行 SQL Server Container
環境需求就不贅述了,想要瞭解可以看這邊 Prerequisites。
所以就讓我們開始吧。 請先執行下方指令,下載最新版的 SQL Server 2017 Linux Container
- bash
docker pull mcr.microsoft.com/mssql/server:2017-latest
執行 Container
- bash
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 --name sql1 -d mcr.microsoft.com/mssql/server:2017-latest
- -e “ACCEPT_EULA=Y” 表示你同意 End-User Licensing Agreement, 如果這環境變數沒有設定,會沒辦法用此 Container 喔
- -e “SA_PASSWORD=< YourStrong!Passw0rd >” 設定登入的密碼,該密碼要符合 SQL Server 預設的密碼強度 (Password Policy)
- 密碼不能包含帳號的文字
- 密碼至少 8 個字元
- 密碼須包含以下至少三個字元
- 大寫英文字
- 小寫英文字
- 阿拉伯數字
- 非英文數字符號,如 #, @ 等等
- -p 1433:1433 , SQL Server 預設使用 1433 port 連接,所以要把 1433 port 與 host system 1433 port mapping 在一起
- -d ,允許 Container 在背景執行
- –name sql1 指定 Container 的別名為 sql1
- mcr.microsoft.com/mssql/server:2017-latest, Image 的名稱
version: "3"
services:
sqldata:
image: mcr.microsoft.com/mssql/server:2022-latest
environment:
- SA_PASSWORD=Pass@word
- ACCEPT_EULA=Y
volumes:
- "sql1data:/var/opt/mssql"
ports:
- "5434:1433"
volumes:
sql1data:
並輸入docker compose up -d --build
執行 Container
接下來執行 docker ps
檢查 Container 是否有執行起來,執行成功的話會,會看到如下圖的畫面,且 Stauts 會顯示 Up。 如果沒有的話,可以參考 Troubleshooting section of the configuration guide。
使用 SQL Server Management Studio(SSMS) 連線到 SQL Server
接下來,我們要找到 Docker 的 IP,才能夠連線到 SQL Server。 請輸入 ipconfig
查詢電腦的 IP 資訊,輸入完後你會看到 DockerNAT 的網路資訊,如下圖。
找到 IP 後,就可以連線囉,我這麼的 IP 的範例是 10.0.75.1,就讓我們使用 sa 帳號與剛剛設定好的密碼連線吧。
如果是在本機開發,請使用127.0.0.1
感localhost
如果有特殊Port,請以,
分開
連線成功!!!
接下來就跟平常使用 SQL Server 一樣囉。
使用 Docker 互動模式進入 Container 的 bash
除了使用 SSMS 連線之外,我們還可以使用 Docker 互動模式進入 Container 的 bash 執行指令。 為了展示互動模式範例,我先建立 SSMS 建立好了Sample 資料庫跟一些假資料,如下圖。
請執行下方指令,進入互動模式
- bash
docker exec -it sql1 "bash"
- exec 說明要執行指令
- -it 進入互動模式
- 指定 sql1 這個 Container
輸入完指令就會看到下圖,進入的 Container 的 bash
根據 Quickstart: Run SQL Server container images with Docker 的說明,sqlcmd 是放在 /opt/mssql-tools/bin/sqlcmd
路徑底下,知道路徑後,我們就可以用 sqlcmd 連線到 SQL Server。 請執行下方指令
- bash
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourNewStrong!Passw0rd>'
成功連線後,接下來就跟一般下 sql 指令一樣了,如下圖的 SELECT 範例。