Freigeben über


Ausführen des Daten-API-Generators in einem Docker-Container

Der Daten-API-Generator (DAB) wird als Containerimage in der Microsoft-Containerregistrierung veröffentlicht. Jeder Docker-Host kann das Containerimage herunterziehen und DAB mit minimaler Konfiguration ausführen. Dieses Handbuch verwendet das Containerimage und eine lokale Konfigurationsdatei, um DAB schnell zu hosten und auszuführen, ohne zusätzliche Tools installieren zu müssen.

Voraussetzungen

Erstellen von Beispieldaten

Für diese kurze Anleitung reicht eine einfache Tabelle mit wenigen Datenzeilen aus, um zu veranschaulichen, wie DAB in einem Docker-Container verwendet wird. Um die Dinge weiter zu vereinfachen, verwenden wir SQL Server für Linux in einem Docker-Containerimage.

  1. Ziehen Sie das mcr.microsoft.com/mssql/server:2022-latest Container-Image.

    docker pull mcr.microsoft.com/mssql/server:2022-latest
    
  2. Führen Sie das Containerimage aus, das den 1433 Port veröffentlicht, und legen Sie das sa Kontokennwort auf ein eindeutiges Kennwort fest, das Sie in diesem Handbuch verwenden.

    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
    

    Von Bedeutung

    Dieses Kennwort ist ein einfacher fiktiver Wert für diesen Leitfaden. In der realen Welt würden Sie einen anderen Authentifizierungsmechanismus und idealerweise ein anderes Konto verwenden.

  3. Stellen Sie mithilfe Ihres bevorzugten Clients oder Tools eine Verbindung mit dem SQL-Server her. Die Verbindungszeichenfolge lautet Server=localhost,1433;User Id=sa;Password=<your-password>;TrustServerCertificate=true;.

  4. Erstellen Sie eine neue Datenbank mit dem Namen Library , wenn sie noch nicht vorhanden ist.

    IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library')
    BEGIN
        CREATE DATABASE Library;
    END
    GO
    
    USE Library
    
  5. Erstellen Sie eine Tabelle mit dem Namen Books und den Spalten id, title, year und 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. Fügen Sie vier Beispielbuchzeilen in die Books Tabelle ein.

    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. Testen Sie Ihre Daten mit einer einfachen SELECT * Abfrage.

    SELECT * FROM dbo.Books
    

Erstellen einer Konfigurationsdatei

Erstellen Sie eine Konfigurationsdatei, die der tabelle zugeordnet ist, die in den vorherigen Schritten erstellt wurde. In dieser Konfigurationsdatei wird beschrieben, wie DAB REST- und GraphQL-Endpunkte den tatsächlichen Daten zuordnet.

  1. Erstellen Sie eine Datei mit dem Namen dab-config.json.

    Tipp

    Dieser Dateiname ist die Standardeinstellung für Konfigurationsdateien. Wenn Sie den Standarddateinamen verwenden, müssen Sie die Konfigurationsdatei beim Ausführen des Containers nicht angeben.

  2. Fügen Sie diese JSON-Inhalte zu Ihrer Datei hinzu. Diese Konfiguration erstellt eine einzelne Entität, book die der vorhandenen dbo.Books Tabelle zugeordnet ist.

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

Erstellen und Ausführen eines benutzerdefinierten Docker-Container-Images

Erstellen Sie ein benutzerdefiniertes Image, das dab-config.json enthält, und führen Sie das Image dann lokal aus.

  1. Erstellen Sie eine Dockerfile-Datei im selben Ordner wie dab-config.json.

    FROM mcr.microsoft.com/azure-databases/data-api-builder:latest
    COPY dab-config.json /App/dab-config.json
    
  2. Erstellen des Images.

    docker build -t dab-local:1 .
    
  3. Führen Sie den Container aus, der den 5000 Port veröffentlicht.

    docker run \
      --name dab \
      --publish 5000:5000 \
      --detach \
      dab-local:1
    
  4. Verwenden Sie einen Webbrowser, um zu http://localhost:5000/api/book zu navigieren. Die Ausgabe sollte ein JSON-Array von Buchelementen vom REST-API-Endpunkt sein.

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

    Hinweis

    In diesem Leitfaden wird eine HTTP-Verbindung verwendet. Wenn Sie einen Daten-API-Generator-Container in Docker ausführen, sehen Sie, dass nur der HTTP-Endpunkt zugeordnet ist. Wenn Ihr Docker-Container HTTPS für die lokale Entwicklung unterstützen soll, müssen Sie Ihr eigenes SSL/TLS-Zertifikat und private Schlüsseldateien bereitstellen, die für die SSL/TLS-Verschlüsselung erforderlich sind, und den HTTPS-Port verfügbar machen. Ein Reverseproxy kann auch verwendet werden, um zu erzwingen, dass Clients eine Verbindung mit Ihrem Server über HTTPS herstellen, um sicherzustellen, dass der Kommunikationskanal verschlüsselt ist, bevor die Anforderung an Ihren Container weitergeleitet wird.