1. 程式人生 > 其它 >使用Linux下Docker部署MSSQL並載入主機目錄下的資料庫

使用Linux下Docker部署MSSQL並載入主機目錄下的資料庫

技術標籤:Docker資料庫linuxdocker資料庫mssql

使用Linux下Docker部署MSSQL並載入主機目錄下的資料庫

0.部署條件
部署MSSQL for Linux需要4G記憶體
我是在虛擬機器中測試的,關閉防火牆,使虛擬機器能上網

1.下載映象
務必配置阿里映象加速
mkdir /opt/mssqldata
docker pull microsoft/mssql-server-linux

2.建立並執行容器
預設情況下,Docker中的SQL Server是開發者版本(Developer Edition),功能與企業版相同,但是僅能用於開發或者測試環境,不得用於生產環境

如果是開發環境,命令如下

docker run \
--name mssql \
--restart always \
--privileged=true \
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_SA_PASSWORD=yourStrong(!)Pass456' \
-v /opt/mssqldata/:/var/opt/mssql/data/mydata/ \
-p 1433:1433 \
-d microsoft/mssql-server-linux

密碼應符合 SQL Server 預設密碼策略,否則容器無法設定 SQL Server,將停止工作。 預設情況下, 密碼的長度必須至少為8個字元, 並且包含以下四個集中的三個字元:大寫字母、小寫字母、十進位制數字和符號。 可以通過執行 docker logs 命令檢查錯誤日誌。替換yourStrong(!)Pass456

成你自己的密碼就行。

如果是Linux伺服器,可以不用埠對映,直接使用宿主模式,如下:

docker run \
--name mssql \
--restart always \
--privileged=true \
--net=host
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_SA_PASSWORD=yourStrong(!)Pass456' \
-v /opt/mssqldata/:/var/opt/mssql/data/mydata/ \
-d microsoft/mssql-server-linux

如果是執行生產容器映像,命令如下:

docker run \
--name sqlent \
--restart always \
--privileged=
true \ -e 'ACCEPT_EULA=Y' \ -e 'MSSQL_SA_PASSWORD=yourStrong(!)Pass456' \ -e 'MSSQL_PID=Enterprise' \ -v /opt/mssqldata/:/var/opt/mssql/data/mydata/ \ -p 1433:1433 \ -d microsoft/mssql-server-linux

注意,多了**-e ‘MSSQL_PID=Enterprise’ **這行

3.進入容器
docker exec -it mssql /bin/bash

4.使用mssql命令列工具
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘yourStrong(!)Pass456’

5.用圖形化工具SQL Server Management Studio建立一個數據庫testdb
選擇資料庫檔案存放在/var/opt/mssql/data/mydata下
然後執行SQL語句
select @@VERSION;
go
SELECT Name from sys.Databases;
go
use testdb;
go
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
go
INSERT INTO Inventory VALUES (1, ‘banana’, 150);
INSERT INTO Inventory VALUES (2, ‘orange’, 154);
SELECT * FROM Inventory WHERE quantity > 152;
go

6.停止容器並刪除
sudo docker stop mssql
sudo docker rm mssql

7.再次執行docker
執行如上第2、3步,執行並進入docker
然後在命令列狀態下,手動mount資料庫

>EXEC sp_attach_db @dbname = 'testdb',
>@filename1 = '/var/opt/mssql/data/mydata/testdb.mdf',
>@filename2 = '/var/opt/mssql/data/mydata/testdb_log.ldf'
>GO

然後再執行第5步測試資料都正常還在。

注:如果docker沒有rm,就是沒有刪除,則都會正常載入的,就不再需要attach資料庫檔案了。也就是啟停不會影響資料庫的。

8.參考文件
•Run the SQL Server 2017 container image with Docker
•Docker Repository: microsoft/mssql-server-linux