Dockerfile์ ์์ฑํ๊ณ , ์ด๋ฅผ ํตํด Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ ๋ฐ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
Docker๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋ํํ์ฌ ์ผ๊ด๋ ํ๊ฒฝ์์ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค.
Dockerfile์ ์ด๋ฌํ ์ปจํ ์ด๋๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ธฐ ์ํ ์ค์ ํ์ผ๋ก, ํจ์จ์ ์ด๊ณ ์ผ๊ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ์์ ์ ๋๋ค. ์ด ๊ธ์์๋ Dockerfile์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ์ค์ ์์ ๊น์ง ๋จ๊ณ๋ณ๋ก ์์ธํ ์ค๋ช ๋๋ฆด ํ ๋, ๋ฐ๋ผ์ค์๋ฉด ์ฝ๊ฒ ์ดํดํ์ค ์ ์์ ๊ฑฐ์์!
Dockerfile์ด๋?
Dockerfile์ Docker ์ด๋ฏธ์ง๋ฅผ ์๋์ผ๋ก ๋น๋ํ๊ธฐ ์ํ ๋ช ๋ น์ด๋ค์ด ๋ชจ์ฌ ์๋ ํ ์คํธ ํ์ผ์ ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ธฐ ์ํ ํ๊ฒฝ์ ์ฝ๋๋ก ์ ์ํ ์ ์์ผ๋ฉฐ, ๋ฐ๋ณต ๊ฐ๋ฅํ๊ณ ์ผ๊ด๋ ์ด๋ฏธ์ง ์์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
Dockerfile์ ์์ฑํ๋ฉด ๋์ผํ ํ๊ฒฝ์ ์์ฝ๊ฒ ์ฌํํ ์ ์์ด ๊ฐ๋ฐ, ํ ์คํธ, ๋ฐฐํฌ ๊ณผ์ ์์ ํฐ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
Dockerfile์ ์ฃผ์ ์ญํ
- ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ง์ : ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ ๊ธฐ๋ณธ ํ๊ฒฝ ์ค์
- ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ๋ณต์ฌ: ์์ค ์ฝ๋๋ฅผ ์ด๋ฏธ์ง ์์ผ๋ก ๋ณต์ฌ
- ์์กด์ฑ ์ค์น ๋ฐ ๋น๋: ํ์ํ ํจํค์ง ์ค์น ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋
- ํ๊ฒฝ ๋ณ์ ์ค์ : ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ํ์ํ ํ๊ฒฝ ๋ณ์ ์ ์
- ์คํ ๋ช ๋ น์ด ์ค์ : ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ์คํํ ๋ช ๋ น์ด ์ง์
Dockerfile ์์ฑํ๊ธฐ
์ด์ ์ค์ ๋ก Dockerfile์ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค. ์์ ๋ก Next.js ์ ํ๋ฆฌ์ผ์ด์ ์ Docker ์ปจํ ์ด๋๋ก ํจํค์งํ๋ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ ํ
Docker ์ด๋ฏธ์ง๋ ์ฌ๋ฌ ๊ฐ์ ๋ ์ด์ด(Layer)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๊ฐ ๋ ์ด์ด๋ ์ด์ ๋ ์ด์ด ์์ ์์ด๋ฉฐ, ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ์ ์คํ๊ฒ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
# Node.js ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ง์
FROM node:20.15.1
- FROM: ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ๋ ๋ช ๋ น์ด์ ๋๋ค. ์ฌ๊ธฐ์๋ Node.js ๋ฒ์ 20.15.1์ ์ฌ์ฉํฉ๋๋ค.
- node:20.15.1: Node.js ๊ณต์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฉฐ, ํน์ ๋ฒ์ ์ ๋ช ์ํ์ฌ ์ผ๊ด๋ ํ๊ฒฝ์ ๋ณด์ฅํฉ๋๋ค.
2. ์์ค ์ฝ๋ ๋ณต์ฌ
์ ํ๋ฆฌ์ผ์ด์ ์ ์์ค ์ฝ๋๋ฅผ ์ด๋ฏธ์ง ์์ผ๋ก ๋ณต์ฌํฉ๋๋ค.
# ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ /app ๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌ
COPY . /app
- COPY: ํธ์คํธ ์์คํ ์ ํ์ผ์ ์ด๋ฏธ์ง ์์ผ๋ก ๋ณต์ฌํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ ๋ณต์ฌํ ์์ค ๊ฒฝ๋ก, ๋ ๋ฒ์งธ ์ธ์๋ ๋ณต์ฌํ ๋ชฉ์ ์ง ๊ฒฝ๋ก์ ๋๋ค.
- .: ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ์๋ฏธํ๋ฉฐ, Dockerfile์ด ์์นํ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ ๋ณต์ฌํฉ๋๋ค.
- /app: ์ด๋ฏธ์ง ๋ด๋ถ์ /app ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ๋ณต์ฌํฉ๋๋ค.
3. ์์ ๋๋ ํ ๋ฆฌ ์ค์
๋ณต์ฌํ ์์ค ์ฝ๋๊ฐ ์์นํ ๋๋ ํ ๋ฆฌ๋ก ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
# ์์
๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /app
- WORKDIR: ์ดํ์ ๋ชจ๋ ๋ช ๋ น์ด๋ค์ด ์คํ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ /app์ผ๋ก ์ค์ ํ์ฌ ๋ณต์ฌํ ์์ค ์ฝ๋๊ฐ ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.
4. ์์กด์ฑ ์ค์น ๋ฐ ๋น๋
์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ํ์ํ ์์กด์ฑ์ ์ค์นํ๊ณ ๋น๋ํฉ๋๋ค.
# ์์กด์ฑ ์ค์น ๋ฐ ๋น๋
RUN npm ci && npm run build
- RUN: ์ด๋ฏธ์ง ์์์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
- npm ci: package-lock.json์ ๊ธฐ๋ฐ์ผ๋ก ์ ํํ ์์กด์ฑ์ ์ค์นํฉ๋๋ค. npm install๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ์ผ๊ด๋ ์ค์น๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- npm run build: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํฉ๋๋ค. Next.js ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, ์ ์ ํ์ผ ์์ฑ ๋ฐ ์ต์ ํ๋ฅผ ์ํํฉ๋๋ค.
5. ํ๊ฒฝ ๋ณ์ ์ค์
์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ํ์ํ ํ๊ฒฝ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค.
# ํ๊ฒฝ ๋ณ์ ์ ์
ENV PORT=3000
- ENV: ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉํ ํฌํธ๋ฅผ 3000์ผ๋ก ์ค์ ํฉ๋๋ค.
- ์ฌ๋ฌ ๊ฐ์ ํ๊ฒฝ ๋ณ์๋ฅผ ํ ๋ฒ์ ์ค์ ํ ์๋ ์์ต๋๋ค:
ENV PORT=3000 \
NODE_ENV=production
6. ์ ํ๋ฆฌ์ผ์ด์ ์คํ ๋ช ๋ น์ด ์ค์
์ปจํ ์ด๋๊ฐ ์์๋ ๋ ์คํํ ๋ช ๋ น์ด๋ฅผ ์ง์ ํฉ๋๋ค.
# ์ ํ๋ฆฌ์ผ์ด์
์คํ
ENTRYPOINT ["npm", "run", "start"]
- ENTRYPOINT: ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ์คํํ ๋ช ๋ น์ด๋ฅผ ์ค์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ npm run start ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํฉ๋๋ค.
- CMD์์ ์ฐจ์ด์ :
- ENTRYPOINT๋ ์ปจํ ์ด๋๊ฐ ์คํ๋ ๋ ํญ์ ์คํ๋๋ ๋ช ๋ น์ด๋ฅผ ์ค์ ํ๋ฉฐ, CMD๋ ๊ธฐ๋ณธ ์ธ์๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ENTRYPOINT๋ ๋ ๊ฐ๋ ฅํ ๋ช ๋ น์ด ์คํ ์ค์ ์ ์ ๊ณตํฉ๋๋ค.
์ต์ข Dockerfile
์์ ๋ชจ๋ ๋จ๊ณ๋ฅผ ์ข ํฉํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ Dockerfile์ด ์์ฑ๋ฉ๋๋ค.
# Node ์ค์น (๋ฒ ์ด์ค ์ด๋ฏธ์ง)
FROM node:20.15.1
# ์์ค์ฝ๋ ๋ณต์ฌ
COPY . /app
# ์์
๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /app
# ์์กด์ฑ ์ค์น ๋ฐ ๋น๋
RUN npm ci && npm run build
# ํ๊ฒฝ ๋ณ์ ์ ์
ENV PORT=3000
# ์ ํ๋ฆฌ์ผ์ด์
์คํ
ENTRYPOINT ["npm", "run", "start"]
.dockerignore ์ค์
Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋, ๋ถํ์ํ ํ์ผ์ด ํฌํจ๋์ง ์๋๋ก .dockerignore ํ์ผ์ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๋ฅผ ํตํด ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
.dockerignore ์์
node_modules
dist
*.log
- node_modules: ํธ์คํธ ํ๊ฒฝ์ ์์กด์ฑ ํ์ผ๋ค์ด ํฌํจ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ธํฉ๋๋ค. ์ปจํ ์ด๋ ๋ด๋ถ์์ ์์กด์ฑ์ ๋ค์ ์ค์นํ๋๋ก ํ์ฌ ์ผ๊ด์ฑ์ ์ ์งํฉ๋๋ค.
- dist: ๋น๋๋ ํ์ผ๋ค์ ์ ์ธํฉ๋๋ค. ํ์ ์ Dockerfile ๋ด์์ ๋น๋๋ฅผ ์ํํ๋ฏ๋ก, ๋ณ๋๋ก ํฌํจํ ํ์๊ฐ ์์ต๋๋ค.
- *.log: ๋ก๊ทธ ํ์ผ๋ค์ ์ ์ธํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
Dockerfile์ ์์ฑํ๊ณ ์ด๋ฏธ์ง๋ฅผ ๋น๋ ๋ฐ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ์ฒ์์๋ ๋ณต์กํ๊ฒ ๋๊ปด์ง ์ ์์ง๋ง, ํ ๋ฒ ์ต์ํด์ง๋ฉด ๋งค์ฐ ๊ฐ๋ ฅํ ๋๊ตฌ๊ฐ ๋ฉ๋๋ค. ์ด๋ฒ ๊ธ์์๋ Dockerfile์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ์์ฑ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์ดํด๋ณด์์ต๋๋ค.
'โ๏ธ Cloud Native > ๐ณ Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] Docker Container ์คํํ๊ธฐ: ๋จ๊ณ๋ณ ๊ฐ์ด๋ (0) | 2025.01.15 |
---|---|
[Docker] Docker ์ด๋ฏธ์ง ๋น๋ & ๋ฐฐํฌ (0) | 2025.01.10 |
[Docker] ์ด๋ฏธ์ง ๊ด๋ฆฌํ๊ธฐ: Docker ์ด๋ฏธ์ง ํจ์จ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ (0) | 2025.01.10 |
[Docker] Container์ ์ด๋ฏธ์ง (0) | 2025.01.10 |
[Docker] Docker Volume ํ์ฉ (0) | 2024.11.16 |