使用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
1
2
3
4
5
6
7
8
9
密码应符合 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
1
2
3
4
5
6
7
8
9
如果是运行生产容器映像,命令如下:
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
1
2
3
4
5
6
7
8
9
10
注意,多了**-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
1
2
3
4
然后再执行第5步测试数据都正常还在。
注:如果docker没有rm,就是没有删除,则都会正常加载的,就不再需要attach数据库文件了。也就是启停不会影响数据库的。
8.参考文档
•Run the SQL Server 2017 container image with Docker
•Docker Repository: microsoft/mssql-server-linux
————————————————
https://blog.csdn.net/tikiyou/article/details/113117507