Dockerfile

Docker Format

# Comment
INSTRUCTION arguments
  • ๋ช…๋ น์–ด๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ด€๋ก€๋Š” ์ธ์ˆ˜์™€ ๋” ์‰ฝ๊ฒŒ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๋ฌธ์ž๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • Dockerfile๋Š” ๋ฌด์กฐ๊ฑด FROM๋ช…๋ น์–ด๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

  • ์ด๊ฒƒ์€ parser directives, comments, ์™€ ์ „์—ญ ARGs ๋’ค์— ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

  • FROM ๋ช…๋ น์–ด๋Š” ๋นŒ๋”ฉํ•˜๋ ค๊ณ  ํ•˜๋Š” Parent Image๋ฅผ ์ง€์ •ํ•œ๋‹ค

  • FROM ์•ž์—๋Š” Dockerfile ์˜ FROM ํ–‰์— ์‚ฌ์šฉํ•˜๋Š” ์ธ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ARG ๋ช…๋ น์–ด๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

  • Docker๋Š” #์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ค„์ด Parser directives์ด ์•„๋‹ˆ๋ฉด ์ฃผ์„์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

# Comment 
RUN echo 'we are running some # of cool things'

Parser directives

Parser directives์€ ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ Dockerfile์˜ ํ•˜์œ„ ๋ผ์ธ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ์ค€๋‹ค.

Parser directives์€ # directive=value ํ˜•์‹์˜ ํŠน์ˆ˜ ์œ ํ˜•์˜ ์ฃผ์„์œผ๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์ง€์‹œ๋ฌธ์€ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์„, ๋นˆ ์ค„ ๋˜๋Š” ๋นŒ๋” ๋ช…๋ น์ด ์ฒ˜๋ฆฌ๋˜๋ฉด Docker๋Š” ๋” ์ด์ƒ Parser directives์„ ์ฐพ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.๋”ฐ๋ผ์„œ ๋ชจ๋“  ํŒŒ์„œ ์ง€์‹œ๋ฌธ์€ Dockerfile์˜ ๋งจ ์œ„์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Invalid due to appearing twice:

# directive=value1
# directive=value2

FROM ImageName

Parser directives์ด ์•„๋‹Œ ์ฃผ์„ ๋’ค์— ์žˆ์œผ๋ฉด ์ฃผ์„์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

# About my dockerfile
# directive=value
FROM ImageName

The following parser directives are supported:

syntax

์ด ๊ธฐ๋Šฅ์€ BuildKit ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํด๋ž˜์‹ ๋นŒ๋” ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

  • BuildKit์€ ๋ ˆ๊ฑฐ์‹œ ๋นŒ๋”๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ์„ ๋œ ๋ฐฑ์—”๋“œ์ž…๋‹ˆ๋‹ค. BuildKit์€ ๋ฒ„์ „ 23.0๋ถ€ํ„ฐ Docker Desktop ๋ฐ Docker Engine ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ๋นŒ๋”์ž…๋‹ˆ๋‹ค.

escape

# escape=\ (backslash)
# escape=` (backtick)

escape ์ง€์‹œ๋ฌธ์€ Dockerfile์—์„œ ๋ฌธ์ž๋ฅผ escapeํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๋Š” \์ž…๋‹ˆ๋‹ค.

Environment replacement

ํ™˜๊ฒฝ ๋ณ€์ˆ˜(ENV ๋ฌธ์œผ๋กœ ์„ ์–ธ๋จ)๋Š” ํŠน์ • ๋ช…๋ น์—์„œ Dockerfile์—์„œ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” Dockerfile์—์„œ $variable_name ๋˜๋Š” ${variable_name}์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

${variable_name} syntax์€ ์•„๋ž˜์— ์ง€์ •๋œ ๋ช‡ ๊ฐ€์ง€ ํ‘œ์ค€ bash ์ˆ˜์ •์ž๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ${variable:-word}๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ํ•ด๋‹น ๊ฐ’์ด ๋จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์œผ๋ฉด ๋‹จ์–ด๊ฐ€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

  • ${variable:+word}๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜๋ฉด ๋‹จ์–ด๊ฐ€ ๊ฒฐ๊ณผ๊ฐ€ ๋˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฒฐ๊ณผ๋Š” ๋นˆ ๋ฌธ์ž์—ด์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” Dockerfile์˜ ๋‹ค์Œ ์ง€์‹œ๋ฌธ ๋ชฉ๋ก์—์„œ ์ง€์›ํ•œ๋‹ค

  • ADD

  • COPY

  • ENV

  • EXPOSE

  • FROM

  • LABEL

  • STOPSIGNAL

  • USER

  • VOLUME

  • WORKDIR

  • ONBUILD (when combined with one of the supported instructions above)

.dockerignore

docker CLI๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ docker ๋ฐ๋ชฌ์œผ๋กœ ๋ณด๋‚ด๊ธฐ ์ „์— ์ปจํ…์ŠคํŠธ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ .dockerignore๋ผ๋Š” ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

FROM

FROM [--platform=<platform>] <image> [AS <name>]

Or

FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]

Or

FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]

FROM ๋ช…๋ น์–ด๋Š” ์ƒˆ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ํ›„์† ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

optional --platform ํ”Œ๋ž˜๊ทธ๋Š” FROM์ด ๋‹ค์ค‘ ํ”Œ๋žซํผ ์ด๋ฏธ์ง€๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ์ง€์˜ ํ”Œ๋žซํผ์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ: linux/amd64, linux/arm64 ๋˜๋Š” windows/amd64

RUN

RUN์€ 2๊ฐ€์ง€ ํ˜•ํƒœ

  • RUN <command> (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)

RUN /bin/bash -c 'source $HOME/.bashrc && \
echo $HOME'
  • RUN ["executable", "param1", "param2"] (exec form)

RUN /bin/bash -c 'source $HOME/.bashrc && echo $HOME'

RUN --mount

RUN --mount๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋นŒ๋“œ๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ๋งˆ์šดํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋˜๋Š” ๊ธฐํƒ€ ๋นŒ๋“œ ๋‹จ๊ณ„์— ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ์ƒ์„ฑ

  • ๋นŒ๋“œ ๋น„๋ฐ€ ๋˜๋Š” ssh-agent ์†Œ์ผ“์— ์•ก์„ธ์Šค

  • ์˜๊ตฌ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์†๋„ ํ–ฅ์ƒ

Mount types

Type
Description

bind (default)

๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ์ปจํ…์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ(์ฝ๊ธฐ ์ „์šฉ)

cache

์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์œ„ํ•œ ์บ์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.

secret

๋นŒ๋“œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐœ์ธ ํ‚ค์™€ ๊ฐ™์€ ๋ณด์•ˆ ํŒŒ์ผ์„ ์ด๋ฏธ์ง€์— ๊ตฝ์ง€ ์•Š๊ณ  ์•ก์„ธ์Šคํ•˜๋„๋ก ํ—ˆ์šฉ

ssh

๋นŒ๋“œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•”ํ˜ธ๋ฅผ ์ง€์›ํ•˜๋Š” SSH ์—์ด์ „ํŠธ๋ฅผ ํ†ตํ•ด SSH ํ‚ค์— ์•ก์„ธ์Šคํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

RUN --network

Network types

Type
Description

default (default)

๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ์—์„œ ์‹คํ–‰

none

๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค ์—†์ด ์‹คํ–‰

host

ํ˜ธ์ŠคํŠธ์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค

CMD

CMD ๋ช…๋ น์—๋Š” ์„ธ ๊ฐ€์ง€ ํ˜•์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค

  • CMD ["executable","param1","param2"] (exec form, this is the preferred form)

  • CMD ["param1","param2"] (as default parameters to ENTRYPOINT)

  • CMD command param1 param2 (shell form)

CMD์˜ ์ฃผ์š” ๋ชฉ์ ์€ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค

RUN์€ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด์ด๊ณ , CMD๋Š” ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ์‹คํ–‰๋˜๋Š” ๊ธฐ๋ณธ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

LABEL

LABEL <key>=<value> <key>=<value> <key>=<value> ...

LABEL ๋ช…๋ น์–ด๋Š” ์ด๋ฏธ์ง€์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. LABEL์€ ํ‚ค-๊ฐ’ ์Œ์ž…๋‹ˆ๋‹ค.

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

EXPOSE

EXPOSE <port> [<port>/<protocol>...]

EXPOSE ๋ช…๋ น์–ด๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋Ÿฐํƒ€์ž„ ์‹œ ์ง€์ •๋œ ๋„คํŠธ์›Œํฌ ํฌํŠธ์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•จ์„ Docker์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค. ํฌํŠธ๊ฐ€ TCP ๋˜๋Š” UDP์—์„œ ์ˆ˜์‹ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ”„๋กœํ† ์ฝœ์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์€ TCP์ž…๋‹ˆ๋‹ค.

ENV

ENV <key>=<value> ...

ENV ๋ช…๋ น์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ADD

ADD์—๋Š” ๋‘ ๊ฐ€์ง€ ํ˜•์‹

ADD [--chown=<user>:<group>] [--chmod=<perms>] [--checksum=<checksum>] <src>... <dest>
ADD [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]

ADD ๋ช…๋ น์€ <src>์—์„œ ์ƒˆ ํŒŒ์ผ, ๋””๋ ‰ํ„ฐ๋ฆฌ ๋˜๋Š” ์›๊ฒฉ ํŒŒ์ผ URL์„ ๋ณต์‚ฌํ•˜์—ฌ <dest>๊ฒฝ๋กœ์— ์žˆ๋Š” ์ด๋ฏธ์ง€์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

COPY

COPY [--chown=<user>:<group>] [--chmod=<perms>] <src>... <dest>
COPY [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]

COPY ๋˜๋Š” ADD ๋ช…๋ น์—์„œ ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ํŒŒ์ผ์ด ์ž์ฒด ๋ ˆ์ด์–ด์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€๋˜๊ณ  ์ด์ „ ๋ ˆ์ด์–ด์˜ ๋ช…๋ น์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฌดํšจํ™”๋˜์ง€ ์•Š๋Š” ํ–ฅ์ƒ๋œ ์˜๋ฏธ๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ „ ๋ ˆ์ด์–ด๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์—๋„ --cache-from์„ ์‚ฌ์šฉํ•˜์—ฌ ํ›„์† ๋นŒ๋“œ์—์„œ ์ด๋ฏธ ๋นŒ๋“œ๋œ ๋ ˆ์ด์–ด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ ค๋ฉด --link๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

ENTRYPOINT

ENTRYPOINT ๋‘ ๊ฐ€์ง€ ํ˜•์‹

The exec form, which is the preferred form:

ENTRYPOINT ["executable", "param1", "param2"]

The shell form:

ENTRYPOINT command param1 param2

ENTRYPOINT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹คํ–‰ ํŒŒ์ผ๋กœ ์‹คํ–‰๋  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CMD ๋ฐ ENTRYPOINT ๋ช…๋ น์€ ๋ชจ๋‘ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ํ˜‘๋ ฅ์„ ์„ค๋ช…ํ•˜๋Š” ๊ทœ์น™.

  • Dockerfile์€ CMD ๋˜๋Š” ENTRYPOINT ๋ช…๋ น ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ENTRYPOINT๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • CMD๋Š” ENTRYPOINT ๋ช…๋ น์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ธ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ž„์‹œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • CMD๋Š” ๋Œ€์ฒด ์ธ์ˆ˜๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์žฌ์ •์˜๋ฉ๋‹ˆ๋‹ค.

VOLUME

VOLUME ["/data"]

VOLUME ๋ช…๋ น์€ ์ง€์ •๋œ ์ด๋ฆ„์œผ๋กœ ๋งˆ์šดํŠธ ์ง€์ ์„ ์ƒ์„ฑํ•˜๊ณ  ๊ธฐ๋ณธ ํ˜ธ์ŠคํŠธ ๋˜๋Š” ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์™ธ๋ถ€ ๋งˆ์šดํŠธ๋œ ๋ณผ๋ฅจ์„ ๋ณด์œ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

USER

USER <user>[:<group>]
USER <UID>[:<GID>]

USER ๋ช…๋ น์€ ์‚ฌ์šฉ์ž ์ด๋ฆ„(๋˜๋Š” UID) ๋ฐ ์„ ํƒ์ ์œผ๋กœ ํ˜„์žฌ ๋‹จ๊ณ„์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน์œผ๋กœ ์‚ฌ์šฉํ•  ์‚ฌ์šฉ์ž ๊ทธ๋ฃน(๋˜๋Š” GID)์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

WORKDIR

WORKDIR /path/to/workdir

WORKDIR ๋ช…๋ น์–ด๋Š” Dockerfile์—์„œ ๋’ค์— ์˜ค๋Š” RUN, CMD, ENTRYPOINT, COPY ๋ฐ ADD ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ARG

ARG <name>[=<default value>]

ARG ๋ช…๋ น์–ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ --build-arg <varname>=<value> ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ docker build ๋ช…๋ น์œผ๋กœ ๋นŒ๋“œ ์‹œ ๋นŒ๋”์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

ONBUILD

ONBUILD <INSTRUCTION>

ONBUILD ๋ช…๋ น์€ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค๋ฅธ ๋นŒ๋“œ์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ๋  ๋•Œ ๋‚˜์ค‘์— ์‹คํ–‰ํ•  ํŠธ๋ฆฌ๊ฑฐ ๋ช…๋ น์„ ์ด๋ฏธ์ง€์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ž‘๋™ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

  1. ONBUILD ๋ช…๋ น์„ ๋งŒ๋‚˜๋ฉด ๋นŒ๋”๋Š” ๋นŒ๋“œ ์ค‘์ธ ์ด๋ฏธ์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์€ ํ˜„์žฌ ๋นŒ๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  2. ๋นŒ๋“œ๊ฐ€ ๋๋‚˜๋ฉด ๋ชจ๋“  ํŠธ๋ฆฌ๊ฑฐ ๋ชฉ๋ก์ด ์ด๋ฏธ์ง€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ OnBuild ํ‚ค ์•„๋ž˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. docker inspect ๋ช…๋ น์œผ๋กœ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋‚˜์ค‘์— FROM ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒˆ ๋นŒ๋“œ์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FROM ๋ช…๋ น ์ฒ˜๋ฆฌ์˜ ์ผ๋ถ€๋กœ ๋‹ค์šด์ŠคํŠธ๋ฆผ ๋นŒ๋”๋Š” ONBUILD ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ฐพ๊ณ  ๋“ฑ๋ก๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๊ฑฐ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด FROM ๋ช…๋ น์ด ์ค‘๋‹จ๋˜์–ด ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด FROM ๋ช…๋ น์ด ์™„๋ฃŒ๋˜๊ณ  ํ‰์†Œ๋Œ€๋กœ ๋นŒ๋“œ๊ฐ€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

  4. ํŠธ๋ฆฌ๊ฑฐ๋Š” ์‹คํ–‰ ํ›„ ์ตœ์ข… ์ด๋ฏธ์ง€์—์„œ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ์ฆ‰, "์†์ž" ๋นŒ๋“œ์— ์˜ํ•ด ์ƒ์†๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

STOPSIGNAL

STOPSIGNAL ๋ช…๋ น์€ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „์†ก๋  ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์‹ ํ˜ธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

HEALTHCHECK

HEALTHCHECK ๋ช…๋ น์˜ ๋‘ ๊ฐ€์ง€ ํ˜•์‹

  • HEALTHCHECK [OPTIONS] CMD ๋ช…๋ น(์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ)

  • HEALTHCHECK NONE(๊ธฐ๋ณธ ์ด๋ฏธ์ง€์—์„œ ์ƒ์†๋œ ๋ชจ๋“  ์ƒํƒœ ํ™•์ธ ๋น„ํ™œ์„ฑํ™”)

SHELL

SHELL ["executable", "parameters"]

SHELL ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…๋ น์˜ ์…ธ ํ˜•์‹์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ์…ธ์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Here-Documents

Here-documents๋Š” ํ›„์† Dockerfile ํ–‰์„ RUN ๋˜๋Š” COPY ๋ช…๋ น์˜ ์ž…๋ ฅ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

Example

# syntax=docker/dockerfile:1
FROM debian
RUN <<EOT bash
  set -ex
  apt-get update
  apt-get install -y vim
EOT

Reference

Last updated

Was this helpful?