Delen via


Data API Builder uitvoeren in een Docker-container

Data API Builder (DAB) wordt gepubliceerd als een containerafbeelding naar het Microsoft Container Registry. Elke Docker-host kan de containerinstallatiekopie omlaag halen en DAB uitvoeren met minimale configuratie. In deze handleiding worden de containerinstallatiekopie en een lokaal configuratiebestand gebruikt om SNEL DAB te hosten en uit te voeren zonder extra hulpprogramma's te hoeven installeren.

Vereiste voorwaarden

Voorbeeldgegevens maken

Voor deze korte handleiding is een eenvoudige tabel met een paar rijen gegevens voldoende om te laten zien hoe u DAB gebruikt in een Docker-container. Om het eenvoudiger te maken, gebruiken we SQL Server voor Linux in een Docker-containerimage.

  1. Haal de mcr.microsoft.com/mssql/server:2022-latest containerafbeelding op.

    docker pull mcr.microsoft.com/mssql/server:2022-latest
    
  2. Voer de containerafbeeldingen uit, publiceer de 1433 poort, en stel het sa accountwachtwoord in op een uniek wachtwoord dat u voor deze handleiding gebruikt.

    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
    

    Belangrijk

    Dit wachtwoord is een eenvoudige fictieve waarde voor deze handleiding. In de praktijk zou u een ander verificatiemechanisme en idealiter een ander account gebruiken.

  3. Maak verbinding met de SQL-server met behulp van uw favoriete client of hulpprogramma. De verbindingsreeks is Server=localhost,1433;User Id=sa;Password=<your-password>;TrustServerCertificate=true;.

  4. Maak een nieuwe database met de naam Library als deze nog niet bestaat.

    IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library')
    BEGIN
        CREATE DATABASE Library;
    END
    GO
    
    USE Library
    
  5. Maak een tabel genaamd Books met de kolommen id, title, year, en 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. Voeg vier voorbeeldboekrijen in de Books tabel in.

    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. Test uw gegevens met een eenvoudige SELECT * query.

    SELECT * FROM dbo.Books
    

Configuratiebestand maken

Maak een configuratiebestand dat overeenkomt met de tabel die in de vorige stappen is gemaakt. Dit configuratiebestand beschrijft hoe je REST- en GraphQL-eindpunten aan je daadwerkelijke data koppelt.

  1. Maak een bestand met de naam dab-config.json.

    Aanbeveling

    Deze bestandsnaam is de standaardnaam voor configuratiebestanden. Door de standaardbestandsnaam te gebruiken, hoeft u niet het configuratiebestand op te geven bij het uitvoeren van de container.

  2. Voeg deze JSON-inhoud toe aan uw bestand. Met deze configuratie maakt u één entiteit die book is toegewezen aan de bestaande dbo.Books tabel.

    {
      "$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"
            }
          ]
        }
      }
    }
    

Bouw en voer een aangepaste Docker-containerimage uit

Bouw een aangepaste image die dab-config.json bevat en voer de image vervolgens lokaal uit.

  1. Maak een Dockerfile in dezelfde map als dab-config.json.

    FROM mcr.microsoft.com/azure-databases/data-api-builder:latest
    COPY dab-config.json /App/dab-config.json
    
  2. Bouw de afbeelding.

    docker build -t dab-local:1 .
    
  3. Voer de container uit die bezig is met het publiceren van de 5000 poort.

    docker run \
      --name dab \
      --publish 5000:5000 \
      --detach \
      dab-local:1
    
  4. Gebruik een webbrowser om naar http://localhost:5000/api/bookte navigeren. De uitvoer moet een JSON-matrix van boekitems zijn van het REST API-eindpunt.

    {
      "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
        }
      ]
    }
    

    Opmerking

    In deze handleiding wordt een HTTP-verbinding gebruikt. Wanneer u een Data API Builder-container uitvoert in Docker, ziet u dat alleen het HTTP-eindpunt is toegewezen. Als u wilt dat uw Docker-container HTTPS ondersteunt voor lokale ontwikkeling, moet u uw eigen SSL/TLS-certificaat en persoonlijke sleutelbestanden opgeven die vereist zijn voor SSL/TLS-versleuteling en de HTTPS-poort beschikbaar maken. Een omgekeerde proxy kan ook worden gebruikt om af te dwingen dat clients verbinding maken met uw server via HTTPS om ervoor te zorgen dat het communicatiekanaal wordt versleuteld voordat de aanvraag naar uw container wordt doorgestuurd.