使用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