๋ชฉ์ฐจ
ย Docker Image
ย What is Docker Image?
์ ํ๋ฆฌ์ผ์ด์
์ ํจํค์งํ๊ณ ์ ์กํ๊ธฐ ์ํด ๋์ปค๋ ๋์ปค ์ด๋ฏธ์ง(Docker Image)๋ฅผ ์ฌ์ฉํ๋ค. ๋์ปค ์ด๋ฏธ์ง๋ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ๊ณผ ํ์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ํฌํจํ๋ ํ์ผ๋ก, ๋ฐํ์ ํ๊ฒฝ์ ์ํ ์ผ์ ์ ํ
ํ๋ฆฟ์ด๋ค
ย Layered Architecture
ย Layer
๋์ปค ์ด๋ฏธ์ง๋ ๋ ์ด์ด ๊ตฌ์กฐ(Layered Architecture)๋ฅผ ๊ฐ๋๋ค. ๋์ปค ์ด๋ฏธ์ง๋ ๋ค์ํ ๋ ์ด์ด๋ฅผ ํฌํจํ๋ฉฐ, ์ด๋ฏธ์ง ๋ ์ด์ด๋ ๋ชจ๋ ์ฝ๊ธฐ ์ ์ฉ(read-only)์ด๋ค. ๊ฐ ๋ ์ด์ด๋ ID๋ฅผ ๊ฐ์ง๋ฉฐ ํ์ ์ด๋ฏธ์ง์ ๋ถ๋ชจ ID๋ฅผ ํฌํจํ ์ ์๋ค. ์๋ก์ด ๋ ์ด์ด๋ ์ด์ ๋ ์ด์ด ์์ ์์ด๋ฉฐ, ํ์ ๋ ์ด์ด์ ํ์ผ์ ๋ฎ์ด์ธ(overwrite) ์ ์๋ค.
์ด๋ฏธ์ง๋ ์๋ก ๋ค๋ฅธ ์ปจํ
์ด๋ ๊ฐ์ ๊ณต์ ๋ ์ ์๋ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง(base image)๋ ์ปจํ
์ด๋์์ ์ฌ์ฉ๋๋ Linux์ ๋ถํธ ํ์ผ ์์คํ
(bootfs)์ ํฌํจํ๋ ์ด๋ฏธ์ง์ด๋ค(ํธ์คํธ์ฉ ์๋). ์ด๋ฐ ํน์ํ ์ข
๋ฅ์ ์ด๋ฏธ์ง๋ Dockerfile์์ FROM scatch ์ ์๋ก ์์ํด์ผํ๋ค.
์ต์ข
๋ ์ด์ด๋ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ(Writable) ์ปจํ
์ด๋ ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋๋ค. ์ด ๋ ์ด์ด๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ด๋ฆ์ ๊ฐ์ง๋ค. 1.0.0 ํ๊ทธ๋ฅผ ๊ฐ์ง apache๋ผ๋ ์ด๋ฏธ์ง๋ ID๊ฐ 3fa76543์ธ curl ์ด๋ฏธ์ง์ ์์กดํ๋ค. ์ด curl ์ด๋ฏธ์ง๋ ์ด๋ฆ์ด ์์ด ์ง์ ์ฌ์ฉํ ์ ์๋ค.
ย Union File System
UnionFS(Union File System)์ ๋์์ผ๋ก ์ด๋ฌํ ์ด๋ฏธ์ง ๋ ์ด์ด๋ ํ๋์ ์ด๋ฏธ์ง๋ก ํตํฉ๋์ด apache๋ฅผ ์คํํ๋ ์ปจํ
์ด๋๋ก ์คํ๋๋ค. ์ปจํ
์ด๋๋ ํ์ผ๋ค์ ํ๋์ ํ์ผ ์์คํ
์ผ๋ก ์ธ์ํ์ง๋ง, ๋ ์ด์ด๊ฐ ๋ค๋ฅธ ๋ ์ด์ด์ ํ์ผ์ ๋ฎ์ด์ฐ๋ฉด, ์ปจํ
์ด๋๋ ๊ฐ์ฅ ์ต๊ทผ(latest)์ด๋ ๊ฐ์ฅ ์(highest) ๋ฒ์ ๋ง ๋ณผ ์ ์๋ค(top to down).
ย Cache
์๋ก์ด ์ด๋ฏธ์ง๊ฐ ์์ฑ๋์ด ๋ ํฌ์งํ ๋ฆฌ(Docker Hub, Artifactory ๋ฑ)์ ํธ์ฌ๋๋ฉด Docker๋ ๊ฐ ๋ ์ด์ด์ ํด์๋ฅผ ๊ธฐ์กด ๋ ์ด์ด์ ๋น๊ตํ๋ค. ์ด๋ฏธ ํด๋น ๋ ์ด์ด๊ฐ ์กด์ฌํ๋ค๋ฉด, ์ด ๋ ์ด์ด๋ ๋จ์ํ ์ฐธ์กฐ๋ง๋๊ณ ๋ ๋ฒ ์ ์ฅ๋์ง๋ ์๋๋ค. ์ด๋ก ์ธํด ์คํ ๋ฆฌ์ง ๊ณต๊ฐ์ ์๋ ์ ์๋ค.
์์๋ก, tomcat:8.5๋ฅผ pullํ๊ณ tomcat:9.0์ pullํ๋ฉด ์๋ก ์ถ๊ฐ๋๊ฑฐ๋ ์์ ๋ ๋ ์ด์ด๋ง pullํ๊ณ ์ด๋ฏธ ์กด์ฌํ๋ ๋ ์ด์ด๋ ์ฌ์ฌ์ฉ๋๋ฏ๋ก ์ค๋ณต์ผ๋ก pullํ์ง ์๋๋ค.
ย Integrate Command
Dockerfile์ ๊ฐ ๋ช
๋ น์ด๋ ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑํ๋๋ฐ, ์ฒ๋ฆฌํ ์ ์๋ ๋ ์ด์ด ์์๋ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋ช
๋ น์ด๋ฅผ ๋ฌถ์ด RUN command A && command B && command C ์ฒ๋ผ ์คํํด ๋ถํ์ํ ๋ ์ด์ด ์์ฑ์ ํผํด์ผ ํ๋ค.
๋ฐ๋ก ์คํํ๊ฒ๋๋ฉด ๋ ์ด์ด๊ฐ ๊ทธ๋งํผ ์ถ๊ฐ๋๋ ๊ฒ์ด์ง๋ง ๋ ์ด์ด๋ ๊ฐ์ ์๋จ์ ๋ ์ด์ด๋ง ๋ณด๊ธฐ ๋๋ฌธ์ &&๋ฅผ ํตํด์ overlay์ํค๋ฉด ๊ฐ์ฅ ๋ง์ง๋ง ์คํ ๋ช
๋ น๋ง ๋ฐ๋ผ๋ณด๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ ๋ ์ด์ด๋ฅผ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์ ์ต์ข
์ปจํ
์ด๋ ์ด๋ฏธ์ง๊ฐ ์์์ง๋ค.
RUN apt-get update && \
apt-get install -y package-name && \
rm -rf /var/lib/apt/lists/*
Docker
๋ณต์ฌ
์ Dockerfile์ฒ๋ผ ๋ฌถ์ด ์คํํ๊ฒ ๋๋ฉด ์
๋ฐ์ดํธ์ ํจํค์ง ์ค์น, ๋ถํ์ํ ์บ์ ํ์ผ ์ญ์ ๊ฐ ๋ชจ๋ ํ๋์ ๋ ์ด์ด์์ ์คํ๋๋ค. ํ์ง๋ง ๋ฐ๋ก ์คํํ๊ฒ ๋๋ค๋ฉด ์ด 3๊ฐ์ ๋ ์ด์ด๊ฐ ์ ์ฅ๋ ๊ฒ์ด๋ค.
ย Docker Container
๋์ปค๊ฐ ์ด๋ฏธ์ง๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ, ํด๋น ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ
์ด๋๋ฅผ ์์ฑํ๋ค. ์ด๋ฏธ์ง๊ฐ ์ฝ๊ธฐ ์ ์ฉ(read-only)์ด๊ธฐ ๋๋ฌธ์, ์ปจํ
์ด๋๋ ์ด๋ฏธ์ง์ ๋ชจ๋ ์ฝ๊ธฐ ์ ์ฉ ๋ ์ด์ด์ ๊ฐ ์ปจํ
์ด๋์ ๊ณ ์ ํ ์ฐ๊ธฐ ๊ฐ๋ฅ(writable) ๋ ์ด์ด๋ฅผ ํฌํจํ๋ ๋ฐํ์ ํ๊ฒฝ์ด๋ค.
์ปจํ
์ด๋์ ๋ด์ฉ์ ๋ฏธ๋ฆฌ ์ ์๋ ์ ์์ผ๋ฉฐ, ๋์ค์ Log๋ ์ ํ๋ฆฌ์ผ์ด์
์ PID ๋ฑ๊ณผ ๊ฐ์ ๋ด์ฉ์ ํฌํจํ ์ ์๋ค. ์ ์ปจํ
์ด๋๊ฐ ์์๋ ๋๋ง๋ค ์๋ก์ด ์ฐ๊ธฐ ๊ฐ๋ฅ ๋ ์ด์ด๊ฐ ์์ฑ๋๋ค.
์ด ๊ฐ๋
์ ๋ชจ๋ ํธ์คํธ ์์คํ
์์ ํ๊ฒฝ์ด ๋์ผํ๋๋ก ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ-ํ
์คํธ-ํ๋ก๋์
๊ฐ์ ์ถ์ ๊ฐ๋ฅํ๊ณ ๊ตํ ๊ฐ๋ฅํ๋ค. ํ๋ก๋์
์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด, ๋์ผํ ์ด๋ฏธ์ง์ ๋์ผํ ๊ตฌ์ฑ์ผ๋ก ๊ฐ๋ฐ ๋จ๊ณ์์ ์ฌํํ ์ ์๋ค.