在 Docker 中使用 Linux 版微軟 Microsoft SQL Server
最近向我尋求顧問諮詢的組織單位中,其中一個再也受不了微軟的天價授權費勒索,打算用 Linux (Ubuntu) 替換掉所有 Windows Server。用 PHP、Java 以及其他跨平台語言撰寫的服務要轉移很容易。但是其中一些系統使用 MicroSoft SQL Server 作為資料庫。
治本的方法是轉移到 MySQL、MariaDB 或其他 OpenSource 資料庫系統,但那需要時間來處理所有 schema 以及 query 的轉換。
另一個方法是在 Docker 中使用 Linux 版微軟 Microsoft SQL Server 作為暫時性的過渡時期解法。
環境: Ubuntu 16.04
執行 docker image
取得並執行
$ docker run --name mssql-server-linux -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -d microsoft/mssql-server-linux
檢查是否執行成功
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c73a9a4d0ef microsoft/mssql-server-linux "/bin/sh -c /opt/m..." 25 minutes ago Up 25 minutes 0.0.0.0:1433->1433/tcp mssql-server-linux
連線並執行 T-SQL 查詢
一旦執行起來後,你可以使用內建的 mssql tools 連線
docker exec -it mssql-server-linux /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'yourStrong(!)Password'
>1
試著執行一些查詢:建立資料酷、查詢資料庫、建立資料表、新增資料、查詢資料
1> SELECT Name from sys.Databases;
2> GO
Name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
(4 rows affected)
1> CREATE DATABASE testdb;
2> GO
1> USE testdb;
2> GO
Changed database context to 'testdb'.
1> CREATE TABLE inventory (id INT, name NVARCHAR(50), quantity INT);
2> GO
1> INSERT INTO inventory VALUES (1, 'banana', 150);
2> INSERT INTO inventory VALUES (2, 'orange', 154);
3> GO
(1 rows affected)
(1 rows affected)
1> SELECT * FROM inventory WHERE quantity > 152;
2> GO
id name quantity
----------- -------------------------------------------------- -----------
2 orange 154
(1 rows affected)
1> QUIT
其他資訊
Data 資料目錄的儲存路徑
root@7c73a9a4d0ef:~# ls /var/opt/mssql/data/
master.mdf model.mdf msdbdata.mdf tempdb.mdf testdb.mdf
mastlog.ldf modellog.ldf msdblog.ldf templog.ldf testdb_log.ldf
在官方的 Dockerfile 設定檔中,我們可以發現並沒有 entrypoint.sh
MSSQL server 是在 docker instance 開機後直接被呼叫執行啟動的
CMD /opt/mssql/bin/sqlservr.sh
如果你想要以這個 image 延伸建立你的應用程式專案,並有自己的 entrypoint.sh,這裡有一個 範例 可以參考
參考資料
- https://hub.docker.com/r/microsoft/mssql-server-linux/
- https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-connect-and-query-sqlcmd
- https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-troubleshooting-guide#connection
- https://github.com/Microsoft/mssql-docker/blob/dc52dd5391fe397455430d04ffeb4ecb547e80fe/linux/preview/Dockerfile#L15
- Email this page
- 7271 reads
- English
Add new comment