Dockerfile
Dockerfile์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ธฐ ์ํ ์ผ๋ จ์ ๋ช ๋ น์ด๋ฅผ ๊ธฐ๋กํ ํ ์คํธ ๊ธฐ๋ฐ์ ์ค๊ณ๋๋ค.
์ฝ๋ ํํ๋ก ์ธํ๋ผ๋ฅผ ์ ์ํจ์ผ๋ก์จ ์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์ ์๋ํํ๊ณ ๋์ผํ ํ๊ฒฝ ์ฌํ ๊ฐ๋ฅ
docker build๋ช ๋ น์ด๋ฅผ ํตํด Dockerfile์ ์คํํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑ
์ฃผ์ ๋ช
๋ น์ด(Instruction) ์์ธ
Dockerfile์ ๊ฐ ๋ช ๋ น์ด๋ ์ด๋ฏธ์ง์ ๋ ์ด์ด๋ฅผ ํ์ฑํ๋ฉฐ, ํจ์จ์ ์ธ ๋น๋๋ฅผ ์ํด ๊ฐ ๋ช ๋ น์ด์ ํน์ฑ์ ์ ํํ ์ดํดํด์ผ ํ๋ค.
FROM: ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ๋ฉฐ Dockerfile์ ์ฒซ ์ค์ ๋ฐ๋์ ์ด ๋ช ๋ น์ด๋ก ์์ ํ์
WORKDIR: ๋ช ๋ น์ด๊ฐ ์คํ๋ ์ปจํ ์ด๋ ๋ด์ ์์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ค์ ํ๋ฉฐ, ํด๋น ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด ์๋์ผ๋ก ์์ฑ
COPY vs ADD
COPY: ํธ์คํธ ์ปดํจํฐ์ ํ์ผ์ ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๋จ์ ๋ณต์ฌADD: ํ์ผ ๋ณต์ฌ ์ธ์ ์๊ฒฉ URL ๋ค์ด๋ก๋ ๋ฐ ์์ถ ํ์ผ(.tar,.gz๋ฑ) ์๋ ํด์ ๊ธฐ๋ฅ์ ํฌํจํ๋, ์๋์น ์์ ๋์ ๋ฐฉ์ง๋ฅผ ์ํด ์ผ๋ฐ์ ์ธ ๋ณต์ฌ๋COPY์ฌ์ฉ์ด ๊ถ์ฅ
RUN: ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๋์ ์คํ๋ ๋ช ๋ น์ด๋ก, ์ฃผ๋ก ํจํค์ง ์ค์น๋ ํ๊ฒฝ ๊ตฌ์ถ์ ์ฌ์ฉ
ENV vs ARG
ENV: ๋น๋ ์์ ๊ณผ ์คํ ์ค์ธ ์ปจํ ์ด๋ ๋ชจ๋์์ ์ ์ง๋๋ ํ๊ฒฝ ๋ณ์ARG: ์ค์ง ์ด๋ฏธ์ง ๋น๋ ์์ ์๋ง ์ ํจํ ๋ณ์๋ก,--build-arg์ต์ ์ ํตํด ์ธ๋ถ์์ ๊ฐ์ ์ฃผ์ ๊ฐ๋ฅ
CMD vs ENTRYPOINT
CMD: ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ์คํ๋ ๊ธฐ๋ณธ ๋ช ๋ น์ด ๋ฐ ์ธ์๋ฅผ ์ง์ ํ๋ฉฐ,docker run์ ์ ๋ฌ๋ ์ธ์์ ์ํด ์์ ํ ๋์ฒด ๊ฐ๋ฅENTRYPOINT: ์ปจํ ์ด๋๋ฅผ ์คํ ํ์ผ์ฒ๋ผ ๋์ํ๊ฒ ํ๋ฉฐ,docker run์ ์ ๋ฌ๋ ์ธ์๊ฐ ๋ค์ ์ถ๊ฐ๋๋ ํํ๋ก ๋์
์คํ๋ง ๋ถํธ ์ ํ๋ฆฌ์ผ์ด์
Dockerfile ์์
๋น๋ ์ปจํ
์คํธ์ .dockerignore
๋์ปค ๋น๋ ์ฑ๋ฅ๊ณผ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ ๋น๋ ์ปจํ ์คํธ ๊ด๋ฆฌ์ ํฌ๊ฒ ์์กดํ๋ค.
Build Context:
docker build๋ช ๋ น์ด์ ๊ฒฝ๋ก ์ธ์๋ก ์ง์ ๋ ๋๋ ํฐ๋ฆฌ๋ก, ์ด ๋ด๋ถ์ ๋ชจ๋ ํ์ผ์ด ๋์ปค ๋ฐ๋ชฌ์ผ๋ก ์ ์ก.dockerignore: ๋น๋์ ๋ฌด๊ดํ ํ์ผ(.git, ๋ก๊ทธ, ๋ก์ปฌ ์์กด์ฑ ํด๋ ๋ฑ)์ ์ ์ก ๋์์์ ์ ์ธํ์ฌ ๋น๋ ์๋ ํฅ์ ๋ฐ ๋ณด์ ๊ฐํ
๋ฉํฐ ์คํ
์ด์ง ๋น๋(Multi-stage Builds)
์ต์ข ๋ฐฐํฌ ์ด๋ฏธ์ง์์ ๋ถํ์ํ ๋น๋ ๋๊ตฌ๋ฅผ ์ ๊ฑฐํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๋ ํต์ฌ ๊ธฐ๋ฒ์ด๋ค.
ํ๋์ Dockerfile ๋ด์์ ์ฌ๋ฌ
FROM๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋จ๊ณ๋ฅผ ๋ถ๋ฆฌ์ด์ ๋จ๊ณ(build stage)์์ ์์ฑ๋ ๊ฒฐ๊ณผ๋ฌผ๋ง
COPY --from์ผ๋ก ๋ค์ ๋จ๊ณ์ ์ ๋ฌ์ต์ข ์ด๋ฏธ์ง์๋ ์ปดํ์ผ๋ฌ๋ ์์ค ์ฝ๋๊ฐ ํฌํจ๋์ง ์์ ๋ณด์์ฑ์ด ๋์์ง๊ณ ์ด๋ฏธ์ง ์ ์ก ๋น์ฉ ๊ฐ์
Last updated