๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Personal_Study/DevOps

Springboot Dockerfile & docker-compose.yml

by ํฌ์ŠคํŠธ์‰์ดํฌ 2023. 3. 21.

Springboot Dockerfile & docker-compose.yml

๋ฐฐํฌ ๊ณผ์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ์ด์ „ ๊ธ€ ์ฐธ๊ณ ! https://bluuubery.tistory.com/206

๋ณธ ๊ธ€์€ dockerfile๊ณผ docker-compose.yml ํŒŒ์ผ๊ณผ ์„ค๋ช…๋งŒ ์ ์—ˆ๋‹ค.

Dockerfile

# ์Šคํ…Œ์ด์ง€ 1 (๋นŒ๋”)

# ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€: jdk 11 alpine(๊ฒฝ๋Ÿ‰)
FROM adoptopenjdk/openjdk11:jdk-11.0.10_9-alpine AS builder
# ์ž‘์—… ๊ฒฝ๋กœ ์„ค์ • ๋ฐ ํ”„๋กœ์ ํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ
WORKDIR /app
COPY . .

# ๋นŒ๋“œ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐ ์‹คํ–‰(ํด๋ฆฐ)
RUN chmod +x ./gradlew
RUN ./gradlew clean bootJar

# ์Šคํ…Œ์ด์ง€ 2

# ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€: jdk 11 alpine(๊ฒฝ๋Ÿ‰)
FROM adoptopenjdk/openjdk11:jdk-11.0.10_9-alpine
# ๋นŒ๋” ์Šคํ…Œ์ด์ง€์—์„œ ๋นŒ๋“œํ•œ jar ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ
COPY --from=builder /app/build/libs/*.jar app.jar

# 8080ํฌํŠธ๋กœ ์‹คํ–‰
EXPOSE 8080
ENTRYPOINT ["java", "-jar","/app.jar"]

โœ” ./gradlew๋ฅผ ํ™œ์šฉํ•œ ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋กœ ํฐ ํŠน์ด ์‚ฌํ•ญ์€ ์—†๋‹ค

CMD vs ENTRYPOINT

โœ” ๋‘˜ ๋‹ค ๋นŒ๋“œ ํ›„ ์ปจํ…Œ์ด๋„ˆ ์ตœ์†Œ ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด๋ผ๋Š” ์ ์—์„œ๋Š” ๋™์ผํ•˜๋‹ค

โœ” ENTRYPOINT๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ํ•ญ์ƒ ์‹คํ–‰๋˜๋Š” ๋ฐ˜๋ฉด CMD์˜ ๊ฒฝ์šฐ๋Š” ๋„์ปค ์‹คํ–‰ ์‹œ ๋ช…๋ น์–ด๋กœ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

โœ” ๊ผญ ์‹คํ–‰๋˜์–ด์•ผ๋˜๋Š” ๋ช…๋ น์–ด์˜ ๊ฒฝ์šฐ์—๋Š” ENTRYPOINT๋ฅผ ํ™œ์šฉํ•˜์ž

docker-compose.yml

version: "3.7"

services:
  springboot:
    container_name: springboot
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - "8080:8080"
    environment:
      SERVER_MODE: prod
      AWS_ACCESS_KEY: "${AWS_ACCESS_KEY}"
      AWS_SECRET_KEY: "${AWS_SECRET_KEY}"
      JWT_SECRET_KEY: "${JWT_SECRET_KEY}"

โœ” environment๋ฅผ ํ†ตํ•ด์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค

๋Œ“๊ธ€