Dockerfile
Docker Format
# Comment
INSTRUCTION arguments๋ช ๋ น์ด๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ด๋ก๋ ์ธ์์ ๋ ์ฝ๊ฒ ๊ตฌ๋ณํ๊ธฐ ์ํด ๋๋ฌธ์๋ก ์ง์ ํ๋ ๊ฒ์ ๋๋ค.
Dockerfile๋ ๋ฌด์กฐ๊ฑด
FROM๋ช ๋ น์ด๋ก ์์ํด์ผ ํ๋ค.์ด๊ฒ์
parserdirectives,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:
Parser directives์ด ์๋ ์ฃผ์ ๋ค์ ์์ผ๋ฉด ์ฃผ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
Parser directives์ด ์๋ ์ฃผ์ ๋ค์ ์์ผ๋ฉด ์ฃผ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.The following parser directives are supported:
syntax
์ด ๊ธฐ๋ฅ์ BuildKit ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ๋๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ํด๋์ ๋น๋ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฌด์๋ฉ๋๋ค.
BuildKit์ ๋ ๊ฑฐ์ ๋น๋๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ๊ฐ์ ๋ ๋ฐฑ์๋์ ๋๋ค. BuildKit์ ๋ฒ์ 23.0๋ถํฐ Docker Desktop ๋ฐ Docker Engine ์ฌ์ฉ์๋ฅผ ์ํ ๊ธฐ๋ณธ ๋น๋์ ๋๋ค.
escape
escape ์ง์๋ฌธ์ Dockerfile์์ ๋ฌธ์๋ฅผ escapeํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฌธ์๋ฅผ ์ค์ ํฉ๋๋ค. ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ์ด์ค์ผ์ดํ ๋ฌธ์๋ \์
๋๋ค.
Environment replacement
ํ๊ฒฝ ๋ณ์(ENV ๋ฌธ์ผ๋ก ์ ์ธ๋จ)๋ ํน์ ๋ช
๋ น์์ Dockerfile์์ ๋ณ์๋ก ์ฌ์ฉ๋ ์๋ ์์ต๋๋ค.
ํ๊ฒฝ ๋ณ์๋ Dockerfile์์ $variable_name ๋๋ ${variable_name}์ผ๋ก ํ์๋ฉ๋๋ค.
${variable_name} syntax์ ์๋์ ์ง์ ๋ ๋ช ๊ฐ์ง ํ์ค bash ์์ ์๋ ์ง์ํฉ๋๋ค.
${variable_name} syntax์ ์๋์ ์ง์ ๋ ๋ช ๊ฐ์ง ํ์ค bash ์์ ์๋ ์ง์ํฉ๋๋ค.${variable:-word}๋ ๋ณ์๊ฐ ์ค์ ๋๋ฉด ๊ฒฐ๊ณผ๊ฐ ํด๋น ๊ฐ์ด ๋จ์ ๋ํ๋ ๋๋ค. ๋ณ์๊ฐ ์ค์ ๋์ง ์์ผ๋ฉด ๋จ์ด๊ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฉ๋๋ค.${variable:+word}๋ ๋ณ์๊ฐ ์ค์ ๋๋ฉด ๋จ์ด๊ฐ ๊ฒฐ๊ณผ๊ฐ ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฒฐ๊ณผ๋ ๋น ๋ฌธ์์ด์์ ๋ํ๋ ๋๋ค
ํ๊ฒฝ ๋ณ์๋ Dockerfile์ ๋ค์ ์ง์๋ฌธ ๋ชฉ๋ก์์ ์ง์ํ๋ค
ADDCOPYENVEXPOSEFROMLABELSTOPSIGNALUSERVOLUMEWORKDIRONBUILD(when combined with one of the supported instructions above)
.dockerignore
docker CLI๋ ์ปจํ ์คํธ๋ฅผ docker ๋ฐ๋ชฌ์ผ๋ก ๋ณด๋ด๊ธฐ ์ ์ ์ปจํ ์คํธ์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์์ .dockerignore๋ผ๋ ํ์ผ์ ์ฐพ์ต๋๋ค.
FROM
Or
Or
FROM ๋ช ๋ น์ด๋ ์ ๋น๋ ๋จ๊ณ๋ฅผ ์ด๊ธฐํํ๊ณ ํ์ ๋ช ๋ น์ด์ ๋ํ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ค์ ํฉ๋๋ค.
optional --platform ํ๋๊ทธ๋ FROM์ด ๋ค์ค ํ๋ซํผ ์ด๋ฏธ์ง๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ ์ด๋ฏธ์ง์ ํ๋ซํผ์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์: linux/amd64, linux/arm64 ๋๋ windows/amd64
RUN
RUN์ 2๊ฐ์ง ํํ
RUN <command>(shellform, the command is run in a shell, which by default is/bin/sh -con Linux orcmd /S /Con Windows)
RUN ["executable", "param1", "param2"](exec form)
RUN --mount
RUN --mount๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ฐ ์ก์ธ์คํ ์ ์๋ ํ์ผ ์์คํ
๋ง์ดํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํธ์คํธ ํ์ผ ์์คํ ๋๋ ๊ธฐํ ๋น๋ ๋จ๊ณ์ ๋ฐ์ธ๋ ๋ง์ดํธ ์์ฑ
๋น๋ ๋น๋ฐ ๋๋ ssh-agent ์์ผ์ ์ก์ธ์ค
์๊ตฌ ํจํค์ง ๊ด๋ฆฌ ์บ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ ์๋ ํฅ์
Mount types
bind (default)
๋ฐ์ธ๋ ๋ง์ดํธ ์ปจํ ์คํธ ๋๋ ํ ๋ฆฌ(์ฝ๊ธฐ ์ ์ฉ)
cache
์ปดํ์ผ๋ฌ ๋ฐ ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ์ํ ์บ์ ๋๋ ํฐ๋ฆฌ์ ์์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง์ดํธํฉ๋๋ค.
secret
๋น๋ ์ปจํ ์ด๋๊ฐ ๊ฐ์ธ ํค์ ๊ฐ์ ๋ณด์ ํ์ผ์ ์ด๋ฏธ์ง์ ๊ตฝ์ง ์๊ณ ์ก์ธ์คํ๋๋ก ํ์ฉ
ssh
๋น๋ ์ปจํ ์ด๋๊ฐ ์ํธ๋ฅผ ์ง์ํ๋ SSH ์์ด์ ํธ๋ฅผ ํตํด SSH ํค์ ์ก์ธ์คํ๋๋ก ํ์ฉํฉ๋๋ค.
RUN --network
Network types
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 ๋ช ๋ น์ด๋ ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค. LABEL์ ํค-๊ฐ ์์ ๋๋ค.
EXPOSE
EXPOSE ๋ช
๋ น์ด๋ ์ปจํ
์ด๋๊ฐ ๋ฐํ์ ์ ์ง์ ๋ ๋คํธ์ํฌ ํฌํธ์์ ์์ ๋๊ธฐํจ์ Docker์ ์๋ฆฝ๋๋ค. ํฌํธ๊ฐ TCP ๋๋ UDP์์ ์์ ํ๋์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ ์ ์์ผ๋ฉฐ ํ๋กํ ์ฝ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ TCP์
๋๋ค.
ENV
ENV ๋ช ๋ น์ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค.
ADD
ADD์๋ ๋ ๊ฐ์ง ํ์
ADD ๋ช
๋ น์ <src>์์ ์ ํ์ผ, ๋๋ ํฐ๋ฆฌ ๋๋ ์๊ฒฉ ํ์ผ URL์ ๋ณต์ฌํ์ฌ <dest>๊ฒฝ๋ก์ ์๋ ์ด๋ฏธ์ง์ ํ์ผ ์์คํ
์ ์ถ๊ฐํฉ๋๋ค.
COPY
COPY --link
COPY ๋๋ ADD ๋ช ๋ น์์ ์ด ํ๋๊ทธ๋ฅผ ํ์ฑํํ๋ฉด ํ์ผ์ด ์์ฒด ๋ ์ด์ด์์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ง๋๊ณ ์ด์ ๋ ์ด์ด์ ๋ช ๋ น์ด ๋ณ๊ฒฝ๋ ๋ ๋ฌดํจํ๋์ง ์๋ ํฅ์๋ ์๋ฏธ๋ก ํ์ผ์ ๋ณต์ฌํ ์ ์์ต๋๋ค.
--link ์ฌ์ฉ์ ์ด์
์ด์ ๋ ์ด์ด๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ --cache-from์ ์ฌ์ฉํ์ฌ ํ์ ๋น๋์์ ์ด๋ฏธ ๋น๋๋ ๋ ์ด์ด๋ฅผ ์ฌ์ฌ์ฉํ๋ ค๋ฉด --link๋ฅผ ์ฌ์ฉํ๋ค
ENTRYPOINT
ENTRYPOINT ๋ ๊ฐ์ง ํ์
The exec form, which is the preferred form:
The shell form:
ENTRYPOINT๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ ํ์ผ๋ก ์คํ๋ ์ปจํ
์ด๋๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
CMD ๋ฐ ENTRYPOINT ๋ช ๋ น์ ๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ ์คํ๋๋ ๋ช ๋ น์ ์ ์ํฉ๋๋ค. ๊ทธ๋ค์ ํ๋ ฅ์ ์ค๋ช ํ๋ ๊ท์น.
Dockerfile์ CMD ๋๋ ENTRYPOINT ๋ช ๋ น ์ค ํ๋ ์ด์์ ์ง์ ํด์ผ ํฉ๋๋ค.
์ปจํ ์ด๋๋ฅผ ์คํ ํ์ผ๋ก ์ฌ์ฉํ ๋ ENTRYPOINT๋ฅผ ์ ์ํด์ผ ํฉ๋๋ค.
CMD๋ ENTRYPOINT ๋ช ๋ น์ ๋ํ ๊ธฐ๋ณธ ์ธ์๋ฅผ ์ ์ํ๊ฑฐ๋ ์ปจํ ์ด๋์์ ์์ ๋ช ๋ น์ ์คํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค.
CMD๋ ๋์ฒด ์ธ์๋ก ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ ์ฌ์ ์๋ฉ๋๋ค.
VOLUME
VOLUME ๋ช
๋ น์ ์ง์ ๋ ์ด๋ฆ์ผ๋ก ๋ง์ดํธ ์ง์ ์ ์์ฑํ๊ณ ๊ธฐ๋ณธ ํธ์คํธ ๋๋ ๋ค๋ฅธ ์ปจํ
์ด๋์์ ์ธ๋ถ ๋ง์ดํธ๋ ๋ณผ๋ฅจ์ ๋ณด์ ํ๋ ๊ฒ์ผ๋ก ํ์ํฉ๋๋ค.
USER
USER ๋ช ๋ น์ ์ฌ์ฉ์ ์ด๋ฆ(๋๋ UID) ๋ฐ ์ ํ์ ์ผ๋ก ํ์ฌ ๋จ๊ณ์ ๋๋จธ์ง ๋ถ๋ถ์ ๋ํด ๊ธฐ๋ณธ ์ฌ์ฉ์ ๋ฐ ๊ทธ๋ฃน์ผ๋ก ์ฌ์ฉํ ์ฌ์ฉ์ ๊ทธ๋ฃน(๋๋ GID)์ ์ค์ ํฉ๋๋ค.
WORKDIR
WORKDIR ๋ช ๋ น์ด๋ Dockerfile์์ ๋ค์ ์ค๋ RUN, CMD, ENTRYPOINT, COPY ๋ฐ ADD ๋ช ๋ น์ด์ ๋ํ ์์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค.
ARG
ARG ๋ช ๋ น์ด๋ ์ฌ์ฉ์๊ฐ --build-arg <varname>=<value> ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ docker build ๋ช ๋ น์ผ๋ก ๋น๋ ์ ๋น๋์ ์ ๋ฌํ ์ ์๋ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค.
ONBUILD
ONBUILD ๋ช ๋ น์ ์ด๋ฏธ์ง๊ฐ ๋ค๋ฅธ ๋น๋์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ๋ ๋ ๋์ค์ ์คํํ ํธ๋ฆฌ๊ฑฐ ๋ช ๋ น์ ์ด๋ฏธ์ง์ ์ถ๊ฐํฉ๋๋ค.
์๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
ONBUILD๋ช ๋ น์ ๋ง๋๋ฉด ๋น๋๋ ๋น๋ ์ค์ธ ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋ช ๋ น์ ํ์ฌ ๋น๋์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.๋น๋๊ฐ ๋๋๋ฉด ๋ชจ๋ ํธ๋ฆฌ๊ฑฐ ๋ชฉ๋ก์ด ์ด๋ฏธ์ง ๋งค๋ํ์คํธ์
OnBuildํค ์๋์ ์ ์ฅ๋ฉ๋๋ค.docker inspect๋ช ๋ น์ผ๋ก ๊ฒ์ฌํ ์ ์์ต๋๋ค.๋์ค์
FROM๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ ๋น๋์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.FROM๋ช ๋ น ์ฒ๋ฆฌ์ ์ผ๋ถ๋ก ๋ค์ด์คํธ๋ฆผ ๋น๋๋ONBUILDํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฐพ๊ณ ๋ฑ๋ก๋ ์์๋๋ก ์คํํฉ๋๋ค. ํธ๋ฆฌ๊ฑฐ ์ค ํ๋๋ผ๋ ์คํจํ๋ฉดFROM๋ช ๋ น์ด ์ค๋จ๋์ด ๋น๋๊ฐ ์คํจํฉ๋๋ค. ๋ชจ๋ ํธ๋ฆฌ๊ฑฐ๊ฐ ์ฑ๊ณตํ๋ฉดFROM๋ช ๋ น์ด ์๋ฃ๋๊ณ ํ์๋๋ก ๋น๋๊ฐ ๊ณ์๋ฉ๋๋ค.ํธ๋ฆฌ๊ฑฐ๋ ์คํ ํ ์ต์ข ์ด๋ฏธ์ง์์ ์ง์์ง๋๋ค. ์ฆ, "์์" ๋น๋์ ์ํด ์์๋์ง ์์ต๋๋ค.
STOPSIGNAL
STOPSIGNAL ๋ช
๋ น์ ์ข
๋ฃํ๊ธฐ ์ํด ์ปจํ
์ด๋๋ก ์ ์ก๋ ์์คํ
ํธ์ถ ์ ํธ๋ฅผ ์ค์ ํฉ๋๋ค.
HEALTHCHECK
HEALTHCHECK ๋ช ๋ น์ ๋ ๊ฐ์ง ํ์
HEALTHCHECK [OPTIONS] CMD๋ช ๋ น(์ปจํ ์ด๋ ๋ด๋ถ์์ ๋ช ๋ น์ ์คํํ์ฌ ์ปจํ ์ด๋ ์ํ ํ์ธ)HEALTHCHECK NONE(๊ธฐ๋ณธ ์ด๋ฏธ์ง์์ ์์๋ ๋ชจ๋ ์ํ ํ์ธ ๋นํ์ฑํ)
SHELL
SHELL ๋ช
๋ น์ ์ฌ์ฉํ๋ฉด ๋ช
๋ น์ ์
ธ ํ์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ์
ธ์ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
Here-Documents
Here-documents๋ ํ์ Dockerfile ํ์ RUN ๋๋ COPY ๋ช
๋ น์ ์
๋ ฅ์ผ๋ก ๋ฆฌ๋๋ ์
ํ๋๋ก ํ์ฉํฉ๋๋ค.
Example
Reference
Last updated