์๋ ํ์ธ์ ๊ตฌ๋ ์๋, IT ์ฌํ์๋ฅผ ์ํ ์์์ง์ ๋๋ค.
์ง๋ ๊ธ์์ ๋ณด์ ๊ด์ ์์ ์ ๋ง๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ํด ์ดํด๋ดค๋๋ฐ์.
์ด๋ฒ์ ํจ์จ์ ์ธ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ํจ์จ์ฑ ๊ด์ ์์ ์๊ตฌ๋๋ ์ฌํญ์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง ํฌ๊ธฐ ๊ฒฝ๋ํ
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด ์ต์ํ
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด ์ต์ ํ
์ด๋ฏธ์ง ํฌ๊ธฐ ๊ฒฝ๋ํ๋ ๊ทธ ๋ป์ด ๊ธ๋ฐฉ ์ดํด๊ฐ ๋๋๋ฐ... ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ ๋ญ๊น์?
์ง๊ธ ๋ฏ์ค๊ฒ ๋๊ปด์ ธ๋ ๊ด์ฐฎ์ต๋๋ค. ์ ๊ฐ ์ด์ ๋ถํฐ ์ปดํฉํธํ๊ฒ ์ง์ด๋๋ฆฌ๋ ํต์ฌ ๋ด์ฉ๋ง ํ์ธํ์๋ฉด ๊ธ๋ฐฉ ๊ฐ์ ์ก์ผ์ค ํ ๋๊น์.
* ํ์ฌ ๋ณธ ๋ด์ค๋ ํฐ ํ๋ซํผ์ ์ค์ต ๊ฐ์ด๋์ ํ์ํ ๋งํฌ๋ค์ด ๋ฌธ๋ฒ์ด ๋ชจ๋ ์ง์ํ์ง ์๋ ๊ด๊ณ๋ก, ๋ณด๋ค ๋์ ์ค์ต ๊ฒฝํ์ ์ํด ์๋ ํ์ด์ง์์ ์ํฐํด์ ํ์ธํ์๋ ๊ฑธ ์ถ์ฒ๋๋ ค์!
(์ํฐํด ๋ด์ฉ์ ๋ชจ๋ ๋์ผํฉ๋๋ค.)
๐https://aidenslab-newsletter.beehiiv.com/p/c342424e81460581
๐์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋?
์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ ์ฌ๋ฌ ๊ฐ์ ํ์ผ ์์คํ ์ํ๊ฐ ํ๋์ฉ ์์ฌ์ ๋ง๋ค์ด์ง๋๋ค. ๋น ๋ฅธ ์ดํด๋ฅผ ์ํด ์๋์ ๊ฐ์ Dockerfile ์์ ์ฝ๋๋ฅผ ์ดํด๋ณผ๊ฒ์.
๊ธฐ๋ณธ์ ์ธ Go ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ์ด๋ฏธ์ง๊ฐ ์ ์๋ Dockerfile์ธ๋ฐ์. ์ด๋ ๊ฒ ๋น๋๋ ์ด๋ฏธ์ง๋ ์๋์ ๊ฐ์ ์ํ๊ฐ ์์ด๊ฒ ๋ฉ๋๋ค.
1. ๋ฒ ์ด์ค ์ด๋ฏธ์ง์ ์ด๊ธฐ ์ํ
2. 1๋ฒ ์ํ ์์ Go ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋(/src/main.go)๋ฅผ ๋ณต์ฌํ ์ํ
3. 2๋ฒ ์ํ ์์ Go ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํด์ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋ ์ํ
์ด๋ ๊ฒ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ ์ํ๋ฅผ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ผ๊ณ ํฉ๋๋ค. ์ ํํ๋ ์ฝ๊ธฐ ์ ์ฉ ํ์ผ ์์คํ ๋ ์ด์ด๊ฐ ์์ด๋ ๊ฑด๋ฐ, ์ด๊ฑด ์ฐธ๊ณ ๋ง ํ์๋ฉด ๋ฉ๋๋ค.
์์์ ์ดํด๋ณธ ์ํ๋ค์ ์์ธํ ๋ณด๋ฉด ํ ๊ฐ์ง ๊ณตํต์ ์ด ์๋๋ฐ์. ๋ฐ๋ก 'FROM', 'COPY', 'RUN'๊ณผ ๊ฐ์ Dockerfile์ ์ง์์ด๊ฐ ์๋ ๊ณณ์์ ์ํ ๋ณํ, ์ฆ ๋ ์ด์ด๊ฐ ์์ฑ๋๋ค๋ ๊ฒ์ ๋๋ค.
์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋ ์ด์ ๋ ์๋์ ๊ฐ์ ๋ ๊ฐ์ง ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
1. ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋น๋ ์๋ ํฅ์
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ ์ด์ด๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๊ทธ๋์ ๋ง์ฝ ์์์ ์ดํด๋ณธ ์์ ์ฝ๋์์ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๋๋ก ์์ ๋๋๋ผ๋, ๊ธฐ์กด ๋ฒ ์ด์ค ์ด๋ฏธ์ง์ ๋ ์ด์ด๊ฐ ๊ทธ๋๋ก ์ฌ์ฉ๋์ด ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ ๋นจ๋ฆฌ ๋น๋ํ ์ ์๋ ๊ฒ์ ๋๋ค.
2. ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ ์ฅ ๊ณต๊ฐ ๊ฐ์
- ์ด๋ฏธ ๋ง๋ค์ด์ง ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ ์ด์ด๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ ์ ์์ต๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ฑฐ๋ ๊ฐ์ ธ์ฌ ๋(Pull), ํด๋น ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ฑํ๋ ๋ ์ด์ด ์ค์ ์ด๋ฏธ ๋ก์ปฌ์ ์กด์ฌํ๋ ๋ ์ด์ด๋ ์ฌ์ฌ์ฉํ๊ณ ์๋ก ํ์ํ ๋ ์ด์ด๋ง ๋ก์ปฌ์ ์ ์ฅํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ข ๋ ์ง๊ด์ ์ผ๋ก ์ดํดํ ์ ์๋๋ก ์๊น ์ดํด๋ณธ Dockefile ์์ ์ฝ๋๋ฅผ Docker build ๋ช ๋ น์ด๋ก ์ด๋ฏธ์ง ๋น๋ํด๋ดค์ต๋๋ค. ๋น๋๊ฐ ๋๋๋ฉด ์๋์ ๊ฐ์ ๋ฉ์์ง๊ฐ ํ์๋๋๋ฐ์.
์คํฌ๋ฆฐ์ท์ ๋นจ๊ฐ ์์๋ก ํ์ด๋ผ์ดํธํ ๋ถ๋ถ์ ๋ณด๋ฉด, ์ค์ ์์ ์ฝ๋์์ ๋ช ์๋ ์ง์์ด๋ค์ด ์คํ๋๋ฉด์ ๊ฐ๊ฐ์ ๋ ์ด์ด๋ก ์์ฑ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ง๊ธ๊น์ง ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ ์ด์ด์ ๋ํด ํต์ฌ ๋ด์ฉ๋ง ์ดํด๋ดค๋๋ฐ์. ์ด์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ํจ์จ์ฑ์ ์ฑ๊ธธ ์ ์๋ ํ์ ์์๋ณด๊ฒ ์ต๋๋ค.
๋ฐ๋ก ์ ์ฉํ ์ ์๋ ์ค์ง์ ์ธ ๋ด์ฉ์ผ๋ก๋ง ๊ตฌ์ฑํ์ผ๋ ๊ผญ ํ์ธํด๋ณด์ธ์.
โจ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ํจ์จ์ฑ์ ์ฑ๊ธฐ๋ ํ
1๏ธโฃ ๋ฉํฐ ์คํ ์ด์ง ๋น๋ ๊ธฐ๋ฒ ํ์ฉํ๊ธฐ
ํ๋์ Dockerfile์์ ์ฌ๋ฌ ๋น๋ ๋จ๊ณ๋ฅผ ์ ์ํ์ฌ ์ต์ข ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ด๋ ๊ธฐ๋ฒ์ ๋ฉํฐ ์คํ ์ด์ง ๋น๋ ๊ธฐ๋ฒ์ด๋ผ๊ณ ํฉ๋๋ค.
๊ฐ์ฅ ๋ง์ด ํ์ฉ๋๋ ํจํด์, ์ฒซ ๋ฒ์งธ ๋น๋ ๋จ๊ณ์์ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋๋ ์์กด์ฑ ์ค์น๋ฅผ ์๋ฃํ๊ณ , ๋ ๋ฒ์งธ ์ต์ข ๋จ๊ณ์์๋ ์ต์ํ์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์์ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋์ ํ์ํ ๊ฒฐ๊ณผ๋ฌผ๋ง ๋ณต์ฌํ๋ ๋ฐฉ์์ ๋๋ค.
์ฆ, ๋น๋์๋ง ํ์ํ ๋์ฉ๋ ํจํค์ง๋ ํ์ผ์ด ์ต์ข ์ด๋ฏธ์ง์ ํฌํจ๋์ง ์์ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๊ฐ ๋ํญ ๊ฐ์ํ๋ ๊ฒ์ด์ฃ .
์ข ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก Dockerfile ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋ ์์ ์ฝ๋๋ Go ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๋ ์ด๋ฏธ์ง์ ๋ฉํฐ ์คํ ์ด์ง ๋น๋ ๊ธฐ๋ฒ์ ์ ์ฉํ ๊ฒ์ธ๋ฐ์.
์ฒซ ๋ฒ์งธ ์คํ ์ด์ง์์ Go ์ธ์ด๋ก ๊ฐ๋ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๊ณ , ๋ ๋ฒ์งธ(์ต์ข ) ์คํ ์ด์ง์์ ๋๋ค๋ฅธ ๋ฒ ์ด์ค ์ด๋ฏธ์ง์ ์ด์ ์คํ ์ด์ง์์ ๋น๋๋ ๋ฐ์ด๋๋ฆฌ๋ง ๋ณต์ฌํ์ฌ ์ต์ข ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ฑํ๊ณ ์์ต๋๋ค.
'COPY --from'๋ผ๋ Dockerfile ์ง์์ด๊ฐ ๋ฏ์ค ์๋ ์๋๋ฐ์. ์ ๊ฐ ์๊ธฐ ์ฝ๊ฒ ์ฐจ๊ทผ์ฐจ๊ทผ ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค.
์ด์ ์คํ ์ด์ง์ ์ด๋ฏธ์ง(์์ ์์๋ 'golang:1.23' ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์์ ๊ตฌ์ฑ๋ 'builder'๋ผ๋ ์ด๋ฆ์ ์ด๋ฏธ์ง)์์ Go ๋ฐ์ด๋๋ฆฌ ๋น๋๋ฅผ ์๋ฃํ์ฃ ?
'builder' ๋ด Go ๋ฐ์ด๋๋ฆฌ ๋น๋์ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ค์ด์๋ ๊ฒฝ๋ก(์ ์์ ์์๋ 'bin/hello')์ ๋ด์ฉ์ ์ต์ข ์คํ ์ด์ง์ 'alpine:latest' ์ด๋ฏธ์ง ๋ด ๋์ผํ ์์น('/bin/hello')์ ๋ณต์ฌ('COPY')ํ๋ค๋ ์๋ฏธ์ ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ต์ข ์ด๋ฏธ์ง์๋ ์ด์ ์คํ ์ด์ง์์ ๋น๋ํ ๊ฒฐ๊ณผ๋ฌผ๋ง ๋ฐ์์ค๋ ๊ฑฐ์ฃ .
์ด๋ ๊ฒ ํ๋ฉด ์ต์ข ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ผ๋ฉด์, ์ ํ๋ฆฌ์ผ์ด์ ๋์์ ๋ถํ์ํ ๋ฐ์ดํฐ๋ ์ ์ธํ๊ธฐ ๋๋ฌธ์ ๋ณด์ ๊ณต๊ฒฉ ํ๋ฉด๋ ์ค์ด๋ ํจ๊ณผ๋ ๊ฐ์ด ์ป๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ํจ์จ๊ณผ ๋ณด์์ฑ์ ๋ชจ๋ ์ฑ๊ธธ ์ ์์ผ๋, ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ๋ ๋ฉํฐ ์คํ ์ด์ง ๋น๋ ๊ธฐ๋ฒ์ ๊ผญ ๊ณ ๋ คํด๋ด์ผ๊ฒ ์ฃ ?
2๏ธโฃ .dockerignore ํ์ผ ํ์ฉํ๊ธฐ
'.dockerignore' ํ์ผ์ Docker ๋น๋ ์ Docker ๋ฐ๋ชฌ์ผ๋ก ์ ์ก๋๋ ๋น๋ ์ปจํ ์คํธ(์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ๋น๋๋๋ ํ๊ฒฝ)์์ ์ ์ธํ ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ์๊ฒ ์ต์ํ '.gitignore' ํ์ผ๊ณผ ๋น์ทํ ์์์ผ๋ก ๋์ํ๋๋ฐ์.
'.dockerignore' ํ์ผ๋ก '. git' ํด๋๋ ๊ฐ๋ฐ ํ๊ฒฝ ์ ์ฉ ํ์ผ ๋ฑ ์ด๋ฏธ์ง ๋น๋์ ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋น๋ ์ปจํ ์คํธ์์ ์ ์ธ์ํค๋ฉด ๋ ๋น ๋ฅด๊ฒ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ์ ์์ฃ .
๋ํ ์ต์ข ์ด๋ฏธ์ง์ ์ต์ํ์ ํ์ ๋ฐ์ดํฐ๋ง ํฌํจ๋๋ค๋ ๊ฒ์ ์ด๋ฏธ์ง์ ๋ณด์์ฑ๋ ๋์ผ ์ ์๋ค๋ ๋ป์ด๋ฏ๋ก, '.dockerignore' ํ์ผ์ ์ ์ ํ ํ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
3๏ธโฃ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด ์ต์ํ
์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด ์ต์ํ๋ ๋ง ๊ทธ๋๋ก ๋ถํ์ํ ๋ ์ด์ด๋ฅผ ์ค์ด๋ ๊ฒ์ ๋๋ค. ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ ์ด์ด๊ฐ ๋ง์์ง์๋ก ๋น๋ ์๋๋ ๋๋ ค์ง๊ณ ์ ์ฅ ๊ณต๊ฐ์ ๋์ด๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ ์ํ๋ค๋ณด๋ฉด ๋น๋ ๊ณผ์ ์์ ๋ค์ํ ๋ช ๋ น์ด๋ฅผ ์คํํด์ผ ํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ํจํค์ง๋ฅผ ์ ๋ฐ์ดํธํ๋ 'apt-get update' ๋ช ๋ น์ด๋ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํ๋ 'apt-get install' ๋ช ๋ น์ด, ๋ถํ์ํ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ 'rm' ๋ช ๋ น์ด๊น์ง ๋ชจ๋ Dockerfile์ 'RUN' ์ง์์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ์.
์ด๋ ๊ฐ ๋ช ๋ น์ด๋ฅผ ๋ณ๋์ 'RUN' ์ง์์ด๋ก ์คํํ๋ฉด ๊ทธ๋งํผ ์๋ก์ด ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ ์์ฑํ๊ฒ ๋๋ ๊ฒ์ ๋๋ค. ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ต์ ํ๋ ์ฌ๊ธฐ์๋ถํฐ ์์๋ฉ๋๋ค.
ํจํค์ง ์ค์น ๊ณผ์ ์ ํ์ํ ๋ช ๋ น์ด๋ค์ด ์๋์ ๊ฐ์ด ๊ฐ๊ฐ์ 'RUN' ์ง์์ด๋ก ์ ์๋์ด์๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ํจํค์ง ์ค์น ๊ณผ์ ์์ ์ด๋ฏธ์ง ๋ ์ด์ด๊ฐ ์ด 2๊ฐ ์์ฑ๋๋๋ฐ์.
์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด ์ต์ํ๋ฅผ ์ํด ์์๋๋ก '&&'๋ก ๋ฌถ์ด ํ๋์ 'RUN' ์ง์์ด ์์์ ์ ์ํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ์์ ํ๋ฉด ํจํค์ง ์ค์น ๊ณผ์ ์ ํ์ํ ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ 1๊ฐ๋ก ์ค์ผ ์ ์์ด ๋น๋ ์๋๊ฐ ํฅ์๋ฉ๋๋ค.
4๏ธโฃ ์์ฃผ ๋ณ๊ฒฝ๋ ๊ฒ ๊ฐ์ ์ง์์ด๋ Dockerfile ์๋์ ์ ์ํ๊ธฐ
์ง๊ธ๊น์ง ์์๋ณธ ์ด๋ฏธ์ง ๋ ์ด์ด์ ์ฑ์ง์ ์ด์ฉํด์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋น๋ ์๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ์ด ํ ๊ฐ์ง ๋ ์์ต๋๋ค.
๋ฐ๋ก Dockerfile์ ์ ์ํ๋ ์ง์์ด์ ์์๋ฅผ ์ด๋ฏธ์ง ๋น๋์ ์ ๋ฆฌํ๊ฒ ์ง์ ํ๋ ๊ฒ์ ๋๋ค.
Dockerfile์ ์ง์์ด ์์์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋น๋์ ์ด๋ค ๊ด๊ณ๊ฐ ์๋๊ณ ์? ๋ฐฉ๊ธ๊น์ง ์ดํด๋ดค๋ ์ด๋ฏธ์ง ๋ ์ด์ด์ ๊ฐ๋ ์ ๋ํด ์ฝ๊ฐ ๋ค๋ฅธ ๊ด์ ์์ ๋ฐ๋ผ๋ณด๋ฉด ๊ธ๋ฐฉ ์ดํดํ์ค ์ ์์ต๋๋ค.
์ด๋ฏธ์ง ๋ ์ด์ด๋ ์ด๋ฏธ์ง ๋น๋ ๊ณผ์ ์์ Dockerfile์ ์ง์์ด๋ค์ด ์คํ๋ ๋๋ง๋ค ์๋ก ์์ฑ๋๋ค๊ณ ํ์ฃ ? ์ด๊ฑธ ๋ฐ๊ฟ์ ์ด์ผ๊ธฐํ๋ฉด, ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ ๋ ์ด์ด๋ ์ด์ ๋ ์ด์ด ์์ ์๋ก์ด ํ์ผ ๋ณ๊ฒฝ์ด ์์ ๋ ์ด๋ฅผ ์ ์ฅํ๋ ์ญํ ์ ์ํํ๋ ๊ฒ์ ๋๋ค.
A-B-C-D๋ก ์ด์ด์ง๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋ฅผ ๊ฐ์ง ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณผ๊ฒ์.
๋ง์ฝ D ๋ ์ด์ด์ ์๋ก์ด ๋ณ๊ฒฝ์ด ์์ด ์ด๋ฏธ์ง๋ฅผ ์๋ก ๋น๋ํ๋ค๋ฉด, ๊ธฐ์กด์ ๊ฐ์ง๊ณ ์๋ A, B, C ๋ ์ด์ด๋ฅผ ๊ทธ๋๋ก ์ฌ์ฌ์ฉํ๊ณ D'๋ผ๋ ์๋ก์ด ๋ ์ด์ด๋ง ์์ฑํ๊ฒ ๋ฉ๋๋ค.
ํ์ง๋ง ๋ง์ฝ C ๋ ์ด์ด์ ์๋ก์ด ๋ณ๊ฒฝ์ด ์๋ค๋ฉด, ๊ธฐ์กด์ A, B ๋ ์ด์ด๋ง ์ฌ์ฌ์ฉํ๊ณ C'์ D'๋ผ๋ ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์์ฃผ ๋ณ๊ฒฝ๋ ๊ฒ์ผ๋ก ์์๋๋ ๋ ์ด์ด์ ์ง์์ด๋ฅผ ์ต๋ํ Dockerfile์ ํ๋จ์ ๋ฌ์ผ ์ด๋ฏธ์ง ๋น๋ ์๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค.
์๊น '๐์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ ์ด์ด๋?'์์ ์ดํด๋ดค๋ ์์๋ฅผ ๋ค์ ๊ฐ์ ธ์๋ณด๊ฒ ์ต๋๋ค.
1. ๋ฒ ์ด์ค ์ด๋ฏธ์ง์ ์ด๊ธฐ ์ํ (FROM)
2. Go ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ณต์ฌ (COPY)
3. Go ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํด์ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ (RUN)
์ด๋ ๊ฒ 3๊ฐ์ง ๋ ์ด์ด๊ฐ ์กด์ฌํ๋ ์ด๋ฏธ์ง์ Dockerfile์ 'Go ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋์ ํ์ํ ํจํค์ง ์ค์น'ํ๋ ์ง์์ด(RUN)๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด๋ณผ๊ฒ์.
์๋ก์ด ์ง์์ด๋ ์ ์ง์์ด๋ค ์ค ์ด๋ ์์น์ ๋์ด์ผ ํ ๊น์?
์๋ง ์ค์นํด์ผ ํ๋ ํจํค์ง๋ณด๋ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ๋ ์์ฃผ ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์, ์๋์ ๊ฐ์ ์์๋ก Dockerfile ์ง์์ด๋ฅผ ์ ์ํด์ผ ํ ๊ฒ์ ๋๋ค.
1. ๋ฒ ์ด์ค ์ด๋ฏธ์ง์ ์ด๊ธฐ ์ํ (FROM)
2. Go ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋์ ํ์ํ ํจํค์ง ์ค์น (RUN)
3. Go ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ณต์ฌ (COPY)
4. Go ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํด์ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ (RUN)
์ ์์๋ผ๋ฉด Go ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋์ด ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์๋ก ๋น๋ํ๋๋ผ๋ ๊ธฐ์กด 1๋ฒ๊ณผ 2๋ฒ ๋ ์ด์ด๋ ์ฌ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋ ๋นจ๋ฆฌ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ์ ์๊ฒ ์ฃ .
๐์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ณด์๊ณผ ํจ์จ์ฑ์ ์ฑ๊ธฐ๋ฉด ์ป์ ์ ์๋ ์ด์ ๋ค
์ง๊ธ๊น์ง ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ณด์์ฑ๊ณผ ํจ์จ์ฑ์ ๋ํด ์ดํด๋ดค๋๋ฐ์. ์ด๋ ๊ฒ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ '์' ๋ง๋ค๋ฉด ์ด๋ค ์ด์ ์ด ์์๊น์? ์๋์ ๊ฐ์ด 4๊ฐ์ง๋ก ์ ๋ฆฌํ ์ ์์ต๋๋ค.
1. ๋ณด์ ์ฌ๊ณ ๋ฐ์ ์ ํผํด ๊ฐ์
- ๋ง์ฝ ๋ณด์ ์ฌ๊ณ ๊ฐ ๋ฐ์ํ๋๋ผ๋, ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ด์์์ ๊ถํ์ด ๋์ง ์๊ณ ๊ณต๊ฒฉ ํ๋ฉด๋ ์ ๊ธฐ ๋๋ฌธ์, ๋ณด์ ์ฌ๊ณ ์ ํผํด๋ฅผ ์ค์ผ ์ ์๊ณ ๋น ๋ฅธ ๋์์ด ๊ฐ๋ฅํด์ง๋๋ค.
2. ๋น์ฉ ์ ๊ฐ ๋ฐ ๋ฐฐํฌ ํจ์จ์ฑ ์ฆ๊ฐ
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ๊ฐ๋ฒผ์์ ธ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ์๋๊ฐ ํฅ์๋๊ณ , ์คํ ๋ฆฌ์ง์ ๋คํธ์ํฌ ๋น์ฉ๋ ์ ๊ฐํ ์ ์์ต๋๋ค.
- Auto Scaling์ด ๋ ๋ ์ธ์คํด์ค ๋ถํ ๊ณผ ์๋น์ค ์ค๋น ์๊ฐ์ด ๊ฐ์ํ์ฌ ๋ฐฐํฌ ํจ์จ์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
3. ๊ฐ๋ฐํ๊ณผ ์ด์ํ์ ์ ๋ฌด ํจ์จ์ฑ ๊ฐ์
- ๊ฐ๋ฐํ์ ๋ก์ปฌ์์ ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋/ํ ์คํธ ๊ฐ๋ฅํฉ๋๋ค.
- ์ด์ํ์ ์๊ณ ์์ธก ๊ฐ๋ฅํ ์ด๋ฏธ์ง ๋๋ถ์ ๋ฐฐํฌ์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํด์ง๋๋ค.
4. ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ํจ์จ์ ์ธ ์ด์ ๊ฐ๋ฅ
- Serverless ํ๊ฒฝ์์์ ์ฝ๋ ์คํํธ ์๊ฐ ๋จ์ถ์ ๋์์ด ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ณ ๋น์ฉ ํจ์จ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
๐ญ๋ง์น๋ฉฐ...
์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ ๋ฐ์ดํธ ๋ฑ์ ๋ฐ์ํ ์ ๊ธฐ์ ์ธ ์ฌ๋น๋์ Dockerfile ๋ณ๊ฒฝ์ ๋ํ ๋ฆฌ๋ทฐ๋ ์ด๋ฏธ์ง ํ์ง์ ๊พธ์คํ ๋์ด๋ ๋ฐ์ ํ์์ ๋๋ค.
์ด๋ฏธ ํด๋ผ์ฐ๋์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๊ฐ ๋์คํ๋ ์์ฆ, ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ์ค์์ฑ์ ์๋ฌด๋ฆฌ ๊ฐ์กฐํด๋ ๋ถ์กฑํ ํ ๋ฐ์.
์งํ ์ค์ธ ํ๋ก์ ํธ์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ํจ์จ์ฑ ๊ด์ ์์ ๊ฐ์ ํ ์ ์ ์๋์ง ํ๋ฒ ์ดํด๋ณด๋ ๊ฑด ์ด๋จ๊น์?
IT ์ ๊ณ์์ ํจ์จ์ฑ์ ํ์์ธ ๋งํผ, ๊ฐ์ธ์ ์ฑ์ฅ๋ฟ๋ง ์๋๋ผ ํ์ ๊ฐ๋ฐ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ ๊ธฐํ๊ฐ ๋ ํ ๋๊น์!
์ค๋ ์ด์ผ๊ธฐ๊ฐ ์ฌ๋ฌ๋ถ์ ์ฌ์ ์ ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ทธ๋ผ, ๋ค์ ์์์ง์์ ๋ณด๋ค ์์ฐจ๊ณ ํฅ๋ฏธ๋ก์ด ๋ด์ฉ์ผ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค.
์ค๋๋ ๊ฐ์ฌํฉ๋๋ค, ๊ตฌ๋ ์๋ ๐บ
๐References
- https://docs.docker.com/get-started/docker-concepts/building-images/understanding-image-layers/
- https://codefresh.io/blog/docker-anti-patterns/
์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์