Запуск построителя API данных в контейнере Docker

Построитель API данных (DAB) публикуется как образ контейнера в реестре контейнеров Майкрософт. Любой хост Docker может загрузить образ контейнера и запустить DAB с минимальной настройкой. В этом руководстве используется образ контейнера и локальный файл конфигурации для быстрого размещения и запуска DAB без необходимости установки дополнительных средств.

Необходимые условия

Создание примера набора данных

В этом кратком руководстве достаточно простой таблицы с несколькими строками данных, чтобы продемонстрировать, как использовать DAB в контейнере Docker. Чтобы упростить работу, мы используем SQL Server для Linux в образе контейнера Docker.

  1. Извлеките образ контейнера mcr.microsoft.com/mssql/server:2022-latest.

    docker pull mcr.microsoft.com/mssql/server:2022-latest
    
  2. Запустите образ контейнера, публикуя 1433 порт и установив для учетной записи уникальный пароль, который вы будете использовать в этом руководстве.

    docker run \
        --name mssql \
        --publish 1433:1433 \
        --detach \
        --env "ACCEPT_EULA=Y" \
        --env "MSSQL_SA_PASSWORD=<your-password>" \
        mcr.microsoft.com/mssql/server:2022-latest
    

    Это важно

    Этот пароль — это простое вымышленное значение для данного руководства. В реальном мире вы будете использовать другой механизм проверки подлинности и в идеале другую учетную запись.

  3. Подключитесь к серверу SQL Server с помощью предпочтительного клиента или средства. Строка подключения Server=localhost,1433;User Id=sa;Password=<your-password>;TrustServerCertificate=true;.

  4. Создайте новую базу данных с именем Library , если она еще не существует.

    IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library')
    BEGIN
        CREATE DATABASE Library;
    END
    GO
    
    USE Library
    
  5. Создайте таблицу с именем Books с колонками id, title, year и pages.

    DROP TABLE IF EXISTS dbo.Books;
    
    CREATE TABLE dbo.Books
    (
        id int NOT NULL PRIMARY KEY,
        title nvarchar(1000) NOT NULL,
        [year] int null,
        [pages] int null
    )
    GO
    
  6. Вставьте четыре примера строк книги в таблицу Books .

    INSERT INTO dbo.Books VALUES
        (1000, 'Practical Azure SQL Database for Modern Developers', 2020, 326),
        (1001, 'SQL Server 2019 Revealed: Including Big Data Clusters and Machine Learning', 2019, 444),
        (1002, 'Azure SQL Revealed: A Guide to the Cloud for SQL Server Professionals', 2020, 528),
        (1003, 'SQL Server 2022 Revealed: A Hybrid Data Platform Powered by Security, Performance, and Availability', 2022, 506)
    GO
    
  7. Протестируйте данные с помощью простого SELECT * запроса.

    SELECT * FROM dbo.Books
    

Создание файла конфигурации

Создайте файл конфигурации, который сопоставляется с таблицей, созданной на предыдущих шагах. Этот файл конфигурации описывает DAB, как сопоставить эндпоинты REST и GraphQL с вашими данными.

  1. Создайте файл с именем dab-config.json.

    Подсказка

    Это имя файла по умолчанию для файлов конфигурации. Используя имя файла по умолчанию, при запуске контейнера не следует указывать файл конфигурации.

  2. Добавьте это содержимое JSON в файл. Эта конфигурация создает одну сущность, book сопоставленную с существующей dbo.Books таблицей.

    {
      "$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
      "data-source": {
        "database-type": "mssql",
        "connection-string": "Server=host.docker.internal\\mssql,1433;Initial Catalog=Library;User Id=sa;Password=<your-password>;TrustServerCertificate=true;"
      },
      "runtime": {
        "rest": {
          "enabled": true
        },
        "graphql": {
          "enabled": true
        }
      },
      "entities": {
        "book": {
          "source": "dbo.Books",
          "permissions": [
            {
              "actions": [
                "read"
              ],
              "role": "anonymous"
            }
          ]
        }
      }
    }
    

Создание и запуск пользовательского образа контейнера Docker

Создайте пользовательский образ, который включает в себя dab-config.json, а затем запустите образ локально.

  1. Создайте Dockerfile в той же папке, что и dab-config.json.

    FROM mcr.microsoft.com/azure-databases/data-api-builder:latest
    COPY dab-config.json /App/dab-config.json
    
  2. Создание образа.

    docker build -t dab-local:1 .
    
  3. Запустите контейнер, открыв порт 5000.

    docker run \
      --name dab \
      --publish 5000:5000 \
      --detach \
      dab-local:1
    
  4. Используйте веб-браузер для перехода на http://localhost:5000/api/book. Выходные данные должны быть массивом JSON элементов книг из эндпоинта REST API.

    {
      "value": [
        {
          "id": 1000,
          "title": "Practical Azure SQL Database for Modern Developers",
          "year": 2020,
          "pages": 326
        },
        {
          "id": 1001,
          "title": "SQL Server 2019 Revealed: Including Big Data Clusters and Machine Learning",
          "year": 2019,
          "pages": 444
        },
        {
          "id": 1002,
          "title": "Azure SQL Revealed: A Guide to the Cloud for SQL Server Professionals",
          "year": 2020,
          "pages": 528
        },
        {
          "id": 1003,
          "title": "SQL Server 2022 Revealed: A Hybrid Data Platform Powered by Security, Performance, and Availability",
          "year": 2022,
          "pages": 506
        }
      ]
    }
    

    Замечание

    В этом руководстве используется HTTP-подключение. При запуске контейнера Data API Builder в Docker видно, что сопоставлена только конечная точка HTTP. Если вы хотите, чтобы контейнер Docker поддерживал HTTPS для локальной разработки, необходимо предоставить собственный SSL/TLS-сертификат и файлы закрытого ключа, необходимые для шифрования SSL/TLS и предоставить порт HTTPS. Обратный прокси-сервер также можно использовать для принудительного подключения клиентов к серверу через HTTPS, чтобы убедиться, что канал связи зашифрован перед пересылкой запроса в контейнер.

Определение порта

Построитель API данных определяет, какой HTTP-порт используется для внутренних операций (проверки работоспособности, внутренние вызовы HTTP) с помощью этого приоритета:

Priority Переменная среды Примечания
1 ASPNETCORE_URLS Анализирует первый порт из списка URL-адресов (например, http://*:8080).
2 ASPNETCORE_HTTP_PORTS переменная контейнера .NET 8+ Использует первый указанный порт.
3 DEFAULT_PORT Резервный вариант для DAB. Не распознаётся в .NET или Контейнеры приложений Azure.
4 (не задано) По умолчанию используется порт 5000.

Если переменная задана, но содержит недопустимое значение, DAB переходит к следующему параметру.

Сценарий Используемый порт
ASPNETCORE_URLS=http://*:8080 8080
ASPNETCORE_HTTP_PORTS=7071 7071
DEFAULT_PORT=6000 6000
Нет набора переменных среды 5000

Замечание

DEFAULT_PORT — это переменная среды, зависяющая от DAB. .NET, Контейнеры приложений Azure и другие платформы размещения не распознают его. Используйте его только в качестве резервного варианта для пользовательских сценариев развертывания.

Поддержка платформы

Образы контейнеров DAB создаются только для x86-64 (amd64). В настоящее время ARM64 не поддерживается.