์๋ ํ์ธ์ ๊ตฌ๋ ์๋, DevOps ์์๊ณผ ๊ธฐ์ ์ง์์ ์ ๋ฆฌํด์ ๊ณต์ ํด๋๋ฆฌ๋ DevOps ์ฌํ์ ์ํ ์์์ง์ ๋๋ค.
Docker ์ด๋ฏธ์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ ์ ์๋ ๋ ๋ฆฝ๋ ํ๊ฒฝ์ ์ ๊ณตํด์ ์ด๋ฏธ ๋ง์ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๊ณ ์๋๋ฐ์.
์ด๋ฏธ ๋๊ตฐ๊ฐ ๋ง๋ค์ด๋ Docker ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ์ง๋ง, ์ง์ Dockerfile์ ์์ฑํด์ Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๊ฒฝ์ฐ๋ ๋ง์ฃ .
๋์ฑ ์์ ํ Docker ์ด๋ฏธ์ง๋ฅผ ์ ์ํ ์ ์๋ Dockerfile ์์ฑ ํ์ด ์๋ค๋ ์ฌ์ค, ์๊ณ ๊ณ์ จ๋์?
โ ๏ธDockerfile์ ์์ฑํ ๋ ๋ณด์์ ์ ๊ฒฝ์จ์ผ ํ๋ ์ด์
์ค๋๋ ๋๋ถ๋ถ์ ์น ์๋น์ค๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค. ํ๋์ ์ปค๋ค๋ ์๋น์ค๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด ์๋, ๊ธฐ๋ฅ์ด๋ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ๋๋ ์ง ์์ ์๋น์ค ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ฐฐํฌ ๋ฐ ์ด์ํ๋ ๋ฐฉ์์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ผ๊ณ ํ๋๋ฐ์.
์ด๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๊ฐ๊ฐ์ Docker ์ปจํ ์ด๋ ๋ด๋ถ์์ ๋์ํ๋๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์ค์ ๋ก ๋ฐฐํฌ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ์ธ๋ถ ๊ณต๊ฒฉ์ ์ทจ์ฝํ๋ค๋ฉด... ์๊ฐ๋ง ํด๋ ์์ฐํ ๋ณด์ ์ฌ๊ณ ๋ก ์ด์ด์ง๊ฒ ์ฃ .
๊ทธ๋์ ์ฐ๋ฆฌ๋ Dockerfile์ ์์ฑํ ๋๋ถํฐ ๋ณด์์ ์ ๊ฒฝ์จ์ผ ํฉ๋๋ค.
๐๋์ฑ ์์ ํ ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ Dockerfile ์์ฑ ํ 5๊ฐ์ง
๊ทธ๋ ๋ค๋ฉด Dockerfile์ ์ด๋ป๊ฒ ์์ฑํด์ผ ํ ๊น์? ์ฌ๊ธฐ ๋ณด์์ ๊ฐํ Dockerfile ์์ฑ ํ 5๊ฐ์ง๋ฅผ ์๊ฐํด๋๋ฆฝ๋๋ค.
Multi-Stage ๋ฐฉ์์ผ๋ก ๋น๋
- Dockerfile ๋ด์์ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋ ๋ช ๋ น์ด ์คํ ํ ๋์ค๋ ์ต์ข ์ฐ์ถ๋ฌผ์ ๋๋ค๋ฅธ Base Image๋ก ๋ณต์ฌํ๊ณ , ํด๋น Base Image๋ฅผ ์ต์ข Docker Image๋ก ๋น๋ํ๋ ๊ธฐ๋ฒ์ Multi-Stage๋ผ๊ณ ํ๋๋ฐ์.
- Multi-Stage ๋ฐฉ์์ผ๋ก ๋น๋๋ Docker ์ด๋ฏธ์ง ๋ด์๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋์ ํ์ํ ์ต์ํ์ ์์๋ง ๋ด๊ฒจ์์ผ๋ฏ๋ก, ์์ฐ์ค๋ฝ๊ฒ ์ ์ฌ๋ ๋ณด์ ์ทจ์ฝ์ ๋ ๋ ์ ์ด์ง๋๋ค.
ํ์์๋ ํจํค์ง ์ ๊ฑฐ
- Docker ์ปจํ ์ด๋ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋์ ํ์์๋ ํจํค์ง๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ ์ญ์ ์ ์ฌ ๋ณด์ ์ทจ์ฝ์ ์ ์ค์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ๊ถ์ฅ๋ฉ๋๋ค.
Root๊ฐ ์๋ ๋ณ๋์ ์ฌ์ฉ์๋ฅผ ์์ฑ ๋ฐ ์ฌ์ฉ
- Container ๋ด์ Root ๊ณ์ ์ด ์ฌ์ฉ๋ ๊ฒฝ์ฐ, ์นจ์ ์ฌ๊ณ ๋ฐ์ ์ ํผํด๊ฐ ์ปค์ง ์ ์์ต๋๋ค. ๊ทธ๋์ ๊ถํ์ด ์ ํ๋ ๋ณ๋์ ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค.
Container ๋ด ๋ฏผ๊ฐํ ํ์ผ๋ค์ Read Only๋ก
- ๋ฐฐํฌ ์ดํ Docker Container ๋ด์์ ์ถํ ์์ ์ด ํ์ํ์ง ์๋ ํ์ผ๋ค์ 'Read Only'๋ก ์ค์ ํ๋ฉด ๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
Shell ์ ๊ทผ ์ ๊ฑฐ
- ์ปจํ ์ด๋ ์์์ ์คํ ๊ฐ๋ฅํ sh๋ bash ๋ฑ์ Shell์ ๋์ ์ค์ธ ์ปจํ ์ด๋ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ ๋ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ง๋ง, ์ด๋ฐ ํต๋ก๋ฅผ ์ ๊ฑฐํ๋ฉด ์ปจํ ์ด๋ ๋ด๋ถ ์นจ์ ์ด ์ด๋ ค์์ ธ ๋ณด์์ฑ์ด ๋์์ง๋๋ค.
- ํ์ง๋ง Shell ์ ๊ทผ์ ์ ๊ฑฐํ ๋ ์๋ ์ฃผ์์ฌํญ์ ๋ํด ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง์์ ๋์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด Shell์ ์ฌ์ฉํ๊ณ ์์ง ์์์ง ํ์ธํด์ผ ํฉ๋๋ค.
- ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ฐฐํฌํ ๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ ์ ์๋ ๋ค๋ฅธ ๋์์ ๋ฏธ๋ฆฌ ๋ง๋ จํด์ผ ํฉ๋๋ค.
๐์ปจํ ์ด๋ ๋ณด์์ ์งํฌ ์ ์๋ ๋๋ค๋ฅธ ๋ฐฉ๋ฒ
์ง๊ธ๊น์ง Dockerfile์ ์์ฑํ ๋ ๋ณด์์ฑ์ ๋์ด๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ดค๋๋ฐ์. ๋ง์ฝ Docker ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋น๋ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋, ์ด๋ฏธ ๋๊ตฐ๊ฐ ์ ์ํ Docker ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ๋ ๊ทธ ์ด๋ฏธ์ง๊ฐ ์์ ํ์ง๋ ์ด๋ป๊ฒ ์ ์ ์์๊น์?
์ด๋ด ๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ์ปจํ ์ด๋ ๋ณด์ ์ค์บ๋์ ๋๋ค. ๋ํ์ ์ธ ์ปจํ ์ด๋ ๋ณด์ ์ค์บ๋ ํด๋ก๋ Trivy์ Clair๊ฐ ์๋๋ฐ์.
์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ณด์ ์ค์บ๋์ ๋ํด์๋ ์ง๋ ์์์ง์์ ๋ค๋ฃฌ ์ ์ด ์๊ธฐ ๋๋ฌธ์ ํน์ ๊ด์ฌ ์์ผ์๋ค๋ฉด ์๋ ๋งํฌ์์ ํ์ธํด๋ณด์ธ์.๐
๐ญ๋ง์น๋ฉฐ...
์ค๋์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ณด์์ ์ํ Dockerfile ์์ฑ ํ 5๊ฐ์ง์ ์ปจํ ์ด๋ ๋ณด์ ์ค์บ๋์ ๋ํด ๋ค๋ค๋ดค๋๋ฐ์.
ํน์ ์ด๋ฒ ๋ด์ฉ ๊ด๋ จํด์ ๋ ๊ถ๊ธํ ์ ์ด ์์ผ์๋ค๋ฉด ์๋ ๋ฉ์ผ๋ฆฌ ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์.๐
๊ทธ๋ผ, ๋ค์ ์์์ง์์ ๋ณด๋ค ์์ฐจ๊ณ ํฅ๋ฏธ๋ก์ด ๋ด์ฉ์ผ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค.
์ค๋๋ ๊ฐ์ฌํฉ๋๋ค, ๊ตฌ๋ ์๋ ๐บ
๐References
์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์