107일차 - 도커 (Dockerfile, Spring Boot 애플리케이션을 Docker를 이용해 배포, 도커 컴포즈로 스프링앱 도커라이즈 - spring, db 연동)

Yohan·2024년 7월 31일
0

코딩기록

목록 보기
150/156
post-custom-banner

Dockerfile

  • 도커 이미지를 빌드하기 위한 설정 파일
    • 이미지 생성 과정에서 필요한 명령어를 순차적으로 기술

Spring Boot 애플리케이션을 Docker를 이용해 배포 과정 실습

방식

  • Gradle을 사용하여 Spring Boot 애플리케이션을 빌드하고 Docker 컨테이너에서 포트 8687을 사용하여 실행
  • 불필요한 실행파일인 plain.jar 생성 방지를 위해 build.gradle에 설정

1. Dockerfile 작성

FROM openjdk:17 // Dockerfile에서 jdk 17버전 설치했으니 피시방같은 곳 가서 실행해도 jdk, 인텔리제이 이런거 안깔아도돼! -> 자바 설치한거
ARG JAR_FILE=build/libs/*.jar // jar 파일 위치, JAR_FILE은 변수명
COPY ${JAR_FILE} app.jar // JAR_FILE 이름 app.jar로 변경
ENTRYPOINT ["java","-jar","/app.jar"] // 실행

2. 도커 이미지 빌드

  • docker build -t <이미지명> .

3. 도커 컨테이너 실행

  • docker run -p 8687:8687 <이미지명>

도커 컴포즈 (Docker Compose)

  • 여러 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 도구
    • 웹 서버, 데이터베이스, 캐시 서버 등을 각각 컨테이너로 관리할 수 있습니다. Docker Compose는 이들을 하나의 설정 파일로 관리할 수 있게 도와줌
    • 설정도 한꺼번에 가능하게됨
  • YAML 파일(docker-compose.yml)을 통해 서비스, 네트워크, 볼륨 등을 구성하고 관리할 수 있어 복잡한 애플리케이션을 쉽게 배포
  • docker-compose.yml
services:
  app:
    image: spring-image:latest
    ports:
      - "9000:9000"
    environment:
      SPRING_PROFILES_ACTIVE: 'test'
  • docker compose up -d 하면 test로 실행
  • SPRING_PROFILES_ACTIVE: 'test'에서 test를 default로 바꾸고
  • docker compose down, docker compose up -d 하면 default로 실행

도커 컴포즈로 컨테이너 관리하기

docker에 여러가지 서버 포트 설정해놓고 하나씩 사용하는 법

  • 하나는 로컬서버, 하나는 aws를 연결해놓고 사용가능
  1. application.properties에는 local 서버 포토를, application-test.properties에는 aws 서버 포트를 연결
  2. docker-compose.yml에 environment(환경설정)
  • SPRING_PROFILES_ACTIVE을 기본이면 default, test면 test 로 해놓고
  1. cmd에서 docker compose up -d 실행
  • 실행하게되면 아래 이미지와 같이 실행되는 것 확인 가능
  1. 다른 서버포트로 바꾸고 싶다?
  • docker compose down 하고 yml에서 SPRING_PROFILES_ACTIVE 이름 바꾸고 docker compose up -d 실행

도커 컴포즈로 여러 컨테이너 관리하기

docker-compose.yml 파일에 MariaDB 서비스를 정의하고, 스프링 부트 애플리케이션과 연동 설정하여 함께 실행

  1. docker-compose.yml 생성
services:
  app:
    build: .
    ports:
      - "80:80"
    environment:
      SPRING_PROFILES_ACTIVE: 'docker'
  1. application-docker.yml 생성
  • docker 컨테이너에 있는 DB를 연결하기 위해 환경변수로 설정

  1. docker-compose.yml 수정
  • Spring Boot 애플리케이션과 DB를 함께 실행하는 구성
  • app (Spring Boot 애플리케이션)과 db (MariaDB 데이터베이스)
  • build: . :현재 디렉토리(.)에 있는 Dockerfile을 사용하여 이미지 빌드
  • SPRING_PROFILES_ACTIVE : applcation-docker.yml을 사용했다는 뜻
  • SPRING_DATASOURCE_URL: MariaDB의 URL을 설정
  • - db-data: /var/lib/mysql : db-data라는 이름의 Docker 볼륨을 사용하여 컨테이너의 /var/lib/mysql 경로(데이터베이스 파일이 저장되는 위치)를 호스트에 영구적으로 저장. 이를 통해 컨테이너를 삭제하더라도 데이터가 보존
services:
  app:
    build: .
    ports:
      - "80:80"
    depends_on:
      - db
    environment:
      SPRING_PROFILES_ACTIVE: 'docker'
      SPRING_DATASOURCE_URL: jdbc:mariadb://db:3306/spring7
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: abc1234
      
  db:
  	image: mariadb:10
    environment:
      MYSQL_ROOT_PASSWORD: abc1234
      MYSQL_DATABASE: spring7
    volumes:
   	  - db-data:/var/lib/mysql
volumes:
  db-data:
  1. Dockerfile 수정 (Dockerfile: 도커 이미지를 빌드하기 위한 설정 파일)
FROM amazoncorretto:11
COPY build/libs/*.jar /app.jar
CMD ["java", "-jar", "/app.jar"]
  1. 애플리케이션 설정
  • application-dev.yml 파일에서 MariaDB 연결 설정을 확인하고 필요한 경우 수정
  1. 실행
  • docker compose up -d 명령어를 사용하여 도커 컨테이너를 구동
    • docker에 mariadb 생성
    • 이미지 빌드
  • 도커 컴포즈를 통해 컨테이너에 스프링 부트 애플리케이션과 DB가 연결 된 것 확인 가능

profile
백엔드 개발자
post-custom-banner

0개의 댓글