실전 활용: Docker Compose와 프로젝트 배포

dakcoh·2024년 9월 21일
post-thumbnail


안녕하세요!
이 게시글에서는 Docker Compose를 활용해 실제로 프로젝트를 배포하는 과정을 공부해보겠습니다.

이전 게시글에서 Docker 기본과 이미지를 다뤘다면,
이번에는 멀티 컨테이너 환경에서 Docker Compose를 사용해 Java 기반의 Spring Boot 애플리케이션과 MySQL 데이터베이스를 연동하는 예제를 실습해봅니다.


1. Docker Compose 소개

Docker Compose란?

Docker Compose는 멀티 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. 단일 docker-compose.yml 파일을 사용해 애플리케이션의 서비스를 구성하고 관리할 수 있습니다.

주요 장점

  • 하나의 파일로 전체 애플리케이션 구성 관리
  • 환경 변수로 설정 분리 가능
  • 서비스 간 의존성 관리 및 간편한 실행

2. Docker Compose 설치

Docker Compose는 Docker CLI와 함께 설치되며, 설치 여부는 아래 명령어로 확인할 수 있습니다.

$ docker-compose --version

만약 설치되지 않았다면, 공식 문서를 참고하여 설치하세요.


3. Compose 파일 구조

Compose 파일(docker-compose.yml)은 애플리케이션의 서비스, 네트워크, 볼륨 등을 정의하는 YAML 파일입니다. 주요 구성 요소는 다음과 같습니다:

  • version: Compose 파일 버전
  • services: 애플리케이션의 서비스 정의
  • volumes: 데이터 유지 및 공유 설정
  • networks: 서비스 간 네트워크 연결

4. 예제 프로젝트: Spring Boot와 MySQL

프로젝트 설명

  • Spring Boot 애플리케이션: 간단한 REST API를 제공
  • MySQL 데이터베이스: 애플리케이션의 데이터를 저장

디렉토리 구조

  • Dockerfile: Spring Boot 애플리케이션 이미지를 생성하는 데 사용
  • docker-compose.yml: Docker Compose 설정 파일
  • mysql/init.sql: MySQL 초기 데이터베이스 스크립트

5. docker-compose.yml 작성

Spring Boot 애플리케이션 서비스 설정

version: '3.8'
services:
  app:
    build:
      context: .
    ports:
      - "8080:8080"
    depends_on:
      - db

MySQL 데이터베이스 서비스 설정

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

6. Compose로 프로젝트 실행

실행 명령어

  • docker-compose up: 포그라운드 모드에서 실행
  • docker-compose up -d: 백그라운드 모드에서 실행

상태 확인

$ docker-compose ps

애플리케이션 접근 확인

브라우저에서 http://localhost:8080에 접속하여 애플리케이션이 동작하는지 확인합니다.

Docker Desktop 상태 확인

1. Docker Compose 실행 후 Docker Desktop 열기
docker-compose up 명령어로 서비스를 실행한 뒤, Docker Desktop 애플리케이션을 열어 컨테이너 상태를 확인합니다.

2. Running Containers 확인
Docker Desktop의 대시보드에서 실행 중인 컨테이너를 확인할 수 있습니다.

  • app 서비스(Spring Boot 애플리케이션)와 db 서비스(MySQL)가 실행 중이어야 합니다.

3. 컨테이너 Logs 보기
특정 컨테이너를 클릭하면 로그를 확인할 수 있습니다.
Spring Boot 애플리케이션의 경우, 애플리케이션이 정상적으로 시작되었는지 로그에 Tomcat started on port(s): 8080 또는 비슷한 메시지가 표시됩니다.

4. Port Mapping 확인
컨테이너 세부정보에서 Ports 항목을 확인합니다.

  • 8080:8080으로 매핑되어 있으면 브라우저에서 http://localhost:8080로 접근 가능.
  • 매핑이 누락되었거나 다른 포트로 매핑된 경우 docker-compose.yml 파일의 ports 설정을 수정해야 합니다.

7. Compose 활용 시 팁

환경 변수 파일(.env) 활용

환경 변수 파일로 민감한 정보를 분리 관리합니다.

로깅 관리

Docker의 로깅 드라이버를 설정하여 애플리케이션 로그를 관리합니다.

네트워크 디버깅

docker network 명령어를 사용해 서비스 간 네트워크 연결 상태를 점검합니다.


8. 마무리

Docker Compose를 사용하면 멀티 컨테이너 환경에서 애플리케이션 배포를 간소화할 수 있습니다.

이번 게시글에서는 Spring Boot와 MySQL을 연동한 예제를 다뤘지만, Redis나 Nginx와 같은 추가 서비스를 연동해 더 복잡한 환경을 구성할 수도 있습니다.

시간이 될 때 Docker Compose와 CI/CD 연동에 대해 다룰 예정입니다.
Docker를 활용한 자동화 배포에 관심 있다면 계속 지켜봐 주세요!

감사합니다!

이전글 < Docker : 이미지와 컨테이너화 실습

profile
포기하기 금지

0개의 댓글