ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • docker-compose.yml 의 이용
    Docker 2025. 4. 3. 15:26
    docker-compose.yml 를 사용하는 멀티 컨테이너 애플리케이션을 간단히 설명하고, 왜 docker-compose.yml 을 쓰는 것이 용이한지, 그리고 어떻게 사용하는지에 대해서 작성한 문서입니다.

     


     

    docker-compose.yml 를 사용하는 때

     

    docker-compose.yml 은 멀티 컨테이너 애플리케이션을 정의하고 실행하기 위해 사용되는 도구입니다.

     

    멀티 컨테이너 애플리케이션애플리케이션이 여러 개의 컨테이너로 구성된 경우를 말합니다.

     

    예를 들어서 프론트엔드(nginx) + 백엔드(Spring Boot) + 데이터베이스(PostgreSQL) 과 같은 구성의 애플리케이션이 존재한다면, 각각 3개의 컨테이너로 실행하게 되어 멀티 컨테이너 애플리케이션으로 불리게 됩니다.

     


    docker-compose.yml 를 사용하는 이유

    그리고 각각의 컨테이너를 실행시키기 위해 개발자는 CLI 에서

     

    - 서비스(컨테이너) 실행

    - 컨테이너 실행을 위한 설정

    - 네트워크 설정

    - etc...

     

    실행에 필요한 부분들을 한줄한줄 작성합니다.

     

    echo "서비스(컨테이너) 실행"
    docker run -d --name db postgres:latest
    docker run -d --naem app my-app:latest
    docker run -d --name web -p 8080:80 nginx:latest
    
    echo "네트워크 지정"
    docker network create my-network
    docker network connect my-network db
    docker network connect my-network app
    docker network connect my-network web
    
    echo "볼륨"
    docker volume create db-volume

    *echo 는 shell 기반으로 작성한다고 생각하여, 문자열 출력값을 내보내는 부분입니다.

    * -d 옵션은 백그라운드 실행(*가장 하단에 간단 작성)입니다.

     

    그러나 이 방법은 휴먼 에러(오타 내기, 옵션 빠뜨리기)를 일으킬 확률이 높고, 문서화 되어 있지 않아 어떤 옵션을 달았는지 추후에 기억하기 어렵습니다.

     

    이런 단점을 보완하기 위해 docker-compose.yml 파일 하나로 서비스, 네트워크, 볼륨을 자동으로 관리하고자 하는 것입니다.

     

     


    docker-compose.yml 의 실제 이용

     

     

    폴더 구조

    /my-spring-app
    ├── src/
    ├── build/
    │   ├── libs/
    │   │   ├── app.jar 
    ├── Dockerfile
    ├── docker-compose.yml

     

    Spring Boot 를 이용한 프로젝트를 생성하여 docker-compose.yml 을 해당 위치에 배치했습니다.

     

     

     

    docker-compose.yml

     

    IntelliJ IDEA 화면

     

     

    IntelliJ IDEA 의 경우 관련 파일을 생성하면 Docker 아이콘이 붙습니다.

     

    version: '3'
    services:
      app:
        build:
          context: .
          dockerfile: Dockerfile # Image를 생성하기 위한 스크립트가 모인 파일
        ports:
          - "8080:8080"
        environment:
          SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydb
          SPRING_DATASOURCE_USERNAME: postgres
          SPRING_DATASOURCE_PASSWORD: mysecret
        depends_on:
          - db
    
      db:
        image: postgres:14
        environment:
          POSTGRES_DB: mydb
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: mysecret
        ports:
          - "5432:5432"
        volumes:
          - my-postgres-data:/var/lib/postgresql/data # 해당 경로는 RDBMS 의 종류에 따라 다릅니다.
    
      adminer:
        image: adminer:latest
        ports:
          - "8081:8080"
        depends_on:
          - db
        # Adminer 웹 UI가 :8081 포트로 노출
        # DB 연결 정보는 웹 UI에서 수동으로 입력
    
    volumes:
      my-postgres-data:

     

     

    Docker Desktop

     

     docker-compose up -d

     

     

    docker-compose.yml 이 존재하는 폴더 경로로 이동해 docker-compose 를 백그라운드 환경에서 실행시키면 db, app, web의 Image가 생성되고 컨테이너가 실행됩니다.

     

     

     


     

    백그라운드 실행 명령어 -d

    docker run -d

     

    백그라운드 실행이란 터미널을 점유하지 않고 뒤에서 실행하도록 하는 것이다.

    백그라운드 실행하지 않으면 로그가 실시간으로 출력되면서 터미널이 실행 상태로 유지된다. 이 경우, 출력 작업을 정지시키고자 한다면 Ctrl+C 단축키를 통해 프로세스 자체를 정지해야 합니다.

Designed by Tistory.