본문 바로가기
Architecture

Docker, Docker Compose 설정하기

by parkjp 2023. 8. 15.

 

지난 포스팅에서 Spring Boot 환경에서 jib로 docker 이미지를 올리는 법을 알아보았습니다.

 

https://developer-jp.tistory.com/90

 

[Spring Boot] jib로 AWS ECR에 docker image 올리기

jib 플러그인 설정하기 build.gradle 파일에 plugin 설정을 해준다. plugins { id 'com.google.cloud.tools.jib' version '3.2.1' } Docker Image에 관한 설정하기 build.gradle 파일에 jib 단락안에 from과 to 설정을 해준다. jib { f

developer-jp.tistory.com

 

 

 

Dockerfile 설정하기

 이번에는 jib를 쓰지않고 직접 Dockerfile을 만들어 해보겠습니다. Spring Boot, Gradle 환경으로 진행해보겠습니다.

우선 Spring Boot 프로젝트의 최상위 경로에 확장자 없이 Dockerfile을 만들어서 아래처럼 입력합니다.

# Dockerfile

FROM gradle:jdk17-alpine AS builder
COPY --chown=gradle:gradle . /gradle
WORKDIR /gradle
RUN gradle build --no-daemon

FROM openjdk:17-oracle
RUN mkdir /app
COPY --from=builder /gradle/build/libs/*.jar /app/app.jar
ARG PROFILE
ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "/app/app.jar"]
EXPOSE 8080

java 17에 gradle 환경입니다.

ARG PROFILE은 docker-compose 파일에서 설정한 환경변수로 적용되는 변수입니다.

 

 

Docker-Compose 파일 설정하기

 docker-compose.yaml 파일 설정입니다. docker-compose.yaml 파일의 위치는 모든 도커 프로젝트들의 최상위에 위치해야합니다. 아래의 예시로 한번 만들어 보겠습니다.

 

  • 폴더 구조 예시
# 예시 :
# 하나의 서버에 spring boot 프로젝트와 redis를 docker로 같은 컨테이너에 올릴 때

<Root>  #project folder
  <SpringBoot Project>  # spring boot project folder
    -Dockerfile
  <Redis> 		# redis folder
    -redis.conf
    -Dockerfile
  -docker-compose.yaml
  -test.env

 

 

  • docker-compose.yaml 파일 설정
version: "3.4"

services:
  <your-spring-boot-project-name>:
    container_name: <your-spring-boot-project-name>
    build:
      context: ./<your-spring-boot-project-location>
      cache_from:
        - openjdk:17-oracle
    environment:
#     - REDIS_HOST=test-redis
#     - REDIS_PORT=${REDIS_PORT}
      - PROFILE=${PROFILE}
   #depends_on:
   #  - test-redis
    volumes:
      - ./<your-spring-boot-project-location>:/<mount-location>
    ports:
      - "${PORT}:8080"
      
#  test-redis:
#    container_name: "test-redis"
#    build:
#      context: ./redis  # Redis folder location
#      volumes:
#       - ./redis/redis.conf:/etc/redis.conf
#        - /redis-data
#      ports:
#          - "${REDIS_PORT}:6379"
#      command: redis-server /etc/redis.conf

 

Redis를 설정한다면 주석을 풀면되는데, application.yml 파일에서도 아래처럼 바꿔줘야 합니다.

 

# spring boot project application.yml

spring:
  data:
    redis:
      host: ${REDIS_HOST}
      port: ${REDIS_PORT}

 

위 예제는 단일 서버 기준으로 설정한 것이다. 오토스케일링을 생각한다면 redis는 분리하여 따로 띄워야한다.

 

 

 

환경변수 설정

 위에서 PROFILE이나 PORT등의 변수를 볼 수 있는데, 이 경우 .env파일을 만들어서 도커 명령어 실행 시 적용하면 됩니다. 예시로 만들어 보겠습니다.

# test.env

PROFILE=dev
PORT=8080
REDIS_PORT=6379

 

 

Docker Image 빌드 및 실행

도커 빌드 명령문으로 차례대로 실행하면 됩니다.

# 도커 빌드
docker compose build

# 도커 컨테이너 실행
docker compose --env-file test.env up -d

 

 

반응형

'Architecture' 카테고리의 다른 글

패키지 매니저(저장소)를 구축해보자(Verdaccio) [1]  (0) 2023.09.01
Kubernetes 관리(GUI) 툴 OpenLens에 대해 알아보자  (0) 2023.08.13
SSO (Single Sign On)란?  (0) 2017.09.07
JWT의 이해  (0) 2017.08.30
REST의 이해  (2) 2017.08.29