通过 Docker 部署 Azure SQL Edge

重要

Azure SQL Edge 将于 2025 年 9 月 30 日停用。 有关详细信息和迁移选项,请参阅停用通知

注意

Azure SQL Edge 不再支持 ARM64 平台。

在本快速入门中,使用 Docker 拉取和运行 Azure SQL Edge 容器映像。 然后使用 sqlcmd 连接,以创建第一个数据库并运行查询。

此映像包含基于 Ubuntu 18.04 的 SQL Edge。 它可在 Linux 上与 Docker 引擎 1.8+ 配合使用。

对于生产工作负载,以下平台不支持 Azure SQL Edge 容器:

  • Windows
  • macOS
  • Azure IoT Edge for Linux on Windows (EFLOW)

先决条件

  • 任何受支持的 Linux 发行版上的 Docker 引擎 1.8 及更高版本。 有关详细信息,请参阅 Install Docker(安装 Docker)。 由于 SQL Edge 映像基于 Ubuntu 18.04,我们建议使用 Ubuntu 18.04 Docker 主机。
  • Docker overlay2 存储驱动程序。 这是大多数用户的默认设置。 如果你发现自己未使用此存储提供程序并且需要进行更改,请参阅有关配置 overlay2 的 Docker 文档中的说明和警告。
  • 至少 10 GB 的磁盘空间。
  • 至少 1 GB 的 RAM。
  • Azure SQL Edge 的硬件要求

注意

对于本文中的 bash 命令,将使用 sudo。 如果你不想使用 sudo 来运行 Docker,可以配置一个 Docker 组,并将用户添加到该组。 有关详细信息,请参阅 Post-installation steps for Linux(适用于 Linux 的安装后步骤)。

拉取并运行容器映像

  1. 从 Azure 容器注册表中拉取 Azure SQL Edge 容器映像。

    sudo docker pull mcr.microsoft.com/azure-sql-edge:latest
    

    以上命令将拉取最新的 SQL Edge 容器映像。 若要查看所有可用映像,请参阅 azure-sql-edge Docker Hub 页

  2. 若要通过 Docker 运行容器映像,请在 bash shell 中使用以下命令:

    • 启动作为开发人员版运行的 Azure SQL Edge 实例:

      sudo docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge
      
    • 启动作为高级版运行的 Azure SQL Edge 实例:

      sudo docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Premium' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge
      

    重要

    密码应符合 Azure SQL 数据库引擎默认密码策略,否则容器无法设置 SQL 数据库引擎并停止工作。 默认情况下,密码必须为至少 8 个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 你可以通过执行 docker logs 命令检查错误日志。

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

    参数 说明
    -e "ACCEPT_EULA=Y" ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Edge 映像所需的设置。
    -e "MSSQL_SA_PASSWORD=yourStrong(!)Password" 指定至少包含 8 个字符且符合 Azure SQL Edge 密码要求的强密码。 SQL Edge 映像所需的设置。
    -p 1433:1433 将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。 在此示例中,SQL Edge 侦听容器中的 TCP 1433,并对主机上的端口 1433 公开。
    --name azuresqledge 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。
    -d 在后台运行容器(守护程序)

    有关所有 Azure SQL Edge 环境变量的完整列表,请参阅使用环境变量配置 Azure SQL Edge。你还可以使用 mssql.conf 文件配置 SQL Edge 容器。

  3. 要查看 Docker 容器,请使用 docker ps 命令。

    sudo docker ps -a
    
  4. 如果“状态”列显示“正常运行”状态,表明 SQL Edge 正在容器中运行,且正在侦听“端口”列中指定的端口。 如果 SQL Edge 容器的“状态”列显示“已退出”,请参阅 Azure SQL Edge 文档的故障排除部分。

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

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

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

  5. 最后一步,更改 SA 密码,因为 MSSQL_SA_PASSWORDps -eax 输出中可见,并存储在同名的环境变量中。 参阅以下步骤。

更改 SA 密码

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

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

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

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

连接到 Azure SQL Edge

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

  1. 使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell。 在下面的示例中,azuresqledge 是在创建容器时由 --name 参数指定的名称。

    sudo docker exec -it azuresqledge "bash"
    
  2. 在容器内部使用 sqlcmd 进行本地连接。 默认情况下,sqlcmd 不在路径之中,因此需要指定完整路径。

    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"
    

    提示

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

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

创建和查询数据

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

新建数据库

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

  1. 在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:

    CREATE DATABASE TestDB;
    GO
    
  2. 在下一行中,编写一个查询以返回服务器上所有数据库的名称:

    SELECT name from sys.databases;
    GO
    

插入数据

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

  1. 在 sqlcmd 命令提示符中,将上下文切换到新的 TestDB 数据库:

    USE TestDB;
    
  2. 创建名为 Inventory 的新表:

    CREATE TABLE Inventory (
        id INT,
        name NVARCHAR(50),
        quantity INT
    );
    
  3. 将数据插入新表:

    INSERT INTO Inventory
    VALUES (1, 'banana', 150);
    
    INSERT INTO Inventory
    VALUES (2, 'orange', 154);
    
  4. 要执行上述命令的类型 GO

    GO
    

选择数据

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

  1. 通过 sqlcmd 命令提示符输入查询,以返回 Inventory 表中数量大于 152 的行:

    SELECT * FROM Inventory WHERE quantity > 152;
    
  2. 执行此命令:

    GO
    

退出 sqlcmd 命令提示符

  1. 要结束 sqlcmd 会话,请键入 QUIT

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

从容器外连接

还可以从支持 SQL 连接的任何 Linux、Windows 或 macOS 外部工具连接到 Docker 计算机上的 SQL Edge 实例。 有关从外部连接到 SQL Edge 容器的详细信息,请参阅连接和查询 Azure SQL Edge

删除容器

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

sudo docker stop azuresqledge
sudo docker rm azuresqledge

警告

停止并删除容器会永久删除容器中的所有 SQL Edge 数据。 如果你需要保留数据,请在容器外创建并复制备份文件或使用容器数据暂留技术