美文网首页
Docker 部署MSSQL(SQL Server)

Docker 部署MSSQL(SQL Server)

作者: chjxidian | 来源:发表于2019-07-23 08:49 被阅读0次

    在本快速入门教程中,你使用 Docker 请求和运行 SQL Server 2017 容器映像 mssql server linux。 然后使用 sqlcmd 进行连接,以便创建第一个数据库并运行查询。
    此映像包含在 Linux(基于 Ubuntu 16.04)上运行的 SQL Server。 它可与适用于 Linux 的 Docker 引擎 1.8 以上版本或适用于 Mac/Windows 的 Docker 配合使用。 本快速入门专门介绍了如何在linux映像上使用 SQL Server。 虽然未介绍 Windows 映像,但可在 mssql-server-windows-developer Docker 中心页上找到关于它的详细信息。

    先决条件

    • 适用于支持的任一 Linux 分发版的 Docker 引擎 1.8 以上版本,或适用于 Mac/Windows 的 Docker。 有关详细信息,请参阅 Install Docker(安装 Docker)。
    • Docker overlay2存储驱动程序。 这是大多数用户的默认设置。 如果发现你未使用此存储提供程序并且需要进行更改, 请参阅docker 文档中有关配置 overlay2的说明和警告。
    • 最小 2 GB 的磁盘空间。
    • 最小 2 GB RAM。
    • Linux 上的 SQL Server 的系统要求

    请求并运行容器映像

    在开始以下步骤之前, 请确保已在本文顶部选择了首选 shell (bash、PowerShell 或 cmd)。

    1. 从 Microsoft 容器注册表拉取 SQL Server 2017 Linux 容器映像。
    sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
    
    1. 前一个命令请求最新的 SQL Server 2017 容器映像。 如果想请求某个特定映像,需添加一个冒号和标记名称(例如 mcr.microsoft.com/mssql/server:2017-GA-ubuntu。 若要查看所有可用映像, 请参阅mssql-Server Docker 中心页

      对于本文中的 bash 命令, sudo将使用。 在 MacOS 上sudo , 可能不是必需的。 在 Linux 上, 如果不希望使用sudo运行 docker, 可以配置docker组, 并将用户添加到该组。 有关详细信息, 请参阅适用于 Linux 的安装后步骤

    2. 要使用 Docker 运行容器映像,可以从 Bash Shell (Linux/macOS) 或提升的 PowerShell 命令提示符使用以下命令。

    sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" \
       -p 1433:1433 --name sql1 \
       -d mcr.microsoft.com/mssql/server:2017-latest
    
    eg:
    一、docker run -d -e SA_PASSWORD='MSSQL123456' -e SQLSERVER_DATABASE=mssql -e SQLSERVER_USER=chj -e SQLSERVER_PASSWORD='MSSQL123456' -p 1433:1433 mcr.microsoft.com/mssql/server:2017-latest
    二、docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<MSSQL123456>' -p 1433:1433 --name mssql -d mcr.microsoft.com/mssql/server:2017-latest
    三、docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MSSQL@12345"  -p 1433:1433 --name mssql -d mcr.microsoft.com/mssql/server:2017-latest
    

    备注

    密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,将停止工作。 默认情况下, 密码的长度必须至少为8个字符, 并且包含以下四个集中的三个字符:大写字母、小写字母、十进制数字和符号。 你可以通过执行 docker logs 命令检查错误日志。
    默认情况下,这会创建一个使用 SQL Server 2017 开发人员版的容器。 在容器中运行生产版本的过程略有不同。 有关详细信息,请参阅运行生产容器映像

    1. 下表对前一个 docker run 示例中的参数进行了说明:

      参数 描述
      -e 'ACCEPT_EULA=Y' ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。
      -e 'SA_PASSWORD=<YourStrong!Passw0rd>' 指定至少包含 8 个字符且符合 SQL Server 密码要求的强密码。 SQL Server 映像的必需设置。
      -p 1433:1433 建立主机环境(第一个值)上的 TCP 端口与容器(第二个值)中 TCP 端口的映射。 在此示例中, SQL Server 侦听容器中的 TCP 1433, 此端口公开给主机上的端口1433。
      --name sql1 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。
      mcr.microsoft.com/mssql/server:2017-latest SQL Server 2017 Linux 容器映像。
    2. 要查看 Docker 容器,请使用 docker ps 命令。

    sudo docker ps -a
    
    1. 将看到与如下屏幕截图相似的输出:


      图片
    2. 如果“状态”列显示“正常运行”,则 SQL Server 将在容器中运行,并侦听“端口”列中指定的端口 。 如果 SQL Server 容器的“状态”列显示“已退出”,则参阅配置指南的疑难解答部分

    -h(主机名)参数也非常有用,但为了简单起见,本教程中不使用它。 这会将容器的内部名称更改为一个自定义值。 也就是以下 Transact-SQL 查询中返回的名称:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName')
    

    -h--name 设为相同的值是一种很好的方法,可以轻松地识别目标容器。

    更改 SA 密码

    SA 帐户是安装过程中在 SQL Server 实例上创建的系统管理员。 创建 SQL Server 容器后,通过在容器中运行 echo $MSSQL_SA_PASSWORD,可发现指定的 MSSQL_SA_PASSWORD 环境变量。 出于安全考虑,请考虑更改 SA 密码。

    1. 选择 SA 用户要使用的强密码。

    2. 使用 docker exec 运行sqlcmd ,以使用 Transact-SQL 更改密码。 在下面的示例中, 将旧密码<YourStrong!Passw0rd>和新<YourNewStrong!Passw0rd>密码替换为你自己的密码值。

    sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P "<YourStrong!Passw0rd>" \
       -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong!Passw0rd>"'
    

    连接到 SQL Server

    下列步骤在容器内部使用 SQL Server 命令行工具 sqlcmd 来连接 SQL Server。

    1. 使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell。 在下面的示例中,sql1 是在创建容器时由 --name 参数指定的名称。
    sudo docker exec -it sql1 "bash"
    
    1. 一旦位于容器内部,使用 sqlcmd 进行本地连接。 默认情况下,sqlcmd 不在路径之中,因此需要指定完整路径。
    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong!Passw0rd>"
    

    提示
    可以省略命令行上提示要输入的密码。

    1. 如果成功,应会显示 sqlcmd 命令提示符:1>。

    创建和查询数据

    以下部分将引导你使用 sqlcmd 和 Transact-SQL 完成新建数据库、添加数据并运行简单查询的整个过程。

    新建数据库

    以下步骤创建一个名为 TestDB 的新数据库。

    1. 在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:
    CREATE DATABASE TestDB
    
    1. 在下一行中,编写一个查询以返回服务器上所有数据库的名称:
    SELECT Name from sys.Databases
    
    1. 前两个命令没有立即执行。 必须在新行中键入 GO 才能执行以前的命令:
    GO
    

    插入数据

    接下来创建一个新表 Inventory,然后插入两个新行。

    1. 在 sqlcmd 命令提示符中,将上下文切换到新的 TestDB 数据库:
    USE TestDB
    
    1. 创建名为 Inventory 的新表:
    CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
    
    1. 将数据插入新表:
    INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
    
    1. 要执行上述命令的类型 GO:
    GO
    

    选择数据

    现在,运行查询以从 Inventory 表返回数据。

    1. 通过 sqlcmd 命令提示符输入查询,以返回 Inventory 表中数量大于 152 的行:
    SELECT * FROM Inventory WHERE quantity > 152;
    
    1. 执行命令:
    GO
    

    退出 sqlcmd 命令提示符

    1. 要结束 sqlcmd 会话,请键入 QUIT
    QUIT
    
    1. 要在容器中退出交互式命令提示,请键入 exit。 退出交互式 Bash Shell 后,容器将继续运行。

    从容器外连接

    还可以从支持 SQL 连接的任何 Linux、Windows 或 macOS 外部工具连接到 Docker 计算机上的 SQL Server 实例。

    以下步骤在容器外使用 sqlcmd 连接在容器中运行的 SQL Server。 这些步骤假定你已在容器外安装了 SQL Server 命令行工具。 使用其他工具时, 相同的原则同样适用, 但连接过程对于每个工具都是唯一的。

    1. 查找承载容器的计算机的 IP 地址。 在 Linux 上,使用 ifconfigip addr。在 Windows 上,使用 ipconfig

    2. 对于本示例, 请在客户端计算机上安装sqlcmd工具。 有关详细信息, 请参阅在 Windows 上安装 sqlcmd在 Linux 上安装 sqlcmd

    3. 运行 sqlcmd,指定 IP 地址和映射容器中的端口 1433 的端口。 在此示例中, 这是主机上的相同端口1433。 如果在主机计算机上指定了其他映射端口, 则可在此处使用。

    sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong!Passw0rd>"
    
    1. 运行 Transact-SQL 命令。 完成后,键入 QUIT。
      连接到 SQL Server 的其他常见工具包括:

    删除容器

    如果想删除本教程中使用的 SQL Server 容器,请运行以下命令:

    sudo docker stop sql1
    sudo docker rm sql1
    

    后续步骤

    有关如何将数据库备份文件还原到容器中的教程,请参阅在 Linux Docker 容器中还原 SQL Server 数据库。 若要浏览其他方案, 例如运行多个容器、数据持久性和故障排除, 请参阅在 Docker 上配置 SQL Server 容器映像

    并且,请查看 mssql-docker GitHub 存储库,了解资源、反馈和已知问题。

    附属说明:

    可以直接从bash后台利用指令创建数据库及数据表

    一、建库和建表

    docker exec -it mssql "bash"     //进入容器
    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Test1234'     //执行数据库操作,localhost可以换成对应IP地址
    1> CREATE DATABASE dockerdbtest  //创建数据库
    2> go
    1> use dockerdbtest
    2> create table user(id int,code nvarchar(255),name nvarchar(255));  //创建表
    3> go
    

    二、链接数据库

    利用Navicat链接MSSQL,如下图所示:

    Navicat链接MSSQL

    三、开机启动MSSQL

    开机启动MSSQL服务

    相关文章

      网友评论

          本文标题:Docker 部署MSSQL(SQL Server)

          本文链接:https://www.haomeiwen.com/subject/qyunlctx.html