Skip to content

Docker Compose

Docker Compose

시작 프로젝트 : tutorial-server-db-integration

완료 프로젝트 : tutorial-server-docker-compose

이 주제에서는 Docker Compose 환경에서 Ktor 서버 애플리케이션을 실행하는 방법을 살펴봅니다. 여기서는

데이터베이스 통합
Learn the process of connecting Ktor services to database repositories with the Exposed SQL Library.
튜토리얼에서 생성한 프로젝트를 사용합니다. 이 프로젝트는 Exposed를 사용하여 데이터베이스와 웹 애플리케이션이 별도로 실행되는 PostgreSQL 데이터베이스에 연결합니다.

애플리케이션 준비하기

데이터베이스 설정 추출

데이터베이스 연결 구성 튜토리얼에서 생성된 프로젝트는 데이터베이스 연결을 설정하기 위해 하드코딩된 속성을 사용합니다.

PostgreSQL 데이터베이스의 연결 설정을

사용자 정의 설정 그룹
Learn how to configure various server parameters in a configuration file.
으로 추출해 보겠습니다.

  1. src/main/resources에 있는 application.yaml 파일을 열고, 다음과 같이 ktor 그룹 외부에 storage 그룹을 추가합니다:

    yaml

    이 설정들은 나중에 compose.yml 파일에서 구성됩니다.

  2. src/main/kotlin/com/example/plugins/에 있는 Databases.kt 파일을 열고, 설정 파일에서 저장소 설정을 로드하도록 configureDatabases() 함수를 업데이트합니다:

    kotlin

    이제 configureDatabases() 함수는 ApplicationConfig를 매개변수로 받아 config.property를 사용해 사용자 정의 설정을 로드합니다.

  3. src/main/kotlin/com/example/에 있는 Application.kt 파일을 열고, 애플리케이션 시작 시 연결 설정을 로드할 수 있도록 configureDatabases()environment.config를 전달합니다:

    kotlin

Ktor 플러그인 구성

Docker에서 실행하려면 애플리케이션의 모든 필수 파일이 컨테이너에 배포되어야 합니다. 사용하는 빌드 시스템에 따라 이를 수행하는 다양한 플러그인이 있습니다:

이 예제에서는 build.gradle.kts 파일에 Ktor 플러그인이 이미 적용되어 있습니다.

kotlin

Docker 구성

Docker 이미지 준비

애플리케이션을 도커화(Dockerize)하려면, 프로젝트의 루트 디렉터리에 새 Dockerfile을 생성하고 다음 내용을 입력합니다:

Docker

TIP

이 멀티 스테이지 빌드(multi-stage build)의 작동 방식에 대한 자세한 내용은 Docker 이미지 준비를 참조하세요.

이 예제에서는 Amazon Corretto Docker 이미지를 사용하지만, 다음과 같은 다른 적절한 대안으로 교체할 수 있습니다:

Docker Compose 구성

프로젝트 루트 디렉터리에 새 compose.yml 파일을 생성하고 다음 내용을 추가합니다:

yaml
  • web 서비스는 이미지 내부에 패키징된 Ktor 애플리케이션을 실행하는 데 사용됩니다.
  • db 서비스는 postgres 이미지를 사용하여 태스크를 저장하기 위한 ktor_tutorial_db 데이터베이스를 생성합니다.

서비스 빌드 및 실행

  1. Ktor 애플리케이션이 포함된 fat JAR를 생성하려면 다음 명령을 실행합니다:

    Bash
  2. docker compose up 명령을 사용하여 이미지를 빌드하고 컨테이너를 시작합니다:

    Bash
  3. Docker Compose가 이미지 빌드를 마칠 때까지 기다립니다.
  4. http://localhost:8080/static/index.html로 이동하여 웹 애플리케이션을 엽니다. 태스크를 필터링하고 새로 추가하기 위한 세 개의 폼과 태스크 목록 테이블이 포함된 Task Manager Client 페이지가 표시되어야 합니다.

    A browser window showing the Task Manager Client