๋์ปค ๋ฉํฐ์คํ ์ด์ง ๋น๋(Multi-stage Build)๋ ํ๋์ Dockerfile ๋ด์์ ์ฌ๋ฌ๊ฐ์ ๋น๋ ๋จ๊ณ๋ฅผ ์ ์ํ์ฌ, ์ต์ข ์ด๋ฏธ์ง์ ํ์ํ ๋ถ๋ถ๋ง ํฌํจํ๋๋ก ์ค๊ณํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋น๋ ๊ณผ์ ์์ ํ์ํ ๋๊ตฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ต์ข ์ด๋ฏธ์ง์ ํฌํจ์ํค์ง ์์๋ ๋๋ฏ๋ก, ํจ์จ์ ์ด๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ ํต์ ์ธ ๋์ปค ๋น๋ ๋ฐฉ์์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๊ธฐ ์ํ ๋ชจ๋ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ ๋จ์ผ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๊ฒฝ์ฐ, ์ต์ข ์ด๋ฏธ์ง์ ๋ถํ์ํ ๋น๋ ๋๊ตฌ๋ค์ด ํฌํจ๋์ด ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ ๋ณด์ ์ทจ์ฝ์ ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.
๋ฉํฐ์คํ ์ด์ง ๋น๋๋ ์ฌ๋ฌ ๊ฐ์ ๋น๋ ๋จ๊ณ๋ฅผ ์ ์ํ์ฌ, ๊ฐ ๋จ๊ณ์์ ํ์ํ ์์ ์ ์ํํ ํ, ์ต์ข ๋จ๊ณ์์๋ ํ์ํ ์ํฐํฉํธ(์: ๋ฐ์ด๋๋ฆฌ ํ์ผ, ์ปดํ์ผ๋ ์ฝ๋ ๋ฑ)๋ง์ ๊ฐ์ ธ์์ ๊ฒฝ๋์ ์ต์ข ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋น๋ ํ๊ฒฝ๊ณผ ์คํ ํ๊ฒฝ์ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
๋ฉํฐ์คํ ์ด์ง์ ํน์ง ๋ฐ ๋ชฉ์
- ํจ์จ์ฑ
- ๋น๋์ ์คํ์ ์ํ ๋ณ๋์ ์คํ ์ด์ง๋ฅผ ์ ์ํ์ฌ ๋น๋ ์ค๊ฐ์ ์์ฑ๋๋ ๋ถํ์ํ ํ์ผ์ด๋ ์์กด์ฑ์ ์ต์ข ์ด๋ฏธ์ง์์ ์ ์ธํ ์ ์์ต๋๋ค.
- ์ด๋ฏธ์ง ํฌ๊ธฐ ๊ฐ์
- ์ต์ข ์คํ ๋จ๊ณ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ฐ ํ์ํ ํ์ผ๋ง ํฌํจํ๋ฏ๋ก ์ต์ข ์ด๋ฏธ์ง์ ํฌ๊ธฐ๊ฐ ์ค์ด๋ญ๋๋ค.
- ๋ณด์ ๊ฐํ
- ๋น๋ ๋๊ตฌ๋ ์ค๊ฐ ๋จ๊ณ์์ ํ์ํ ํ์ผ์ด ์ต์ข ์ด๋ฏธ์ง์ ํฌํจ๋์ง ์์ผ๋ฏ๋ก ๋ณด์ ์ทจ์ฝ์ ์ ์ค์ผ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์์ฑ ํฅ์
- Dockerfile์ด ๋จ๊ณ๋ณ๋ก ๋ช ํํ ๋ถ๋ฆฌ๋๋ฏ๋ก ๋ ์ฝ๊ธฐ ์ฝ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฉ์ดํฉ๋๋ค.
์ฅ์
- ์ด๋ฏธ์ง ํฌ๊ธฐ ์ต์ํ
- ์ต์ข ์ด๋ฏธ์ง์ ๋น๋ ๋๊ตฌ๊ฐ ํฌํจ๋์ง ์์ ๋ ์๊ณ ๊ฒฝ๋ํ๋ฉ๋๋ค.
- ์:
node:20-alpine
๊ณผ ๊ฐ์ด ๊ฒฝ๋ ์ด๋ฏธ์ง๋ง ํฌํจ ๊ฐ๋ฅ. - ์ต์ข ์ด๋ฏธ์ง๋ ์ต์ํ์ ํ์ผ๋ง ํฌํจํ๋ฏ๋ก ์ ์ฅ์ ๋ฐ ์ ์ก ๋น์ฉ ์ ๊ฐ
- ๋น๋ ํ๊ฒฝ๊ณผ ์คํ ํ๊ฒฝ์ ๋ถ๋ฆฌํ์ฌ ๋ถํ์ํ ์์กด์ฑ์ ์ ๊ฑฐ.
- ๋ณด์ ๊ฐํ
- ๋น๋ ๊ณผ์ ์์ ์ฌ์ฉ๋ ๋ฏผ๊ฐํ ์ ๋ณด(์: ํ๊ฒฝ ๋ณ์, ๋น๋ ๋๊ตฌ ๋ฑ)๊ฐ ์คํ ์ด๋ฏธ์ง์ ํฌํจ๋์ง ์์.
- ๊ฐ๋
์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ
- ๋จ๊ณ๋ณ๋ก ๋น๋ ๊ณผ์ ์ ๋ช ํํ ์ ์ํ๋ฏ๋ก Dockerfile์ด ๋ ์ดํดํ๊ธฐ ์ฌ์์ง.
- ๋น๋์ ์คํ ํ๊ฒฝ์ ๋ถ๋ฆฌํ์ฌ ๊ฐ๊ฐ์ ๋จ๊ณ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ.
- ๋ค์ํ ํ๊ฒฝ ์ง์ ๋ฐ ์ฑ๋ฅ ์ต์ ํ
- ๋์ผํ Dockerfile๋ก ๊ฐ๋ฐ, ํ ์คํธ, ํ๋ก๋์ ํ๊ฒฝ์ ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑ ๊ฐ๋ฅ.
- ์ค๊ฐ ๋น๋ ๋จ๊ณ์์ ์บ์ฑ์ ํ์ฉํ ์ ์์ด ๋น๋ ์๋ ํฅ์.
์ฌ์ฉ ์ ์ฃผ์์
- ์บ์ ํ์ฉ
- ๋น๋ ๊ณผ์ ์์ ๋์ผํ ๋ช ๋ น์ด ์์๋ฅผ ์ ์งํ์ฌ ์บ์๋ฅผ ์ต๋ํ ํ์ฉํด์ผ ํจ์จ์ ์ ๋๋ค.
- ์ต์ํ๋ ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ ํ
- ์ต์ข
์คํ
์ด์ง์์ ๋ถํ์ํ ์ฉ๋์ ์ค์ด๊ธฐ ์ํด
alpine
๊ฐ์ ๊ฒฝ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์ต์ข
์คํ
์ด์ง์์ ๋ถํ์ํ ์ฉ๋์ ์ค์ด๊ธฐ ์ํด
- ์ค๊ฐ ํ์ผ ์ ๊ฑฐ
- ๋น๋ ๋จ๊ณ์์ ์์ฑ๋ ๋ถํ์ํ ํ์ผ์ด ์ต์ข ์ด๋ฏธ์ง๋ก ๋์ด๊ฐ์ง ์๋๋ก ๊ด๋ฆฌ.
๋ฉํฐ์คํ ์ด์ง ๋น๋ ์์
๋์ ๋ฐฉ์
- ์ฌ๋ฌ ์คํ
์ด์ง ์ ์
FROM
๋ช ๋ น์ด๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ์ฌ ๊ฐ ์คํ ์ด์ง๋ฅผ ์ ์ํฉ๋๋ค.- ์ด์ ๋จ๊ณ์์ ์์ฑ๋ ํ์ผ์ ๋ค์ ๋จ๊ณ๋ก ๋ณต์ฌ(
COPY
)ํ์ฌ ์ฌ์ฌ์ฉํฉ๋๋ค.
- ์ต์ข
๋จ๊ณ ์ ํ
- ๋ง์ง๋ง ์คํ ์ด์ง์์ ํ์ํ ์ํฐํฉํธ(์: ์คํ ํ์ผ, ์ค์ ํ์ผ)๋ง ํฌํจํ์ฌ ์ต์ข ์ด๋ฏธ์ง๋ฅผ ๋ง๋ญ๋๋ค.
Go ์ ํ๋ฆฌ์ผ์ด์ ์์
# 1. ๋น๋ ์คํ
์ด์ง
FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
# 2. ์คํ ์คํ
์ด์ง
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
builder
์คํ ์ด์ง:- Go ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๋ ๋ฐ ํ์ํ Go ๋ฐํ์๊ณผ ๋น๋ ๋๊ตฌ๋ฅผ ํฌํจํฉ๋๋ค.
- ๊ฒฐ๊ณผ๋ฌผ์ธ ์คํ ํ์ผ(
myapp
)๋ง ์์ฑ๋ฉ๋๋ค.
- ์ต์ข
์คํ
์ด์ง:
- ๋น๋ ๊ฒฐ๊ณผ๋ฌผ(
myapp
)๋ง ํฌํจํ๊ณ , Go ๋ฐํ์์ด๋ ๋น๋ ๋๊ตฌ๋ ์ ์ธํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ํํฉ๋๋ค.
- ๋น๋ ๊ฒฐ๊ณผ๋ฌผ(
Node.js ์ ํ๋ฆฌ์ผ์ด์ ์์
# 1. ๋น๋ ์คํ
์ด์ง
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 2. ์คํ ์คํ
์ด์ง
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
builder
์คํ ์ด์ง:- Node.js์ npm์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํฉ๋๋ค.
- ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์
/app/dist
๋๋ ํ ๋ฆฌ์ ์์ฑ๋ฉ๋๋ค.
- ์ต์ข
์คํ
์ด์ง:
nginx
๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ํ์ผ์ ์๋นํฉ๋๋ค.- Node.js์ npm์ ์ต์ข ์ด๋ฏธ์ง์ ํฌํจ๋์ง ์์ต๋๋ค.
Java ์ ํ๋ฆฌ์ผ์ด์ ์์
# 1. ๋น๋ ์คํ
์ด์ง
FROM maven:3.9 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package
# 2. ์คํ ์คํ
์ด์ง
FROM openjdk:17
WORKDIR /app
COPY --from=builder /app/target/myapp.jar .
CMD ["java", "-jar", "myapp.jar"]
builder
์คํ ์ด์ง:- Maven์ ์ฌ์ฉํ์ฌ Java ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋ํ๊ณ
.jar
ํ์ผ์ ์์ฑํฉ๋๋ค.
- Maven์ ์ฌ์ฉํ์ฌ Java ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋ํ๊ณ
- ์ต์ข
์คํ
์ด์ง:
openjdk
์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ.jar
ํ์ผ๋ง ์คํํฉ๋๋ค.
๋์ปค ๋ฉํฐ์คํ ์ด์ง ๋น๋๋ฅผ ํ์ฉํ์ฌ ํจ์จ์ ์ด๊ณ ๊ฒฝ๋์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋น๋์ ์คํ ํ๊ฒฝ์ ๋ช ํํ ๋ถ๋ฆฌํ๊ณ , ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ฉฐ, ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค. ๋น๋ ๊ณผ์ ์ด ๋ณต์กํด์ง ์ ์์ผ๋ฏ๋ก, ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์ ์ ํ ํ์ฉํด์ผ ํฉ๋๋ค.
'note' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spark ์กฐ์ธ(join) ์ต์ ํ (0) | 2024.11.26 |
---|---|
Kubernetes์ Probe ์์๋ณด๊ธฐ (0) | 2024.11.25 |
Apache Spark RDD(Resilient Distributed Dataset) (0) | 2024.11.22 |
Metrics Monitoring and Alerting system (๋ฒ์ญ) (0) | 2024.11.20 |
Distributed Job Scheduler system design (0) | 2024.11.14 |