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에 연결합니다. 연결 문자열이 .입니다
Server=localhost,1433;User Id=sa;Password=<your-password>;TrustServerCertificate=true;
.새 데이터베이스가 없는 경우 새
Library
데이터베이스를 만듭니다.IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library') BEGIN CREATE DATABASE Library; END GO USE Library
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
Books
테이블에 샘플 책의 행 4개를 삽입합니다.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
구성 파일 만들기
이전 단계에서 만든 테이블에 매핑되는 구성 파일을 만듭니다. 이 구성 파일은 REST 및 GraphQL 엔드포인트를 실제 데이터에 매핑하는 방법을 DAB에 설명합니다.
이름이
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를 통해 서버에 연결하여 컨테이너에 요청을 전달하기 전에 통신 채널이 암호화되도록 할 수도 있습니다.