๐ ๋์ปค Dockerfile์ ๋ํด ๋ค๋ฃน๋๋ค.
์ปจํ
์ด๋ ์์ฑ -> ์ ํ๋ฆฌ์ผ์ด์
์ค์น -> ์ปจํ
์ด๋ ์ปค๋ฐ
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ผ์ผ์ด ์์์
์ผ๋ก ํจํค์ง๋ฅผ ์ค์นํด์ผํ๋ค.
Dockerfile ์์ฑ -> ์ด๋ฏธ์ง ์์ฑ
์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ปจํ
์ด๋์ ์ค์นํด์ผ ํ๋ ํจํค์ง, ์ถ๊ฐํ ์์ค์ฝ๋, ์คํํ ๋ช
๋ น์ด์ ์
ธ ์คํฌ๋ฆฝํธ ๋ฑ์ ํ๋์ ํ์ผ์ ๊ธฐ๋กํด ๋๋ฉด ๋์ปค๋ ์ด ํ์ผ์ ์ฝ์ด ์ปจํ
์ด๋์์ ์์
์ ์ํํ ํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ค.
๐ ์ง์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์ด๋ฏธ์ง๋ก ์ปค๋ฐํ๋ ๋ฒ๊ฑฐ๋ฌ์์ ๋ ์ ์๊ณ ๋น๋ ๋ฐ ๋ฐฐํฌ๋ฅผ ์๋ํํ ์ ์๋ค.
FROM
: ์์ฑํ ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค๊ฐ ๋ ์ด๋ฏธ์ง๋ฅผ ๋ปํ๋ค. Dockerfile์ ์์ฑํ ๋ ๋ฐ๋์ ํ ๋ฒ ์ด์ ์
๋ ฅํด์ผ ํ๊ณ ์ฌ์ฉํ๋ ค๋ ์ด๋ฏธ์ง๊ฐ ๋์ปค์ ์๋ค๋ฉด ์๋์ผ๋ก pullํ๋ค.LABEL
: ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค. ๋ฉํ๋ฐ์ดํฐ๋ 'ํค:๊ฐ'์ ํํ๋ก ์ ์ฅ๋๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ ์ ์๋ค.RUN
: ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ปจํ
์ด๋ ๋ด๋ถ์์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.ADD
: ํ์ผ์ ์ด๋ฏธ์ง์ ์ถ๊ฐํ๋ค. ์ถ๊ฐํ๋ ํ์ผ์ Dockerfile์ด ์์นํ ๋๋ ํฐ๋ฆฌ์ธ ์ปจํ
์คํธ(Context)์์ ๊ฐ์ ธ์จ๋ค. JSON ๋ฐฐ์ด์ ํํ๋ก ["์ถ๊ฐํ ํ์ผ ์ด๋ฆ", ... "์ปจํ
์ด๋์ ์ถ๊ฐ๋ ์์น"]์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. ์ถ๊ฐํ ํ์ผ๋ช
์ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ง์ ํ ์ ์์ผ๋ฉฐ ๋ฐฐ์ด์ ๋ง์ง๋ง ์์๊ฐ ์ปจํ
์ด๋์ ์ถ๊ฐ๋ ์์น๋ค.WORKDIR
: ๋ช
๋ น์ด๋ฅผ ์คํํ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ํ๋ธ๋ค. ๋ฐฐ์ ์
ธ์์ cd ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ค.EXPOSE
: Dockerfile์ ๋น๋๋ก ์์ฑ๋ ์ด๋ฏธ์ง์์ ๋
ธ์ถํ ํฌํธ๋ฅผ ์ค์ ํ๋ค. ๊ทธ๋ฌ๋ EXPOSE
๋ฅผ ์ค์ ํ ์ด๋ฏธ์ง๋ก ์ปจํ
์ด๋๋ฅผ ์์ฑํ๋ค๊ณ ํด์ ๋ฐ๋์ ์ด ํฌํธ๊ฐ ํธ์คํธ์ ํฌํธ์ ๋ฐ์ธ๋ฉ๋๋ ๊ฒ์ ์๋๋ค.CMD
: ์ปจํ
์ด๋๊ฐ ์์๋ ๋๋ง๋ค ์คํํ ๋ช
๋ น์ด(์ปค๋งจ๋)๋ฅผ ์ค์ ํ๋ฉฐ, Dockerfile์์ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์๋ค.docker build -t mybuild:0.0 ./
-t
์ต์
์ ์์ฑ๋ ์ด๋ฏธ์ง์ ์ด๋ฆ์ ์ค์ ํ๋ค. -t
์ต์
์ ์ฌ์ฉํ์ง ์์ผ๋ฉด 16์ง์ ํํ์ ์ด๋ฆ์ผ๋ก ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋๋ค. build
๋ช
๋ น์ด์ ๋์๋ Dockerfile์ด ์ ์ฅ๋ ๊ฒฝ๋ก๋ฅผ ์
๋ ฅํ๋ค.
docker run -d -P --name myserver mybuild:0.0
-P
์ต์
์ ์ด๋ฏธ์ง์ ์ค์ ๋ EXPOSE
์ ๋ชจ๋ ํฌํธ๋ฅผ ํธ์คํธ์ ์ฐ๊ฒฐํ๋๋ก ์ค์ ํ๋ค.
docker port myserver
docker ps
๋๋ docker port
๋ช
๋ น์ด๋ก ์ปจํ
์ด๋์ ์ฐ๊ฒฐ๋ ํธ์คํธ์ ํฌํธ๋ฅผ ํ์ธํ ์ ์๋ค.
๋น๋ ์ปจํ ์คํธ๋?
์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐ ํ์ํ ๊ฐ์ข ํ์ผ, ์์ค์ฝ๋, ๋ฉํ๋ฐ์ดํฐ ๋ฑ์ ๋ด๊ณ ์๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์๋ฏธํ๋ฉฐ, Dockerfile์ด ์์นํ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋น๋ ์ปจํ ์คํธ๋ผ ํ๋ค.
์ปจํ
์คํธ๋ build
๋ช
๋ น์ด์ ๋งจ ๋ง์ง๋ง์ ์ง์ ๋ ์์น์ ์๋ ํ์ผ์ ์ ๋ถ ํฌํจํ๋ค. ๋จ์ ํ์ผ ๋ฟ๋ง ์๋๋ผ ํ์ ๋๋ ํฐ๋ฆฌ๋ ์ ๋ถ ํฌํจํ๊ฒ ๋๋ฏ๋ก ๋น๋์ ๋ถํ์ํ ํ์ผ์ด ํฌํจ๋๋ค๋ฉด ๋น๋ ์๋๋ ๋๋ ค์ง๊ณ ํธ์คํธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง๋์น๊ฒ ์ ์ ํ ์ ์๋ค.
๐ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด .dockerignore์ ์ฌ์ฉํ๋ค.
.dockerignore์ .gitignore์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. .dockerignore๋ผ๋ ํ์ผ์ ์์ฑํ๋ฉด ๋น๋ ์ ์ด ํ์ผ์ ๋ช ์๋ ์ด๋ฆ์ ํ์ผ์ ์ปจํ ์คํธ์์ ์ ์ธํ๋ค. .dockerignore ํ์ผ์ ์ปจํ ์คํธ์ ์ต์์ ๊ฒฝ๋ก, ์ฆ Dockerfile์ด ์์นํ ๊ฒฝ๋ก์ ๊ฐ์ ๊ณณ์ ์์นํด์ผ ํ๋ค.
ENV
: Dockerfile์์ ์ฌ์ฉ๋ ํ๊ฒฝ๋ณ์๋ฅผ ์ง์ ํ๋ค. ์ค์ ํ ํ๊ฒฝ๋ณ์๋ ${ENV_NAME} ๋๋ $ENV_NAME์ ํํ๋ก ์ฌ์ฉํ ์ ์๋ค.VOLUME
: ๋น๋๋ ์ด๋ฏธ์ง๋ก ์ปจํ
์ด๋๋ฅผ ์์ฑํ์ ๋ ํธ์คํธ์ ๊ณต์ ํ ์ปจํ
์ด๋ ๋ด๋ถ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ค์ ํ๋ค.ARG
: build
๋ช
๋ น์ด๋ฅผ ์คํํ ๋ ์ถ๊ฐ๋ก ์
๋ ฅ์ ๋ฐ์ Dockerfile ๋ด์์ ์ฌ์ฉ๋ ๋ณ์์ ๊ฐ์ ์ค์ ํ๋ค.COPY
: ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ์์ ์ฝ์ด ๋ค์ธ ์ปจํ
์คํธ๋ก๋ถํฐ ์ด๋ฏธ์ง์ ํ์ผ์ ๋ณต์ฌํ๋ ์ญํ ์ ํ๋ค. ADD
์์ ์ฐจ์ด์ ์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, COPY
๋ ๋ก์ปฌ์ ํ์ผ๋ง ์ด๋ฏธ์ง์ ์ถ๊ฐํ ์ ์์ง๋ง ADD
๋ ์ธ๋ถ URL ๋ฐ tar ํ์ผ์์๋ ํ์ผ์ ์ถ๊ฐํ ์ ์๋ค๋ ์ ์์ ๋ค๋ฅด๋ค.๋ช ๋ น์ด ์ ์ฒด ๋ชฉ๋ก์ ์๋ ๋งํฌ์์ ํ์ธํ ์ ์๋ค.
https://docs.docker.com/engine/reference/builder/