๊ฐ๋ฐ์ผ์ง
[๋์ปค] ๋์ปค์ ๋ ์ด์ด, ๋ฉํฐ์คํ ์ด์ง ๋น๋ ๋? ๋ณธ๋ฌธ
[๋์ปค] ๋์ปค์ ๋ ์ด์ด, ๋ฉํฐ์คํ ์ด์ง ๋น๋ ๋?
doublejune 2025. 4. 25. 16:35
์ฐ์ ๋ฉํฐ ์คํ ์ด์ง ๋น๋๋,
1. ๋ฉํฐ์คํ ์ด์ง ๋น๋
Docker์์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋ ์ต์ข ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ ๊ธฐ์ ์ด๋ค.
์ฌ๋ฌ ๋จ๊ณ์ ๋น๋๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ ์ต์ข ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ค.
์ต์ข ์ด๋ฏธ์ง์๋ ์ฑ ์คํ์ ์ต์ํ์ ๊ตฌ์ฑ๋ง ์์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค!
์ด ์ฌ์ง์ด ๊ฐ๋ ์ ์ ์ค๋ช ํ๊ณ ์๋ค.
๋์ปค๋ ๊ฐ ๋ช ๋ น์ด(FROM, COPY, RUN ๋ฑ)๋ง๋ค ๋ ์ด์ด๋ก ์คํ๋๋ค.
๊ทธ๋ฆฌ๊ณ FROM ๋ช ๋ น์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์คํ ์ด์ง๊ฐ ๋๋์ด์ง๋ค.
์คํ ์ด์ง
: ํ๋์ ๋ ๋ฆฝ๋ ์ด๋ฏธ์ง ํ๊ฒฝ.
๋์ปคํ์ผ์์ FROM ๋ช ๋ น์ด๊ฐ 3๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด,
๋ง์ง๋ง FROM ๋ช ๋ น์ด๊ฐ ํฌํจ๋ ์คํ ์ด์ง๊ฐ ์ต์ข ์ด๋ฏธ์ง๊ฐ ๋๋ค.
์๋ฅผ๋ค์ด,
#1.๋น๋ ๋จ๊ณ
FROM eclipse-temurin:21-jdk-alpine AS builder
WORKDIR /back
COPY gradlew .
COPY gradle gradle
COPY build.gradle settings.gradle ./
RUN ./gradlew dependencies --no-daemon
COPY src src
RUN ./gradlew clean bootJar --no-daemon
#2.JAR ๋ ์ด์ด ์ถ์ถ ๋จ๊ณ
FROM eclipse-temurin:21-jre-alpine AS extractor
WORKDIR /back
COPY --from=builder /back/build/libs/weddy-0.0.1-SNAPSHOT.jar weddy.jar
RUN java -Djarmode=layertools -jar weddy.jar extract
#3.์คํ ๋จ๊ณ
FROM eclipse-temurin:21-jre-alpine
WORKDIR /back
COPY --from=extractor /back/dependencies/ ./
COPY --from=extractor /back/spring-boot-loader/ ./
COPY --from=extractor /back/snapshot-dependencies/ ./
COPY --from=extractor /back/application/ ./
# ๋์ปค ์ปจํ
์ด๋๊ฐ 8080ํฌํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์์ ์ ์ธ
EXPOSE 8080
# ๋์ปค ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ์คํ๋ ๊ณ ์ ๋ช
๋ น์ด
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "org.springframework.boot.loader.launch.JarLauncher"]
์์ ์ฝ๋์์
1๋ฒ์งธ ์คํ ์ด์ง์ 2๋ฒ์งธ ์คํ ์ด์ง์ ๊ฒฐ๊ณผ๋ฌผ๋ค(jarํ์ผ๋ค)์ ์คํ ์ด์ง 3์์ ์ฌ์ฉํด ์ต์ข ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ๋ค.
1๋ฒ์งธ, 2๋ฒ์งธ ์คํ ์ด์ง์์ ์๊ธฐ๋ ๋ถ์ฐ๋ฌผ(weddy.jar ํ์ผ)์ด ์ต์ข ์ด๋ฏธ์ง์์๋ ํ์ ์๋ค.
์ด๋ฅผ ํตํด,
- ์ด๋ฏธ์ง์ ๊ฒฝ๋ํ
- ๋น์ฉ ์ ๊ฐ: ํฌ๊ธฐ ์ถ์๋ก ์ธํด ์ด์ ๋น์ฉ ๊ฐ์.
- ๋ณด์ ๊ฐํ : ๋ถํ์ํ ์ข ์์ฑ, ๋ถ์ฐ๋ฌผ์ด ์ ๊ฑฐ๋์ด ๋ณด์ ์ทจ์ฝ์ ๊ฐ์.
์ ์ฅ์ ์ ์ป์ ์ ์๋ค.
2. ๋ ์ด์ด
Docker ์ด๋ฏธ์ง๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ ํ๋ฆฟ ์ญํ ์ ํ๋ฉฐ, ์ด ์ด๋ฏธ์ง๋ ์ฌ๋ฌ๊ฐ์ ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋์ด์๋ค.
์ด ๋ ์ด์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ผ๊ณ ๋ ํ๋ฉฐ, ์ด๋ฏธ์ง์ ๋ณ๊ฒฝ์ฌํญ(์ถ๊ฐ, ์ญ์ ๋ฑ)์ด ํฌํจ๋์ด์๋ค.
๋ ์ด์ด๋
- ๋ถ๋ณ์ฑ : ํ ๋ฒ ์์ฑ๋ ๋ ์ด์ด๋ ๋ณ๊ฒฝ๋ ์ ์๋ค. ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ๋ค์ ์์ฑ๋๋ค.
- ์บ์ฑ: Docker๋ ๋ ์ด์ด๋ฅผ ์บ์ฑํ์ฌ ์ด๋ฏธ ๋น๋๋ ๋ ์ด์ด๋ฅผ ์ฌ์ฌ์ฉํ๋ค.
- ๊ณต์ ์ฑ: ๋์ผํ ๋ ์ด์ด๋ ์ฌ๋ฌ ์ด๋ฏธ์ง ๊ฐ์ ๊ณต์ ๋ ์ ์๋ค.
์ ํน์ง์ ๊ฐ์ง๋ค.
์ฐธ๊ณ
- https://hanyunseong-log.dev/post/what-is-docker-multi-stage-build
hanyunseong-log
hanyunseong-log
hanyunseong-log.dev