3. dockerfile-syntax

Dockerfile syntax ์ •๋ฆฌ

All about Dockerfile syntax

  • FROM

    • ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์ง€์ •

  • RUN

    • ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์‹คํ–‰ํ•  ์‰˜ ๋ช…๋ น์–ด๋ฅผ ์ง€์ •ํ•˜์—ฌ ํŒจํ‚ค์ง€ ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์„ค์ •

  • WORKDIR

    • ๋ช…๋ น์ด ์‹คํ–‰๋  ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •

    • ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด ์ƒ์„ฑ๋จ

  • COPY

    • ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€๋กœ ๋ณต์‚ฌ

  • ADD

    • COPY์™€ ์œ ์‚ฌ. ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ ์ œ๊ณต

    • ๋กœ์ปฌ ํŒŒ์ผ์ด๋‚˜ URL ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์••์ถ• ํŒŒ์ผ ์ž๋™์œผ๋กœ ํ•ด์ œํ•˜๊ณ  ์›๊ฒฉ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅ

  • CMD

    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์„ ์„ค์ •

    • ๋„์ปค ํŒŒ์ผ์—์„œ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

    • ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ CMD ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋งˆ์ง€๋ง‰ CMD๋งŒ ์ ์šฉ๋จ

  • ENTRYPOINT

    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ์‹คํ–‰ ํŒŒ์ผ ์„ค์ •

    • CMD์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ENTRYPOINT๋Š” ํ•ญ์ƒ ์‹คํ–‰๋จ

    • CMD๋Š” ENTRYPOINT์˜ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉ๋จ

  • ENV

    • ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •

  • ARG

    • ๋นŒ๋“œ ์ค‘์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • EXPOSE

    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋…ธ์ถœํ•  ํฌํŠธ ์„ค์ •

  • VOLUME

    • ํ˜ธ์ŠคํŠธ ๋จธ์‹ ๊ณผ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

  • USER

    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋  ์‚ฌ์šฉ์ž๋ฅผ ์„ค์ •

  • HEALTHCHECK

    • ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค์ •

  • LABEL

    • ์ด๋ฏธ์ง€์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€

    • LABEL version="1.0"

  • SHELL

    • ๊ธฐ๋ณธ ์‰˜ ์ง€์ •

    • SHELL ["/bin/bash", "-c"]

  • STOPSIGNAL

    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๋ณด๋‚ด์งˆ ์‹œ๊ทธ๋„์„ ์ง€์ •

    • STOPSIGNAL SIGTERM

sample

Node.js Dockerfile sample

FROM node:20.11-alpine

RUN apk update && apk add bash sudo vim

WORKDIR /app

COPY . .

RUN npm cache clean --force && rm -rf node_modules && npm install

EXPOSE 3000

CMD ["npm", "run", "start"]

Python&Django Dockerfile sample

FROM python:3.11

ENV PYTHONUNBUFFERED=1

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

ENTRYPOINT ["uvicorn", "myproject.asgi:application", "--host", "0.0.0.0", "--port", "8000"]

Multistaging nodejs sample

FROM node:14 AS development

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm", "run", "dev"]

FROM node:14 AS production

WORKDIR /app

COPY package*.json ./
RUN npm install --production

COPY . .

RUN npm run build

CMD ["npm", "start"]

Build Docker image multistaging

docker build --target development --t node:dev .
docker build --target production --t node:dev .

docker compose

docker-compose up [options] [SERVICE...]
docker compose up

docker compose up -d(--detach)
- ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋“œ๋กœ ์‹คํ–‰

docker compose up --force-recreate
- ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์–ด๋„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ์ƒ์„ฑ

docker compose images

docker compose down
docker compose build
docker compose start

docker compose stop
docker compose stop -t 20 # stop with a timeout

docker compose restart

docker compose rf
docker compose rf -f

docker compose logs
docker compose logs -f # follow log output

docker compose exec [my-service] bash
docker compose ps

Last updated