如何在 Ubuntu 中使用 Docker 啟動 MS SQL Server 2019
參考資料: https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-bash
首先當然在你的作業系統中必須先安裝好 Docker
下載 SQL Server Image file
$ sudo docker pull mcr.microsoft.com/mssql/server:2019-latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/mssql/server 2019-latest f554c0722914 4 weeks ago 1.64GB
使用 Docker 把 SQL Server image file 啟動
$ docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Sql@1234" \
-p 1433:1433 --name sql1 -h sql1 \
-v sqlvolume:/var/opt/mssql \ # 將資料映射到 local 的 volume 上
-d mcr.microsoft.com/mssql/server:2019-latest
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
36c9fe84ea3e mcr.microsoft.com/mssql/server:2019-latest "/opt/mssql/bin/perm…" 42 hours ago Up 40 minutes 0.0.0.0:1433->1433/tcp, :::1433->1433/tcp sql1
修改 SA Password
$ docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P "Sql@1234" \
-Q 'ALTER LOGIN SA WITH PASSWORD="Sql@12345"'
查看 Volume
$ docker volume ls
local sqlvolume
$ docker volume inspect sqlvolume
[
{
"CreatedAt": "2022-07-09T12:53:39+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/sqlvolume/_data",
"Name": "sqlvolume",
"Options": null,
"Scope": "local"
}
]
$ sudo ls -al /var/lib/docker/volumes/sqlvolume/_data/data
總用量 146956
drwxr-xr-x 2 10001 root 4096 七 9 13:08 .
drwxrwx--- 6 root root 4096 七 9 12:53 ..
-rw-r----- 1 10001 root 256 七 9 12:53 Entropy.bin
-rw-r----- 1 10001 root 4653056 七 10 12:25 master.mdf
-rw-r----- 1 10001 root 2097152 七 10 12:25 mastlog.ldf
-rw-r----- 1 10001 root 8388608 七 10 12:25 modellog.ldf
-rw-r----- 1 10001 root 8388608 七 10 12:25 model.mdf
-rw-r----- 1 10001 root 14090240 七 10 12:21 model_msdbdata.mdf
-rw-r----- 1 10001 root 524288 七 10 12:21 model_msdblog.ldf
-rw-r----- 1 10001 root 524288 七 10 12:21 model_replicatedmaster.ldf
-rw-r----- 1 10001 root 4653056 七 10 12:21 model_replicatedmaster.mdf
-rw-r----- 1 10001 root 14090240 七 10 12:25 msdbdata.mdf
-rw-r----- 1 10001 root 786432 七 10 12:25 msdblog.ldf
-rw-r----- 1 10001 root 8388608 七 10 12:21 tempdb2.ndf
-rw-r----- 1 10001 root 8388608 七 10 12:21 tempdb3.ndf
-rw-r----- 1 10001 root 8388608 七 10 12:21 tempdb4.ndf
-rw-r----- 1 10001 root 8388608 七 10 12:21 tempdb5.ndf
-rw-r----- 1 10001 root 8388608 七 10 12:21 tempdb6.ndf
-rw-r----- 1 10001 root 8388608 七 10 12:21 tempdb7.ndf
-rw-r----- 1 10001 root 8388608 七 10 12:21 tempdb8.ndf
-rw-r----- 1 10001 root 8388608 七 10 12:21 tempdb.mdf
-rw-r----- 1 10001 root 8388608 七 10 12:25 templog.ldf
-rw-r----- 1 10001 root 8388608 七 10 12:25 TestDB_log.ldf
-rw-r----- 1 10001 root 8388608 七 10 12:25 TestDB.mdf
連接上 Docker 中的 SQL Server
$ docker exec -it sql1 "bash"
執行 SQL Commander 工具來操作 SQL Server
mssql@sql1:/$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Sql@12345"
查看 SQL Server 版本
1> select @@version
2> go
Microsoft SQL Server 2019 (RTM-CU16) (KB5011644) - 15.0.4223.1 (X64)
Apr 11 2022 16:24:07
Copyright (C) 2019 Microsoft Corporation
Developer Edition (64-bit) on Linux (Ubuntu 20.04.4 LTS) <X64>
(1 rows affected)
建立 TestDB 資料庫
1> CREATE DATABASE TestDB
2> Select name from sys.databases
3> go
在 TestDB 資料庫中建立 Inventory 資料表 並 寫入資料
1> USE TestDB
2> CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
3> INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
4> go
查詢 Inventory 資料表
1> SELECT * FROM Inventory WHERE quantity > 152;
2> go
離開 SQL Commder 工具
1> quit
離開 Docker 環境
mssql@sql1:/$ exit
安裝 dbeaver-ce
有了資料後,通常你會需要一個管理工具來連結上該資料庫來做一些日常的資料管理。由於工作關係,會常使用到各式資料庫,若你的管理工具只適用某類資料,那勢必要安裝好幾個工具了。在此建議可使用 bdeaver-cd (https://dbeaver.io/download/)
$ wget https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb
$ sudo dpkg -i dbeaver-ce_latest_amd64.deb
安裝完成後啟動它,進行連結資料庫設定
連結 SQL Server 資料庫
管理資料庫 - 查詢資料表資料、結構、修改資料表資料、結構…