Docker 컨테이너에서 데이터 API 작성기 실행
DAB(데이터 API 작성기)는 Microsoft Container Registry에 컨테이너 이미지로 게시됩니다. 모든 Docker 호스트는 컨테이너 이미지를 끌어오고 최소한의 구성으로 DAB를 실행할 수 있습니다. 이 가이드에서는 컨테이너 이미지와 로컬 구성 파일을 사용하여 추가 도구를 설치할 필요 없이 DAB를 신속하게 호스트하고 실행합니다.
사전 요구 사항
- Docker
- 데이터베이스 클라이언트(SQL Server Management Studio, Azure Data Studio 등)
- 클라이언트가 설치되지 않은 경우 Azure Data Studio를 설치합니다.
샘플 데이터 만들기
이 간단한 가이드의 경우 몇 개의 데이터 행이 있는 간단한 테이블은 Docker 컨테이너에서 DAB를 사용하는 방법을 보여 주기에 충분합니다. 작업을 간소화하기 위해 Docker 컨테이너 이미지에서 Linux용 SQL Server 사용합니다.
컨테이너 이미지를 끌어오세요
mcr.microsoft.com/mssql/server:2022-latest
.docker pull mcr.microsoft.com/mssql/server:2022-latest
포트를 게시
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
중요
이 가이드의 간단한 암호입니다. 실제 환경에서는 다른 인증 메커니즘과 다른 계정을 사용하는 것이 좋습니다.
원하는 클라이언트 또는 도구를 사용하여 SQL 서버에 연결합니다. 연결 문자열은
Server=localhost,1433;User Id=sa;Password=<your-password>;TrustServerCertificate=true;
입니다.새 데이터베이스가 없는 경우 라는
Library
새 데이터베이스를 Create.IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library') BEGIN CREATE DATABASE Library; END GO USE Library
, ,
year
title
및pages
열이 있는 라는Books
id
테이블을 Create.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
표에 4개의 샘플 책 행을
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
간단한
SELECT *
쿼리를 사용하여 데이터를 테스트합니다.SELECT * FROM dbo.Books
구성 파일 만들기
이전 단계에서 만든 테이블에 매핑되는 구성 파일을 Create. 이 구성 파일은 DAB에 REST 및 GraphQL 엔드포인트를 실제 데이터에 매핑하는 방법을 설명합니다.
dab-config.json
라는 파일을 만듭니다.팁
구성 파일의 기본 파일 이름입니다. 기본 파일 이름을 사용하면 컨테이너를 실행할 때 구성 파일을 지정할 필요가 없습니다.
이 JSON 콘텐츠를 파일에 추가합니다. 이 구성은 기존
dbo.Books
테이블에 매핑된 라는book
단일 엔터티를 만듭니다.{ "$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 컨테이너 이미지 끌어오기 및 실행
Microsoft Container Registry에서 호스트되는 Docker 컨테이너 이미지를 사용하여 DAB를 실행합니다. 컨테이너 이미지를 실행할 때 DAB가 구성 파일을 읽을 수 있도록 디렉터리를 탑재합니다.
mcr.microsoft.com/azure-databases/data-api-builder
Docker 컨테이너 이미지를 가져옵니다.docker pull mcr.microsoft.com/azure-databases/data-api-builder
포트를 게시하는 컨테이너를
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
웹 브라우저를 사용하여 로 이동합니다
http://localhost:5000/api/book
. 출력은 REST API 엔드포인트에서 책 항목의 JSON 배열이어야 합니다.{ "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 연결을 사용합니다. Docker에서 데이터 API 작성기 컨테이너를 실행하는 경우 HTTP 엔드포인트만 매핑되는 것을 볼 수 있습니다. Docker 컨테이너가 로컬 개발을 위해 HTTPS를 지원하도록 하려면 SSL/TLS 암호화에 필요한 고유한 SSL/TLS 인증서 및 프라이빗 키 파일을 제공하고 HTTPS 포트를 노출해야 합니다. 역방향 프록시를 사용하여 클라이언트가 HTTPS를 통해 서버에 연결하여 컨테이너에 요청을 전달하기 전에 통신 채널이 암호화되도록 할 수도 있습니다.