본문 바로가기

기록하기

Docker compose + Springboot + Mysql 연동하기(2)

1. docker-compose

  • docker-compose란 여러개의 docker-container를 쉽게 관리하고 실행하기 위한 도구
  • docker-compose를 사용하면 따로 네트워크를 생성하여 두 컨테이너를 포함 시키는 작업을 하지 않아도 됨
  • 자동으로 브릿지 네트워크가 생기고 두 컨테이너는 해당 네트워크에 종속됨

2. docker-compose 설정 파일 작성

version: '3.8'
services: # 컨테이너
  db:
    image: mysql
    container_name: mysql-container2
    environment:
      MYSQL_ROOT_PASSWORD: {password}
      MYSQL_DATABASE: {DB name}
    ports:
      - "3307:3306"
    command: --init-file /docker-entrypoint-initdb.d/init.sql
    volumes:
        - ./init.sql:/docker-entrypoint-initdb.d/init.sql

  spring-boot-app:
    image: board-image-compose
    container_name: board-container
    ports:
      - "8081:8081"
    links:
      - db
    depends_on:
      - db #spring-boot-app
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/memo
      - SPRING_DATASOURCE_USERNAME={username}
      - SPRING_DATASOURCE_PASSWORD={password}

 

  • service : 해당 compose에 컨테이너 지칭
  • db : 첫 번째 컨테이너인 'mysql-container'를 db라는 이름으로 표시
  • image : mysql 이미지를 사용하며, 미리 생성해 놓은 mysql 이미지를 사용(없으면 hub 다운로드)
  • container_name : compose up을 통해 생성될 mysql container 이름을 명시
  • environment : 해당 container의 환경 설정 값을 명시
  • command : 해당 container가 생성되면서 실행할 명령을 설정하는 것 (여기서 연습용으로 memo라는 DB 생성하기 위해사용)
    init.sql 파일 안에 'create database memo;'라는 sql 명령어를 작성 -> root 폴더에 저장
  • volumes : 위에서 springboot 안에 있는 init.sql 파일을 컨테이너 내부 경로로 복사 -> 컨테이너 내부에서 해당 파일 실행

  • spring-boot-app : 두번째 컨테이너인 spring-boot container를 'spring-boot-app'이라는 이름으로 표시
  • links : 위에서 생성한 DB 컨테이너와 연결 설정
  • depends_on : 위에서 생성한 DB 컨테이너와 의존 관계를 맺어 DB 컨테이너가 먼저 실행한 뒤 board-container가 실행 되는데, 중요한 것은 시작 순서만 보장하고 끝나는 시점이 보장 되지 않아 문제가 생길 수 있음

3. 컨테이너 실행 순서 컨트롤 하는 법

  • 위에서 작성한 세팅으로 'docker compose up' 을 실행하면 mysql container 설정이 끝나기 전에 springboot container가 실행되면서 DB 커넥션 에러가 발생

  • mysql 컨테이너를 먼저 실행 -> springboot 컨테이너 실행 (컨테이너 이름 옆에있는 실행표시 각각 사용 - 인텔리제이 기능)

4. docker-compose 실행 확인

  • docker-compose를 실행했으면, 두 컨테이너가 동일 네트워크에 포함되는지 확인
// 명령어 입력
docker network ls

  • '프로젝트명_default' 이름의 네트워크가 생성된 것이 확인되고, 해당 이름을 통해 상세 조회
// 명령어
docker network inspect <본인파일명>


  • 잘 만들어진거 확인하고 -> Swagger로 동작 실험까지 완료

참고 https://tytydev.tistory.com/46

 

Docker compose Spring boot ,mysql 연동 방법

HTML 삽입 미리보기할 수 없는 소스 1. docker-compose 란 docker-compose란 여러 개의 docker-container를 쉽게 관리하고 실행하기 위한 도구이다. 해당 글에서는 spring boot와 mysql을 연동하기 위해 docker-compose를

tytydev.tistory.com

 

'기록하기' 카테고리의 다른 글

배포 분투기(2)  (0) 2023.11.11
배포 분투기(1)  (0) 2023.11.11
Springboot + Mysql + Docker 연동하기 1  (0) 2023.11.10
Day + 26  (0) 2023.11.10
나를 위한 swagger 사용법2  (0) 2023.11.10