Dockerfile ๋ฌธ๋ฒ
FROM node:12-alpine
RUN apk add --no-cache python3 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
๋์ปค ๊ณต์ ๋ฌธ์์ ๊ฐ๋ณด๋ฉด ์ ํํ ์ ์ ์๋ค.
ํ์์ Dockerfile .
# Comment
INSTRUCTION arguments
- ๋ช
๋ น์ด๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์. ํ์ง๋ง ์ธ์์ ๋ ์ฝ๊ฒ ๊ตฌ๋ณํ๊ธฐ ์ํด ๋๋ฌธ์๋ก ์ง์ ํ๋ ํธ์.
- Docker ๋ช
๋ น์ Dockerfile ์์๋๋ก ์คํํจ.
- ๋์ปค ํ์ผ์ from ๋ช
๋ น์ผ๋ก ์์ํด์ผํจ.
- from ๋ช
๋ น์ ๋น๋ํ ์์ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํจ.
- from ์ ๋์ปค ํ์ผ์ from ํ์ ์ฌ์ฉ๋๋ ์ธ์๋ฅผ ์ ์ธํ๋ ํ๋ ์ด์์ arg ๋ช
๋ น์ด ์์๋ง ์ฌ ์ ์์.
- ๋์ปค๋ #๋ก ์์ํ๋ ํ์ ์ฃผ์์ผ๋ก ์ฒ๋ฆฌํจ.
์ฃผ์ ๋ช
๋ น
FROM
- ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ง์ ๋ช
๋ น
- Dockerfile์์ ๋ฐ๋์ ์์ด์ผ ํ๋ ๋ช
๋ น์ด์.
- ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ ๊ทธ ์ถฉ ์ค์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ์ด๋ฏธ์ง์ด๊ณ FROM์ด ์ด ์ด๋ฏธ์ง๋ฅผ ์ง์ ํด์ค.
LABEL
- = ํ์์ผ๋ก ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์ ์๋ ๊ธฐ๋ฅ
- ๋ณดํต ์ ์,๋ฒ์ ,์ค๋ช
,์์ฑ์ผ์ ๋ฑ์ ๊ฐ๊ฐ key = value ํ์์ผ๋ก ์ ๋๋ค.
LABEL maintainer="dev.yohan05@gmail.com"
CMD
- ํด๋น dockerfile ๋ก ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ
์ด๋๋ฅผ ๋ง๋ค์์ ๋, ํด๋น ์ปจํ
์ด๋๊ฐ ์คํ๋ ๋ ๊ฐ์ฅ ๋จผ์ ์คํ๋ ํ๋ก๊ทธ๋จ์ ๊ธฐ์
- CMD๋ ํ๋์ dockerfile์์ ํ ๊ฐ์ง๋ง ์ค์ ๋๋ฉฐ, ๋ง์ฝ cmd ์ค์ ์ด ์ฌ๋ฌ๊ฐ์ผ ๊ฒฝ์ฐ, ๋งจ ๋ง์ง๋ง์ ์ค์ ๋ CMD ์ค์ ๋ง ์ ์ฉ๋จ.
RUN
- ๋์ปค ๋ช
๋ น์ด์ run ์๋ ๋ค๋ฅธ ๋ช
๋ น์ด
- ์ด ํญ๋ชฉ์ ๊ธฐ๋ฅ์ ์๊ธฐ ์ํด์๋ docker ์ด๋ฏธ์ง์ ๊ตฌ์ฑ ๋ฐฉ์์ ์์์ผํจ.
- docker๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑ ํ ๋, ํ๋์ layer๋ง ์ฐ๋ ๊ฒ์ด ์๋๋ผ, ์ฌ๋ฌ ๋จ๊ณ์ layer๋ฅผ ์ธต์ธต์ด ์์์ผํจ.
- RUN ๋ช
๋ น์ ์ด๋ฏธ์ง ์์ฑ์, ์ผ์ข
์ layer์ ๋ง๋ค ์ ์๋ ๋จ๊ณ, ๋ณดํต ๋ฒ ์ด์ค ์ด๋ฏธ์ง์ ํจํค์ง๋ฅผ ์ถ๊ฐ๋ก ์ค์นํ์ฌ ์๋ก์ด์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํจ.
...
RUN apt-get update
RUN apt-get install -y apache2
# ์ด๋ฐ ์์ผ๋ก ๋ง์ด๋ค.
ENTRYPOINT
๋ง์ฝ dockerfile ๋ก ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ๋ค์, ์ปจํ
์ด๋๋ฅผ docker run ์ผ๋ก ์์ฑ/์คํํ๋ฉด์ ๋ช
๋ น๋ฌธ์ ๊ฐ์ด ์ ์ผ๋ฉฐ ์คํํ๋ค๋ฉด, ๊ธฐ์กด ์ด๋ฏธ์ง์ ์๋ CMD ๋ช
๋ น์ด ํฐ๋ฏธ๋ ๋ช
๋ น์ ์์์ง๋ค.
ํ์ง๋ง, ์ด๋ฏธ์ง์ entrypoint ํญ๋ชฉ์ด ์๋ค๋ฉด, docker run ์ผ๋ก ๋ช
๋ น์ ์ฑํํ๋๋ผ๋ entrypoint์ ๋ช
๋ น์ ์ํฅ์ ๋ผ์น์ง ๋ชปํ๊ณ entrypoint์ ๋ช
๋ น ๋ค์ ์ญ ์ธ์๋ก ๋์ด์ ํ๊ฒ ๋๋ค.
EXPOSE
- docker ์ปจํ
์ด๋์ ํน์ ํฌํธ๋ฅผ ์ธ๋ถ์ ์คํํ๋ ์ค์
- docker run -p ์ต์
๊ณผ ์ ์ฌํ๋ค. ์ฐจ์ด์ ์ -p ์ต์
์ ์ปจํ
์ด๋์ ํน์ ํฌํธ๋ฅผ ์ธ๋ถ์ ์คํํ๊ณ , ํด๋น ํฌํธ๋ฅผ ํธ์คํธ pc ์ ํน์ ํฌํธ์ ๋งคํ ์ํค๋ ๊ฒ๊น์ง ์์์ ํด์ฃผ์ง๋ง, expose ๋ ๊ทธ๋ฅ ๋จ์ํ ํฌํธ๋ฅผ ์ด์ด์ฃผ๊ธฐ๋ง ํ๋ค๋ ๊ฒ.
- ๊ฒฐ๊ตญ ๋์ปค ํ์ผ์ expose ๋ก ํฌํธ๋ฅผ ์ด์ด์ค๋ docker run ์ ํ ๋ p ์ต์
์ ์ฐ๊ฒ ๋๋ค.
WORKDIR
- ์ด๋ฏธ์ง ๋ด์์ ํน์ ํด๋๋ก ์ด๋ํ๊ธฐ ์ํด์ ์ฐ๋ ๋ช
๋ น cd ๊ฐ์ ๋๋์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
WORKDIR /usr/app
๋์ปค ํ๊ฒฝ๋ณ์
ํ๊ฒฝ ๋ณ์
ENV PORT 80
EXPOSE $PORT
- ์ด๋์ ํ๊ฒฝ๋ณ์๋ ์ปจํ
์ด๋์ ํ๊ฒฝ๋ณ์.
๋น๋ ์ธ์
์ธ์์ ๊ฒฝ์ฐ Dockerfile์ ํตํด docker build
๋ฅผ ์คํํ ๋ --build-arg
์ต์
์ผ๋ก ์ธ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์. ์ด ๋ฐฉ์์ ์ด๋ฏธ์ง๋ฅผ build ํ ๋ ๋ค๋ฅธ ๊ฐ์ ์ถ๊ฐํ ์ ์์.
run time ํ๊ฒฝ๋ณ์์ ๋ค๋ฅธ ๊ฒ : ์ด์ ํ๊ฒฝ ๋ณ์๋ ๋น๋๋ ์ด๋ฏธ์ง๋ฅผ ์ธ์คํด์คํ ์์ผ ์ปจํ
์ด๋๋ฅผ ์์ฑํ ๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํ ๊ฒ์ด์ง๋ง arg ๋ฐฉ์์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ ํ ๋ ์ ๋ฌํ๋ ๋ฐฉ์.
FROM node:14
ARG DEFAULT_PORT=80 #ARG ์ต์
์ถ๊ฐ
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
ENV PORT $DEFAULT_PORT
EXPOSE $PORT
CMD ["npm", "start"]
- 80๋ฒ ํฌํธ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๊ฒ๋์ง๋ง build๋ฅผ ํ ๋ ์๋์ ๊ฐ์ด ๋์ ์ผ๋ก ๋ณ๊ฒฝํด์ค ์ ์์.
docker build -t node-server:prd --build-arg DEFAULT_PORT 8080 .
- ๋์ปคํ์ผ์ ์์ ์ด ํ์์์ด ์ ์ฐํ ๋ฐฉ์์ผ๋ก ๋ค๋ฅธ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ์ ์๋ค๋ ๊ฒ์.