๐ณ Docker ์ดํด๋ณด๊ธฐ
๐พ ๋์ปค ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
๐ค ๋์ปค๋?
๋์ปค๋ ์ปจํ ์ด๋ ๊ธฐ๋ฐ์ ์คํ์์ค ๊ฐ์ํ ํ๋ซํผ์ ๋๋ค.
์ปจํ ์ด๋(Container)
์ปจํ ์ด๋๋ ๊ฒฉ๋ฆฌ๋ ๊ณต๊ฐ์์ ํ๋ก์ธ์ค๊ฐ ๋์ํ๋ ๊ธฐ์ ์ ๋๋ค. ๊ฐ์ํ ๊ธฐ์ ์ ํ๋์ง๋ง ๊ธฐ์กด๋ฐฉ์๊ณผ๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๊ธฐ์กด์ ๊ฐ์ํ ๋ฐฉ์์ ์ฃผ๋กย OS๋ฅผ ๊ฐ์ํ ํ์์ต๋๋ค. VMware๋ VirtualBox๊ฐ์ ๊ฐ์๋จธ์ ์ ํธ์คํธ OS์์ ๊ฒ์คํธ OS ์ ์ฒด๋ฅผ ๊ฐ์ํํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ ์ฌ๋ฌ๊ฐ์ง OS๋ฅผ ๊ฐ์ํ(๋ฆฌ๋ ์ค์์ ์๋์ฐ๋ฅผ ๋๋ฆฐ๋ค๋๊ฐ) ํ ์ ์๊ณ ๋น๊ต์ ์ฌ์ฉ๋ฒ์ด ๊ฐ๋จํ์ง๋ง ๋ฌด๊ฒ๊ณ ๋๋ ค์ ์ด์ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์์์ต๋๋ค.
OS ๊ฐ์ํ๋ ์ฑ๋ฅ๋ฌธ์ ๊ฐ ์์๊ณ ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํดย ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌย ํ๋ ๋ฐฉ์์ด ๋ฑ์ฅํฉ๋๋ค.
๋ฆฌ๋ ์ค์์๋ ์ด ๋ฐฉ์์ ๋ฆฌ๋ ์ค ์ปจํ ์ด๋๋ผ๊ณ ํ๊ณ ๋จ์ํ ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌ์ํค๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ๋์ํฉ๋๋ค. CPU๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฑ ํ๋ก์ธ์ค๊ฐ ํ์ํ ๋งํผ๋ง ์ถ๊ฐ๋ก ์ฌ์ฉํ๊ณ ์ฑ๋ฅ์ ์ผ๋ก๋ ๊ฑฐ์ ์์ค์ด ์์ต๋๋ค.
ํ๋์ ์๋ฒ์ ์ฌ๋ฌ๊ฐ์ ์ปจํ
์ด๋๋ฅผ ์คํํ๋ฉด ์๋ก ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋
๋ฆฝ์ ์ผ๋ก ์คํ๋์ด ๋ง์น ๊ฐ๋ฒผ์ด Virtual Machine์ ์ฌ์ฉํ๋ ๋๋์ ์ค๋๋ค.
์ด๋ฏธ์ง(Image)
๋์ปค์์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋ ์ ์ปจํ ์ด๋์ ํจ๊ป ์ด๋ฏธ์ง๋ผ๋ ๊ฐ๋ ์ ๋๋ค.
์ด๋ฏธ์ง๋ย ์ปจํ ์ด๋ ์คํ์ ํ์ํ ํ์ผ๊ณผ ์ค์ ๊ฐ๋ฑ์ ํฌํจํ๊ณ ์๋ ๊ฒ์ผ๋ก ์ํ๊ฐ์ ๊ฐ์ง์ง ์๊ณ ๋ณํ์ง ์์ต๋๋ค.(Immutable)
์ปจํ ์ด๋๋ ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ํ๋ผ๊ณ ๋ณผ ์ ์๊ณ ์ถ๊ฐ๋๊ฑฐ๋ ๋ณํ๋ ๊ฐ์ ์ปจํ ์ด๋์ ์ ์ฅ๋ฉ๋๋ค. ๊ฐ์ ์ด๋ฏธ์ง์์ ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ์ ์๊ณ ์ปจํ ์ด๋์ ์ํ๊ฐ ๋ฐ๋๊ฑฐ๋ ์ปจํ ์ด๋๊ฐ ์ญ์ ๋๋๋ผ๋ ์ด๋ฏธ์ง๋ ๋ณํ์ง ์๊ณ ๊ทธ๋๋ก ๋จ์์์ต๋๋ค.
ubuntu ์ด๋ฏธ์ง๋ ubuntu๋ฅผ ์คํํ๊ธฐ ์ํ ๋ชจ๋ ํ์ผ์ ๊ฐ์ง๊ณ ์๊ณ MySQL ์ด๋ฏธ์ง๋ debian์ ๊ธฐ๋ฐ์ผ๋ก MySQL์ ์คํํ๋๋ฐ ํ์ํ ํ์ผ๊ณผ ์คํ ๋ช ๋ น์ด, ํฌํธ ์ ๋ณด๋ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋ง๊ทธ๋๋ก ์ด๋ฏธ์ง๋ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ธฐ ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ์์กด์ฑ ํ์ผ์ ์ปดํ์ผํ๊ณ ์ด๊ฒ์ ๊ฒ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค. ์ด์ ์๋ก์ด ์๋ฒ๊ฐ ์ถ๊ฐ๋๋ฉด ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ๊ณ ์ปจํ ์ด๋๋ฅผ ์์ฑ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋์ปค ์ด๋ฏธ์ง๋ย Docker hub์ ๋ฑ๋กํ๊ฑฐ๋ย Docker Registryย ์ ์ฅ์๋ฅผ ์ง์ ๋ง๋ค์ด ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๐ฏ ํน์ง
๋ ์ด์ด(Layer) ์ ์ฅ๋ฐฉ์
๋์ปค ์ด๋ฏธ์ง๋ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ธฐ ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ณดํต ์ฉ๋์ด ์๋ฐฑMB์ ์ด๋ฆ ๋๋ค. ์ฒ์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ์ ๋ ํฌ๊ฒ ๋ถ๋ด์ด ์๋์ง๋ง ๊ธฐ์กด ์ด๋ฏธ์ง์ ํ์ผ ํ๋ ์ถ๊ฐํ๋ค๊ณ ์๋ฐฑMB๋ฅผ ๋ค์ ๋ค์ด๋ฐ๋๋ค๋ฉด ๋งค์ฐ ๋นํจ์จ์ ์ผ ์ ๋ฐ์ ์์ต๋๋ค.
๋์ปค๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํดย ๋ ์ด์ด๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๊ณ ์ ๋์จ ํ์ผ ์์คํ ์ ์ด์ฉํ์ฌ ์ฌ๋ฌ๊ฐ์ ๋ ์ด์ด๋ฅผ ํ๋์ ํ์ผ์์คํ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ฏธ์ง๋ ์ฌ๋ฌ๊ฐ์ ์ฝ๊ธฐ ์ ์ฉย ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋๊ณ ํ์ผ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์์ ๋๋ฉด ์๋ก์ด ๋ ์ด์ด๊ฐ ์์ฑ๋ฉ๋๋ค.
ubuntu ์ด๋ฏธ์ง๊ฐย Aย +ย Bย +ย C์ ์งํฉ์ด๋ผ๋ฉด, ubuntu ์ด๋ฏธ์ง๋ฅผ ๋ฒ ์ด์ค๋ก ๋ง๋ nginx ์ด๋ฏธ์ง๋ย Aย +ย Bย +ย Cย +ย nginx๊ฐ ๋ฉ๋๋ค.
webapp ์ด๋ฏธ์ง๋ฅผ nginx ์ด๋ฏธ์ง ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์๋ค๋ฉดย Aย +ย Bย +ย Cย +ย nginxย +ย sourceย ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
webapp ์์ค๋ฅผ ์์ ํ๋ฉดย A,ย B,ย C,ย nginxย ๋ ์ด์ด๋ฅผ ์ ์ธํ ์๋ก์ดย source(v2)ย ๋ ์ด์ด๋ง ๋ค์ด๋ฐ์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊ต์ฅํ ํจ์จ์ ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง ๊ฒฝ๋ก
์ด๋ฏธ์ง๋ url ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ ํ๊ทธ๋ฅผ ๋ถ์ผ ์ ์์ต๋๋ค.
ubuntu 14.04 ์ด๋ฏธ์ง๋ docker.io/library/ubuntu:14.04 ๋๋ docker.io/libray/ubuntu:trusty ์ด๊ณ docker.io/library ๋ ์๋ต ๊ฐ๋ฅํ๋ฉฐ ubuntu:14.04๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ฝ๊ณ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ํ๊ทธ ๊ธฐ๋ฅ์ ์ ์ด์ฉํ๋ฉด ํ
์คํธ๋ ๋กค๋ฐฑ๋ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
Dockerfile
FROM subicura/vertx3:3.3.1
MAINTAINER chungsub.kim@purpleworks.co.kr
ADD build/distributions/app-3.3.1.tar /
ADD config.template.json /app-3.3.1/bin/config.json
ADD docker/script/start.sh /usr/local/bin/
RUN ln -s /usr/local/bin/start.sh /start.sh
EXPOSE 8080
EXPOSE 7000
CMD ["start.sh"]
๋์ปค๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํดย Dockerfile
์ด๋ผ๋ ํ์ผ์ ์์ฒด DSLDomain-specific language
์ธ์ด๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์ ์์ฑํฉ๋๋ค.
Docker Hub
๋์ปค ์ด๋ฏธ์ง์ ์ฉ๋์ ๋ณดํต ์๋ฐฑ MB์ด๊ณ , ์ GB๊ฐ ๋๋ ๊ฒฝ์ฐ๋ ํํฉ๋๋ค. ์ด๋ ๊ฒ ํฐ ์ฉ๋์ ์ด๋ฏธ์ง๋ฅผ ์๋ฒ์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ฝ์ง ์์๋ฐ ๋์ปค๋ Docker hub๋ฅผ ํตํด ๊ณต๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋ฌด๋ฃ๋ก ๊ด๋ฆฌํด ์ค๋๋ค.
Command์ API
๋์ปค ํด๋ผ์ด์ธํธ์ ์ปค๋งจ๋ ๋ช
๋ น์ด๋ ์ง๊ด์ ์ด๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ปจํ
์ด๋์ ๋ณต์กํ ์์คํ
๊ตฌ์ฑ์ ์ดํดํ์ง ๋ชปํ๋๋ผ๋ ํธํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ http๊ธฐ๋ฐ์ Rest API๋ ์ง์ํ์ฌ ํ์ฅ์ฑ์ด ๊ต์ฅํ ์ข์ต๋๋ค.
ํ๋ฅญํ ์ํ๊ณ
๋์ปค๋ ๊ต์ฅํ ํฐ ์ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ์ปค๋ค๋ ๊ธฐ์
๊ณผ ํ๋ ฅํ์ฌ ์ฌ์ค์ ํด๋ผ์ฐ๋ ์ปจํ
์ด๋ ์ธ๊ณ์ ๊ธฐ์ค์ด ๋์์ต๋๋ค. ๋ก๊น
, ๋ชจ๋ํฐ๋ง, ์คํ ๋ฆฌ์ง, ๋คํธ์ํฌ, ์ปจํ
์ด๋ ๊ด๋ฆฌ, ๋ฐฐํฌ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ๋ค์ํ ํด๋ค์ด ์กด์ฌํฉ๋๋ค.
์ปค๋ฎค๋ํฐ ์ง์
๋์ปค๋ ํ๋ณด์ ์ปค๋ฎค๋ํฐ ๊ด๋ฆฌ์ ๊ต์ฅํ ์ ๊ฒฝ์ฐ๊ณ ์์ต๋๋ค. ํํ์ด์ง์์๋ ์ ์ธ๊ณ์์ ์ด๋ฆฌ๋ ๋ฐ์
์ํฉ์ ๋ณผ ์ ์๊ณ ์ผ์ฃผ์ผ๋ง๋ค ๋ฐ์ก๋๋ ๋ด์ค๋ ํฐ์๋ ๋ค์ํ ๊ฐ๋ฐ์๋ค์ ๊ธ์ด ์ค๋ ค์์ต๋๋ค.
๐ฏ ๋์ปค ๊ตฌ์กฐ
๋์ปค๋ ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Docker Daemon
๋์ปค ๋ฐ๋ชฌ(dockerd
)์ ๋์ปค REST API ์์ฒญ์ ๋ฃ๊ณ ๋์ปค ์ค๋ธ์ ํธ๋ค(์ด๋ฏธ์ง, ์ปจํ
์ด๋, ๋คํธ์ํฌ, ๋ณผ๋ฅจ)์ ๊ด๋ฆฌํฉ๋๋ค. ๋ํ ๋์ปค ๋ฐ๋ชฌ์ ๋์ปค ์๋น์ค๋ฅผ ๊ด๋ฆฌํ๋ ๋ค๋ฅธ ๋์ปค ๋ฐ๋ชฌ๊ณผ ์ปค๋ฎค๋์ผ์ด์
ํ ์ ์์ต๋๋ค.
Docker Client
๋์ปค ํด๋ผ์ด์ธํธ(docker
)๋ ๋์ปค ํธ์คํธ์ ํต์ ํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, docker run ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด ๋์ปค ํด๋ผ์ด์ธํธ๋ ํด๋น ๋ช
๋ น์ด๋ฅผ REST API Call์ผ๋ก ๋ณํํ์ฌ ๋์ปค ๋ฐ๋ชฌ(dockerd
)์ผ๋ก ์ ์กํฉ๋๋ค.
๋์ปค ํด๋ผ์ด์ธํธ์ ์ฃผ์ ๋ชฉ์ ์ ์ง์ ๋ ์ง์คํธ๋ฆฌ์์ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์ ํธ์คํธ์์ ์คํํ ์ ์๊ฒ ํ๋ ๊ฒ์
๋๋ค.
Docker Registries
Docker Registries๋ ๋์ปค ์ด๋ฏธ์ง ์ ์ฅ์ ์ญํ ์ ์ํํฉ๋๋ค.
Docker Objects
Docker Object๋ Docker Daemon์ ์ํด, ์์ฑ ๋ฐ ๊ด๋ฆฌ๋๋ ์ด๋ฏธ์ง, ์ปจํ
์ด๋, ๋คํธ์ํฌ, ๋ณผ๋ฅจ ๋ฑ์ ๊ฐ์ฒด๋ฅผ ๋งํฉ๋๋ค.
๐ณ ๋์ปค ์ค์น
๊ฐ OS๋ณ ์ค์น ๋ฐฉ๋ฒ์ ๋ค์ ๋งํฌ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ