• 【转】使用Linux下Docker部署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
    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

    Powered By D&J (URL:http://www.cnblogs.com/Areas/)
  • 相关阅读:
    VS2015, .NET 4.6, C# 6.0, F# 4.0等重量级产品正式上线
    Visual Studio 2015正式发布
    持续集成并不能消除 Bug,而是让它们非常容易发现和改正(转)
    如何用Excel直接查询Oracle中的数据(转)
    HTTP必知必会(转)
    二叉树的友好实现(转)
    TortoiseGit push失败原因小结(转)
    Android
    对JAVA Bean使用PropertyDescriptor反射调用JAVA方法
    关于MSHTML
  • 原文地址:https://www.cnblogs.com/Areas/p/14852676.html
Copyright © 2020-2023  润新知