๋ชฉ์ฐจ
๐ Dockerfile ์ด๋
DockerHub ์ ์ฌ๋ ค์ ธ ์๋ ์ด๋ฏธ์ง๋ค๋ Dockerfile ์ ํ์ฉํด์ ๋ง๋ค์ด์ง๋ ๊ฒ์
์ฆ, ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ฒ ํด์ฃผ๋ ํ์ผ์
FROM :: ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์์ฑ
๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ์ญํ ์ ํจ (ํน์ ์ด๊ธฐ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ถ๊ฐ์ ์ธ ์ธํ ์ ํ ์ ์์)
๋ฒ ์ด์ค ์ด๋ฏธ์ง ๊ธฐ๋ฐ์ผ๋ก ์ถ๊ฐ ์ธํ ์ ํ๋ ๊ฒ.
ํ์์ ๋ฐ๋ผ ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ๊ณจ๋ผ์ฃผ๋ฉด ๋จ
โ FROM ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์์ฑ
`Dockerfile` ๋ก ํ์ผ ์์ฑ
`FROM [์ด๋ฏธ์ง๋ช ]`
`FROM [์ด๋ฏธ์ง๋ช ] : [ํ๊ทธ๋ช ]`
ํ๊ทธ๋ช ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ต์ ๋ฒ์ ์ฌ์ฉ
`FROM openjdk:17-jdk` ๋ฒ ์ด์ค๋ก ์์ฑํ
โ ์ด๋ฏธ์ง ์์ฑ
`-t [์ด๋ฏธ์ง๋ช
] [๋์ปคํ์ผ์์น๊ฒฝ๋ก] `
์ด๋ฏธ์ง ๋ช
์ ์ด๋ป๊ฒ ํ ๊ฑด์ง ์์ฑ
๋์ปค ํ์ผ์ด ์์นํ ๊ฒฝ๋ก . ์๋๊ฒฝ๋ก๋ก
`-t [์ด๋ฏธ์ง๋ช ] : [ํ๊ทธ๋ช ] [๋์ปคํ์ผ์์น๊ฒฝ๋ก] ` ์ด๋ฆ ๋ถ์ด
โ ์ด๋ฏธ์ง ์ ์์ฑ ๋์๋์ง ํ์ธ
โ ์ปจํ ์ด๋ ์์ฑ + ์คํํด๋ณด๊ธฐ -> ์คํ ์ํ๊ฐ ์๋
-> ์ปจํ ์ด๋์์ ํด์ผํ ์์ ์ด ๋์ด๋๋ฉด ์๋์ผ๋ก ์ข ๋ฃ๋๊ธฐ๋๋ฌธ์ ์ข ๋ฃ๋์ด์๋
โ ์คํ ์ํ๊ฐ ์๋ ์ปจํ ์ด๋ (๊ฐ์ ์คํ)
์คํ๋์ง ์์์ ์์ผ๋ก ๋ค์ด๊ฐ์ ๋ณผ ์ ์๋ค
๋๋ฒ๊น ์ ์ํด์ ํด๋น ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ์๋์ผ๋ก ์ข ๋ฃ๋์ง ์๊ธฐ ๋๋ฌธ์ , ์ปจํ ์ด๋ ์์ผ๋ก ๋ค์ด๊ฐ ์ ์์
500์ด ๋์ ์์คํ ์ ์ผ์์ ์ง ์ํค๋ ๋ช ๋ น์ด์ด๋ค.
COPY :: ํ์ผ ๋ณต์ฌ (์ด๋)
ํธ์คํธ์ ์๋ ํ์ผ์ ๋ณต์ฌํด์ , ์ปจํ ์ด๋๋ก ์ ๋ฌํ๋ค.
โ Dockerfile ์ COPY ์ฝ๋ ์ฝ์
ํ์ฌ ๊ฒฝ๋ก์์์ app.txt ๋ฅผ
์ปจํ ์ด๋์ /app.txt (์ ๋๊ฒฝ๋ก) ์ด ๊ฒฝ๋ก๋ก ๋ณต์ฌํ๊ฒ ๋ค.
โ ์ด๋ฏธ์ง build ํ๊ธฐ
`docker build -t ์ด๋ฆ ๊ฒฝ๋ก`
โ ํด๋+ํด๋์์ ๋ชจ๋ ํ์ผ ๋ณต์ฌ
๋๋ ํฐ๋ฆฌ ๋ณต์ฌ์์๋ ๋ง์ง๋ง / ์ฌ๋์ฌ ๋ถ์ฌ์ฃผ๊ธฐ
๋น๋ ์๋กํด์ ๋ค์ ์ปจํ ์ด๋ ์์ผ๋ก ๋ค์ด๊ฐ๋ณด๊ธฐ
โ ์์ผ๋ ์นด๋ ์ฌ์ฉ ๊ฐ๋ฅ (ํน์ ํ์ผ ์ง์ ํ๊ธฐ)
โ `.dockerignore` ํ์ผ ์์ฑ (ํน์ ํ์ผ ๋ฌด์)
๋ณต์ฌ๋ฅผ ์ํ์ง ์๋ ํ์ผ์ ์ง์ ํ ์ ์์
ENTRYPOINT :: ์ปจํ ์ด๋ ์์ํ ๋ ์คํ๋๋ ๋ช ๋ น์ด
์ปจํ ๋์ด๊ฐ ์์ฑ๋๊ณ ์ต์ด๋ก ์คํํ ๋ ์ํ๋๋ ๋ช ๋ น์ด
`ENTRYPOINT [๋ช ๋ น๋ฌธ, ๋ช ๋ น๋ฌธ]`
๋ฐฐ์ด ํํ๋ก ๋์ดํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋น๋ ํ ์คํ ์ํจ ๋ค, log ๋ฅผ ํ์ธํด๋ณด๋ฉด `echo hello` ๋ช ๋ น์ด๊ฐ ์คํ๋์ด์๋ ๊ฑธ ํ์ธ ํ ์ ์์
RUN : ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ์ฌ์ฉํ ๋ช ๋ น๋ฌธ ์คํ
`RUN [๋ช ๋ น๋ฌธ]`
`RUN npm install`
โ RUN vs ENTRYPOINT
RUN : ์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์์ ํ์ํ ๋ช ๋ น์ด ์คํ
ENTRYPOINT : (์์ฑ๋ ์ด๋ฏธ์ง ๊ธฐ๋ฐ์ผ๋ก) ์ปจํ ์ด๋๋ฅผ ์์ฑํ ์งํ์ ์คํ
โ ubuntu ํ๊ฒฝ์ git ์ ๊น๊ณ (์ด๋ฏธ์ง์์ฑ๊ณผ์ ) -> ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ entrypoint ๊ฐ ์คํ
git ์ด ๊น๋ ค์์์ ํ์ธ
WORKDIR :: ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์
WORKDIR ๋ก ์์ ๋๋ ํฐ๋ฆฌ ์ ํํ๋ฉด ์ดํ ๋ฑ์ฅํ๋ ๋ช ๋ น๋ฌธ์ด
ํด๋น ๋๋ ํฐ๋ฆฌ ๊ธฐ์ค์ผ๋ก ์คํํ๊ฒ ๋จ
์? > ์ปจํ ์ด๋ ๋ด๋ถ ํด๋๋ฅผ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํด์์ด๋ค. โญ
WORKDIR ์ ์ฐ์ง ์์ผ๋ฉด ๊ธฐ์กด ํ์ผ๋ค๊ณผ ๋ค์์ฌ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ
`WORK DIR [์์ ๋๋ ํ ๋ฆฌ๋ก ์ฌ์ฉํ ์ ๋ ๊ฒฝ๋ก]`
โ ๋ณต์ฌํ ํ์ผ๋ค์ด ๋ค์ฃฝ๋ฐ์ฃฝ ๋ณด์ด๋ ๋ชจ์ต > ์์๋ณด๊ธฐ ํ๋ฌ...
โ WORKDIR ๋ฅผ ์ง์ ํด์ฃผ๊ณ ๋ค์ ๋น๋/์์ฑ ํด๋ณด์,
์ต์ด ๊ฒฝ๋ก๊ฐ my-dir ๋ก ์ง์ ๋๋ฉด์ ๋ณต์ฌ๋ ํ์ผ๋ค์ด ์ ๋ฆฌ๋์ด์์
EXPOSE :: ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ฌ์ฉ ์ค์ธ ํฌํธ๋ฅผ ๋ฌธ์ํ ํ๊ธฐ
`docker run -p 3306:3306 mysql` ๊ฐ์ ๋ช ๋ น๋ฌธ์ ์ ๋ ฅํ ๋ port ๋ฒํธ๋ ๋ช ๋ น๋ฌธ์ ์คํํ ์ฌ๋ ๋ง๊ณ ๋ ์์๋ณผ ์๊ฐ ์์
-> ๊ทธ๋์ `EXPOSE [ํฌํธ๋ฒํธ]` ์ ๊ฐ์ด ๋ฌธ์ํ๋ฅผ ํด์ ์๋ ค์ฃผ๋ ์ญํ
-> ์ฐ๋ ์์ฐ๋ค ์๋ ๋ฐฉ์์ ์ํฅ ์์