본문 바로가기
카테고리 없음

[Docker] docker compose 활용해보기

by 근즈리얼 2024. 10. 2.
728x90

이전에는 저의 스프링 기반의 프로젝트를 도커 이미지화 시켜서 실행시키는 내용을 적었었습니다.

 

이 프로젝트를 진행하며 h2 데이터베이스를 사용하고 있었는데 postgres를 사용하도록 바꿔보려고 했습니다.

따라서, 프로젝트 도커 이미지와 postgres 도커 이미지를 사용하여 프로젝트를 실행시키려고 하였고 이때 docker compose를 사용하게 되었습니다.

 

우선 docker compose가 뭔지 알아보겠습니다.

 

docker compose란?

- 여러 개의 docker 컨테이너들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있는 도구

 

위의 정리한대로 저는 제가 만든 프로젝트 컨테이너와 postgres 컨테이너를 묶어서 관리할 필요가 있었고 docker compose를 사용하게 된 것입니다.

 

바로 docoker compose를 어떻게 작성했는지 확인해보겠습니다.

version: '3'
services:
  app:
    image: tiger-letter-app  # Spring Boot 애플리케이션 이미지
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/tigers
      - SPRING_DATASOURCE_USERNAME=ogh
      - SPRING_DATASOURCE_PASSWORD=1234
    depends_on:
      - db  # db 서비스가 준비된 후 애플리케이션이 실행되도록 설정
  db:
    image: postgres  # PostgreSQL 이미지
    environment:
      POSTGRES_DB: tigers
      POSTGRES_USER: ogh
      POSTGRES_PASSWORD: 1234
    ports:
      - "5432:5432"

여기서 제가 중요하다고 생각했던 부분만 설명하고 넘어가겠습니다.

  • version : docker compose의 현재 버전입니다.
  • app.image : tiger-letter-app : 제가 만든 프로젝트의 이미지 이름입니다.
  • environment : 여기는 데이터베이스의 계정 정보와 url을 입력하시면 되는데 url에서 ip:port를 입력할 때 아래 db에 작성한 내용으로 적용하셔야 합니다.
  • depends_on : 아래 적혀져 있는 db를 먼저 실행시키고 app이 실행될 수 있도록 하는 설정입니다.
  • db.image : 제가 갖고 있는 postgre 이미지 이름을 사용합니다.

참고로 docker-compose.yml 파일은 프로젝트 루트 경로에 만들어 뒀습니다.

 

이제 docker-compose up -d 명령어로 docker-compose를 실행시켜 보겠습니다.

위의 사진처럼 성공적으로 실행이 되었고요.

 

docker desktop에서 확인해볼 수 있었습니다.


그런데 한가지 궁금한 것이 있었습니다.

나는 내가 만든 프로젝트만 실행시키고 데이터베이스는 이미 실행중인 컨테이너랑 연결되면 좋겠는데? 라는 생각을 했었습니다.

 

따라서 어떻게 하면 될지 방법을 찾아봤는데 이 방법이 정답인지는 모르겠습니다! 이런 방법도 있구나 하고 봐주시면 좋을거 같습니다.

우선 간단하게 설명하면

  • tiger-letter-app(제가 만든 프로젝트)와 postgres 컨테이너를 같은 네트워크에 넣고 ip를 postgresql 컨테이너 이름을 넣는 것입니다.
  • 저는 my-network라는 네트워크를 만들었습니다.
    • docker network create my-network
  • 그후 만든 네트워크 안에 postgresql 컨테이너를 넣습니다.
    • docker network connect my-network PosgreSQL
  • 아래의 docker-compose.yml을 실행시킵니다.
version: '3'
services:
  app:
    image: tiger-letter-app  # Spring Boot 애플리케이션 이미지
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://PostgreSQL:5432/tigers
      - SPRING_DATASOURCE_USERNAME=ogh
      - SPRING_DATASOURCE_PASSWORD=1234
    networks:
      - my-network

networks:
  my-network:
    external: true  # 기존 네트워크를 사용하도록 설정

 

결과로는 

이런 형태로 컨테이너들이 동작하는 것을 확인할 수 있었고요!

제가 만든 api가 정상적으로 동작하여 서버에서 success 메세지를 받았고

이런 형태로 데이터베이스에 저장되는 것까지 확인 했습니다.

 

감사합니다!

728x90

댓글