Поделиться через


Запуск построителя 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 порт и задав sa для пароля учетной записи уникальный пароль, который используется в этом руководстве.

    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. Create новую базу данных с именем Library , если она еще не существует.

    IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library')
    BEGIN
        CREATE DATABASE Library;
    END
    GO
    
    USE Library
    
  5. Create таблицу 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
    

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

Create файл конфигурации, который сопоставляется с таблицей, созданной на предыдущих шагах. В этом файле конфигурации 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 с помощью образа контейнера Docker, размещенного в Реестре контейнеров Майкрософт. При запуске образа контейнера подключите каталог, чтобы DAB смог прочитать файл конфигурации.

  1. mcr.microsoft.com/azure-databases/data-api-builder Извлеките образ контейнера Docker.

    docker pull mcr.microsoft.com/azure-databases/data-api-builder
    
  2. Запустите контейнер, опубликующий 5000 порт, и привяжите его к файлу dab-config.json .

    docker run \
        --name dab \
        --publish 5000:5000 \
        --detach \
        --mount type=bind,source=$(pwd)/dab-config.json,target=/App/dab-config.json,readonly \
        mcr.microsoft.com/azure-databases/data-api-builder
    
  3. Используйте веб-браузер для перехода по адресу 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-подключение. При запуске контейнера построителя API данных в Docker вы увидите, что сопоставлена только конечная точка HTTP. Если вы хотите, чтобы контейнер Docker поддерживал HTTPS для локальной разработки, необходимо предоставить собственный SSL/TLS-сертификат и файлы закрытого ключа, необходимые для шифрования SSL/TLS, и предоставить порт HTTPS. Обратный прокси-сервер также можно использовать для принудительного подключения клиентов к серверу по протоколу HTTPS, чтобы обеспечить шифрование канала связи перед перенаправлением запроса в контейнер.