[Docker] ์ด๋ฏธ์ง€ Build

๐Ÿ” Docker Build ๋ž€?

Docker Build ๋Š” ์„œ๋น„์Šค๋ฅผ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์šด์˜์ฒด์ œ ๋ฐ ํ•„์š”ํ•œ ์˜์กด์„ฑ๊ณผ ์„ค์ •, ์‹คํ–‰ ํŒŒ์ผ๋“ฑ์„ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ ํŒจํ‚ค์ง•ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ Build ๋Š” Dockerfile ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜ํ–‰๋˜๋ฉฐ, Dockerfile ์—๋Š” ์ด๋ฏธ์ง€ ์ƒ์„ฑ์— ํ•„์š”ํ•œ ๋ช…๋ น์–ด๋“ค์ด ์žˆ์œผ๋ฉฐ, ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

โœ… Build ๋ช…๋ น์–ด

# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ์œ„์น˜์— Dockerfile ๊ฐ€ ์žˆ๊ณ  ํ˜„์žฌ ์œ„์น˜์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ
docker build -t <๋งŒ๋“ค ์ด๋ฏธ์ง€ ์ด๋ฆ„>:<๋งŒ๋“ค ์ด๋ฏธ์ง€ ํƒœ๊ทธ> .
# Dockerfile ์ด ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์žˆ์„ ๊ฒฝ์šฐ
docker build -t <๋งŒ๋“ค ์ด๋ฏธ์ง€ ์ด๋ฆ„>:<๋งŒ๋“ค ์ด๋ฏธ์ง€ ํƒœ๊ทธ> -f <ํŒŒ์ผ ๊ฒฝ๋กœ> <๋นŒ๋“œ ์ปจํ…์ŠคํŠธ ๊ฒฝ๋กœ>
# Dockerfile ๋ช…์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ์šฐ
docker build -t <๋งŒ๋“ค ์ด๋ฏธ์ง€ ์ด๋ฆ„>:<๋งŒ๋“ค ์ด๋ฏธ์ง€ ํƒœ๊ทธ> -f <ํŒŒ์ผ ๊ฒฝ๋กœ/ํŒŒ์ผ ์ด๋ฆ„> <๋นŒ๋“œ ์ปจํ…์ŠคํŠธ ๊ฒฝ๋กœ>

โœ… ์ด๋ฏธ์ง€์ง€ ๋ ˆ์ด์–ด

Docker ๋Š” Build ์‹œ Dockerfile ์˜ ๋ฒ ์ด์Šค๊ฐ€ ๋˜๋Š” ์ด๋ฏธ์ง€๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๊ฐ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ์ด์•ผ๊ธฐ ํ•ฉ๋‹ˆ๋‹ค.

๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋ช…๋ น์–ด๋“ค์ด ๊ฐ™๊ณ  ์ค‘๊ฐ„ ๋‹จ๊ณ„ ๋ถ€ํ„ฐ ๋‹ฌ๋ผ์ง€๋Š” Dockerfile ์˜ ๊ฒฝ์šฐ ๋นŒ๋“œ์‹œ ๊ฐ๊ฐ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ๊ธฐ์กด์— ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ด ๋นŒ๋“œ์‹œ๊ฐ„๊ณผ ์ €์žฅ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… Dockerfile

node:18 ์ด๋ผ๋Š” ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์‹œ์ž‘์œผ๋กœ ๊ฐ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ• ๋•Œ๋งˆ๋‹ค ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

FROM node:18                 # Node.js ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€ ์‚ฌ์šฉ
WORKDIR /app # ์•ฑ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
COPY package*.json ./ # package.json ๋ณต์‚ฌ
RUN npm install # ์˜์กด์„ฑ ์„ค์น˜
COPY . . # ์•ฑ ์†Œ์Šค ๋ณต์‚ฌ
EXPOSE 3000 # ํฌํŠธ ๊ฐœ๋ฐฉ
CMD ["npm", "start"] # ์•ฑ ์‹คํ–‰

์•„๋ž˜ Dockerfile ์€ 5๋ผ์ธ๊นŒ์ง€๋Š” ์œ„ Dockerfile ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ์‹œ ์œ„์—์„œ 5๋ผ์ธ์— ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

FROM node:18                 # Node.js ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€ ์‚ฌ์šฉ
WORKDIR /app # ์•ฑ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
COPY package*.json ./ # package.json ๋ณต์‚ฌ
RUN npm install # ์˜์กด์„ฑ ์„ค์น˜
COPY . . # ์•ฑ ์†Œ์Šค ๋ณต์‚ฌ
EXPOSE 5000 # ํฌํŠธ ๊ฐœ๋ฐฉ
CMD ["npm", "run", "dev"] # ์•ฑ ์‹คํ–‰

โœ… ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ

๋นŒ๋“œ์™€ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค

# Build stage
FROM node:18 as builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

# Production stage
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
Share