以docker形式部署Sqlserver
前言
最近朋友需要一個Sqlserver實例用來學習SQL語句,上(sou)網(suo)發現,微軟的Sqlserver已經支持跑在Linux上,也同樣提供了Docker版本,正好能跑在24小時開機的黑群暉上。
安裝部署
-
環境
CPU: J1900
內存: 8G
系統: DSM 6.2.1-23824 Update 1
軟件版本: Docker version 18.09.8, build 2c0a67b -
拉取鏡像
sudo docker pull mcr.microsoft.com/mssql/server:latest
其中會拉取多個鏡像層,其中倒數第二和第三個鏡像層,速度尤為緩慢,可能與微軟的相應服務器在海外有關,需要某些形式的加速服務。
$ sudo docker pull mcr.microsoft.com/mssql/server:latest
latest: Pulling from mssql/server
8e128b580ca0: Pull complete
069545734e12: Pull complete
5e3755f4d999: Pull complete
c1b41e6e4ba8: Pull complete
d8579de2f3a2: Pull complete
9d72f33eeb8c: Downloading [===================> ] 142.7MB/359.7MB
547793e22b5b: Download complete
拉取完后可用看到鏡像已經躺好。
$ sudo docker images
Password:
REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/mssql/server latest a8948ed97d80 2 weeks ago 1.39GB
- 啟動容器
sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Pass@w0rd" \
-p 51433:1433 --name mssql -h mssql \
-d mcr.microsoft.com/mssql/server:latest
-e "ACCEPT_EULA=Y"
為同意用戶協議,保持不用改就行。
"SA_PASSWORD=Pass@w0rd"
為SA用戶設置密碼,強度要求是至少8位且大小寫字母、數字、符號4種中有3種即可。
-p 51433:1433
為容器轉發端口,前者為宿主機端口,后者為Sqlserver默認端口
--name mssql
為容器名,自己手動指定一個
-h mssql
為容器內的主機名,我設置的同容器名,避免混淆
-d
容器將在后台運行
mcr.microsoft.com/mssql/server:latest
微軟的倉庫
- 查看容器狀態
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2cbfe02bf409 mcr.microsoft.com/mssql/server:latest "/opt/mssql/bin/perm…" 6 hours ago Up 6 hours 0.0.0.0:51433->1433/tcp mssql
-
修改密碼
官方建議修改SA密碼,因為在安裝時設置的SA密碼會保存在環境變量SA_PASSWORD中。
$ sudo docker exec -it mssql /bin/bash
Password:
mssql@mssql:/$
mssql@mssql:/$ echo $SA_PASSWORD
Pass@w0rd
通過以上查看環境變量,即可看到。
$ sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P Pass@w0rd \
-Q 'ALTER LOGIN SA WITH PASSWORD=NewPass@w0rd'
以上,通過sqlcmd工具,輸入老密碼,設置新密碼。
接下來我們就可以使用Sqlserver數據庫了。
- 使用sqlcmd進入數據庫
$ sudo docker exec -it mssql /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P Pass@w0rd
Password:
1>
2>
3> create database TestDB001
4> go
1> select name from sys.databases
2> go
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
TestDB
TestDB001
(6 rows affected)
如圖,sqlcmd中每次輸入命令需要輸入go才能提交執行。以上成功的創建了一個名為TestDB001的數據庫。
小坑
- 使用Navicat連接Sqlserver數據庫時,若端口號不是默認端口號,需要在主機IP后使用英文逗號加端口號的形式。
- 對於Navicat,以上設置后,需要安裝SQL Server Native Client 10.0驅動,安裝程序為Navicat軟件根目錄下的sqlncli_x64.msi,32位版也有提供。安裝完成后,創建Sqlserver連接時高級選項卡中的Native Client驅動將有下拉選項可供選擇。
參考
- 快速入門:使用 Docker 運行 SQL Server 容器映像 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-docker