# Docker๋?
# ๐งฑPreference
Ubuntu 16.04
Docker CE
Docker Hub (opens new window) ๊ณ์
# ๐๋ชฉ์ฐจ
1. What Is Docker?
2. Docker ์ฃผ์๊ฐ๋
2-1. ์ด๋ฏธ์ง(Image)
2-2. ์ปจํ ์ด๋(Container)
# 1. What Is Docker?
์ปจํ
์ด๋ ๊ธฐ๋ฐ์ ์คํ์์ค ๊ฐ์ํ ํ๋ซํผ
Docker๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ํ๊ฒ ๊ตฌ์ถ, ํ
์คํธ ๋ฐ ๋ฐฐํฌํ ์ ์๋ ์ํํธ์จ์ด ํ๋ซํผ์ด๋ค.
Docker๋ ์ํํธ์จ์ด๋ฅผ ์ปจํ
์ด๋
๋ผ๋ ํ์คํ ๋ ์ ๋์ผ๋ก ํจํค์งํ๋ฉฐ, ์ด ์ปจํ
์ด๋์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ,
์์คํ
๋๊ตฌ, ์ฝ๋, ๋ฐํ์ ๋ฑ ์ํํธ์จ์ด๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ด ํฌํจ๋์ด ์๋ค.
Docker๋ฅผ ์ฌ์ฉํ๋ฉด ํ๊ฒฝ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ํ๊ฒ ๋ฐฐํฌ ๋ฐ ํ์ฅํ ์ ์์ผ๋ฉฐ
์ฝ๋๊ฐ ๋ฌธ์ ์์ด ์คํ๋ ๊ฒ์์ ํ์ ํ ์ ์๋ค.
- ํ๋์จ์ด์ ๋ฐ์ ์ผ๋ก ๋ ๋ง์ ํจ์จ์ฑ์ ๋ด๊ธฐ ์ํด ๊ฐ์ํ ์ฌ์ฉ
- ๊ฒ์คํธ OS ์ฌ์ฉ - ํ๋์จ์ด์ ์์กด์ ์ธ ๋ช ๋ น์ด ์ฌ์ฉ : ์ฑ๋ฅ ์ ํ ๋ถ๋ฌ์ผ์ผํด
- Docker๋ ๊ฒ์คํธ OS๊ฐ ์์
- ๋ฐ๋ผ์, ๊ธฐ์กด์ ๊ฐ์ ์์คํ ๋ณด๋ค ํผํฌ๋จผ์ค๊ฐ ์ข์
- ์คํํ๊ฒฝ์ ์ปจํ ์ด๋๋ก ์ถ์ํ, ๋์ผํ ์ธํฐํ์ด์ค ์ ๊ณต
- ๋ฐ๋ผ์, ํ๋๊ทธ๋จ์ ๋ฐฐํฌ ๊ด๋ฆฌ ๋จ์ํ
์ปจํ
์ด๋๋ (๋์ถฉ ๋งํ์๋ฉด) ์ ํ๋ฆฌ์ผ์ด์
์ ํ๊ฒฝ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ์คํํ๋ ๊ธฐ์ ์ด๋ค.
์ผ๋ก๋ก ๊น๋ฉgitlab
์ด๋ผ๋ ๋๊ตฌ๋ฅผ ์ฐ๋ถํฌ์ ์ค์นํ๋ ค๋ฉด ๊น๋ฉ ๊ณต์ ๋ฌธ์์์๋ ๋ค์๊ณผ ๊ฐ์ด ํ๋ผ๊ณ ์๋ดํ๊ณ ์๋ค.
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
sudo apt-get install -y postfix
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.example.com" apt-get install gitlab-ee
CentOS
๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ช
๋ น์ด๊ฐ ์กฐ๊ธ ๋ฌ๋ผ์ง๋ค.
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-ee
๊ทธ๋ฌ๋ ์ปจํ ์ด๋ ๋๊ตฌ์ธ ๋์ปคDocker๊ฐ ์ค์น๋์ด ์๋ค๋ฉด ์ด๋ ํ๊ฒฝ์ด๋ ์๊ด ์์ด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊น๋ฉ์ ์คํํ ์ ์๋ค. (์ด ๋ช ๋ น๋ ๊ฐ๋จํด๋ณด์ด์ง ์๊ฒ ์ง๋ง, ๊ทธ์ ์ด์์ฒด์ ๋ณ๋ก ์กด์ฌํ๋ ๋ณต์กํ ์ค์น ๊ณผ์ ์ ๊ฒช์ง ์๋๋ค๋ ์ ๋ง ๊ธฐ์ตํ์๋ฉด ๋๋ค.)
$ docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
# 2. Docker ์ฃผ์๊ฐ๋
# 2-1. ์ด๋ฏธ์ง(Image)
์ด๋ฏธ์ง๋ ์ปจํ
์ด๋ ์คํ์ ํ์ํ ํ์ผ๊ณผ ์ค์ ๊ฐ ๋ฑ์ ํฌํจํ๊ณ ์๋ ๊ฒ์ผ๋ก ์ํ ๊ฐ์ ๊ฐ์ง์ง ์๊ณ ๋ณํ์ง ์์(Immutable). ์ปจํ
์ด๋๋ ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ํ๋ผ๊ณ ๋ณผ ์ ์๊ณ ์ถ๊ฐ๋๊ฑฐ๋ ๋ณํ๋ ๊ฐ์ ์ปจํ
์ด๋์ ์ ์ฅ๋จ.
๊ฐ์ ์ด๋ฏธ์ง์์ ์ฌ๋ฌ ๊ฐ์ ์ปจํ
์ด๋๋ฅผ ์์ฑํ ์ ์๊ณ ์ปจํ
์ด๋์ ์ํ๊ฐ ๋ฐ๋๊ฑฐ๋
์ปจํ
์ด๋๊ฐ ์ญ์ ๋๋๋ผ๋ ์ด๋ฏธ์ง๋ ๋ณํ์ง ์๊ณ ๊ทธ๋๋ก ์กด์ฌ!
ubuntu์ด๋ฏธ์ง๋ ubuntu๋ฅผ ์คํํ๊ธฐ ์ํ ๋ชจ๋ ํ์ผ์ ๊ฐ์ง๊ณ ์๊ณ MySQL์ด๋ฏธ์ง๋
debian์ ๊ธฐ๋ฐ์ผ๋ก MySQL์ ์คํํ๋๋ฐ ํ์ํ ํ์ผ๊ณผ ์คํ ๋ช ๋ น์ด,
ํฌํธ ์ ๋ณด ๋ฑ์ ๊ฐ์ง๊ณ ์๋ค. ์ข ๋ ๋ณต์กํ ์๋ก Gitlab ์ด๋ฏธ์ง๋ centos๋ฅผ ๊ธฐ๋ฐ์ผ๋ก
ruby, go, database, redis, gitlab source, nginx๋ฑ์ ๊ฐ์ง๊ณ ์๋ค.
๋ง ๊ทธ๋๋ก ์ด๋ฏธ์ง๋ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ธฐ ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ์์กด์ฑ ํ์ผ์ ์ปดํ์ผํ๊ณ ์ด๊ฒ์ ๊ฒ ์ค์นํ ํ์๊ฐ ์์!
์ด์ ์๋ก์ด ์๋ฒ๊ฐ ์ถ๊ฐ๋๋ฉด ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ๊ณ ์ปจํ ์ด๋๋ง ์์ฑํ๋ฉด ๋จ. ํ ์๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์๊ณ , ์์ญ, ์๋ฐฑ, ์์ฒ ๋์ ์๋ฒ๋ ๋ฌธ์ ์์!
- docker ์ด๋ฏธ์ง๋ ๋ ์ด์ด์ ํํ
- ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ๋ง ๋ฐ๋ก ์ด๋ฏธ์ง ์์ฑ
- ์์ฑ๋ ์ด๋ฏธ์ง๋ ๋ถ๋ชจ์ ์ด๋ฏธ์ง ๋ฐ๋ผ๋ด
- ์๋์ ์ผ๋ก ๊ฒฝ๋ํ ๊ฐ๋ฅ
Docker ์ด๋ฏธ์ง๋ Docker hub (opens new window)์ ๋ฑ๋กํ๊ฑฐ๋ Docker Registry ์ ์ฅ์๋ฅผ ์ง์ ๋ง๋ค์ด ๊ด๋ฆฌํ ์ ์๋ค. ํ์ฌ ๊ณต๊ฐ๋ ๋์ปค ์ด๋ฏธ์ง๋ 50๋ง๊ฐ๊ฐ ๋๊ณ Docker hub์ ์ด๋ฏธ์ง ๋ค์ด๋ก๋ ์๋ 80์ตํ์ ์ด๋ฅธ๋ค!
๋๊ตฌ๋ ์ฝ๊ฒ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ณ ๋ฐฐํฌํ ์ ์๋ ๊ตฌ์กฐ์ด๋ค.
์ ์ด๋ ๊ฒ ํซํ ๊น?
๋์ปค๋ ์์ ํ ์๋ก์ด ๊ธฐ์ ์ด ์๋๋ฉฐ ์ด๋ฏธ ์กด์ฌํ๋ ๊ธฐ์ ์ ์ ํฌ์ฅํ๋ค๊ณ ๋ณผ ์ ์๋ค.
์ปจํ ์ด๋, ์ค๋ฒ๋ ์ด ๋คํธ์ํฌoverlay network
, ์ ๋์จ ํ์ผ ์์คํ union file systems
๋ฑ
์ด๋ฏธ ์กด์ฌํ๋ ๊ธฐ์ ์ ๋์ปค์ฒ๋ผ ์ ์กฐํฉํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๊ฒ์ ์์๊ณ ์ฌ์ฉ์๋ค์ด
์ํ๋ ๊ธฐ๋ฅ์ ๊ฐ๋จํ์ง๋ง ํ๊ธฐ์ ์ธ ์์ด๋์ด๋ก ๊ตฌํํ๋ค.
Overlay Network
- ๋คํธ์ํฌ ์ถ์ํ
- underlay network (๋ฌผ๋ฆฌ์ L2, L4โฆ) - ๊ธฐ์กด ๋คํธ์ํฌ ๋ฐฉ์
- underlay์์ ์กด์ฌํ๊ฒ ๋จ.
# 2-2. ์ปจํ ์ด๋(Container)
- ๋์ปค์ ์ด๋ฏธ์ง๊ฐ ์คํ๋ ์ํ
- ๊ฒฉ๋ฆฌ๋ ๊ณต๊ฐ์์ ํ๋ก์ธ์ค๊ฐ ๋์ํ๋ ๊ธฐ์
๊ฐ์ํ ๊ธฐ์ ์ ํ๋์ง๋ง ๊ธฐ์กด๋ฐฉ์๊ณผ๋ ์ฐจ์ด๊ฐ ์์
๊ธฐ์กด์ ๊ฐ์ํ ๋ฐฉ์์ ์ฃผ๋ก OS๋ฅผ ๊ฐ์ํํจ
VMware๋ VirtualBox๊ฐ์ ๊ฐ์๋จธ์ ์ ํธ์คํธ OS์์ ๊ฒ์คํธ OS ์ ์ฒด๋ฅผ ๊ฐ์ํํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์.
์ด ๋ฐฉ์์ ์ฌ๋ฌ๊ฐ์ง OS๋ฅผ ๊ฐ์ํ(๋ฆฌ๋ ์ค์์ ์๋์ฐ๋ฅผ ๋๋ฆฐ๋ค๋๊ฐ) ํ ์ ์๊ณ ๋น๊ต์ ์ฌ์ฉ๋ฒ์ด
๊ฐ๋จํ์ง๋ง ๋ฌด๊ฒ๊ณ ๋๋ ค์ ์ด์ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์์๋ค.
์ด๋ฌํ ์ํฉ์ ๊ฐ์ ํ๊ธฐ ์ํด CPU์ ๊ฐ์ํ ๊ธฐ์ (HVM)์ ์ด์ฉํ KVM(Kernel-based Virtual Machine)๊ณผ ๋ฐ๊ฐ์ํ(Paravirtualization)๋ฐฉ์์ Xen์ด ๋ฑ์ฅํ๋ค.
์ด๋ฌํ ๋ฐฉ์์ ๊ฒ์คํธ OS๊ฐ ํ์ํ๊ธด ํ์ง๋ง ์ ์ฒด OS๋ฅผ ๊ฐ์ํํ๋ ๋ฐฉ์์ด ์๋์๊ธฐ ๋๋ฌธ์ ํธ์คํธํ ๊ฐ์ํ ๋ฐฉ์์ ๋นํด ์ฑ๋ฅ์ด ํฅ์๋จ
์ด๋ฌํ ๊ธฐ์ ๋ค์ OpenStack
์ด๋ AWS
, Rackspace
๊ฐ์ ํด๋ผ์ฐ๋ ์๋น์ค์์ ๊ฐ์ ์ปดํจํ
๊ธฐ์ ์ ๊ธฐ๋ฐ์ด ๋์๋ค.
์ ๊ฐ์ํ๋ ๋ฐ๊ฐ์ํ๋ ์ถ๊ฐ์ ์ธ OS๋ฅผ ์ค์นํ์ฌ ๊ฐ์ํ ํ๋ ๋ฐฉ๋ฒ์ ์ด์จ๋ ์ฑ๋ฅ๋ฌธ์ ๊ฐ ์์๊ณ ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌ ํ๋ ๋ฐฉ์์ด ๋ฑ์ฅํ๋ค.
๋ฆฌ๋ ์ค์์๋ ์ด ๋ฐฉ์์ ๋ฆฌ๋ ์ค ์ปจํ ์ด๋๋ผ๊ณ ํ๊ณ ๋จ์ํ ํ๋ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌ ์ํค๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ๋์ํ๋ค. CPU๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฑ ํ๋ก์ธ์ค๊ฐ ํ์ํ ๋งํผ๋ง ์ถ๊ฐ๋ก ์ฌ์ฉํ๊ณ ์ฑ๋ฅ์ ์ผ๋ก๋ ๊ฑฐ์ ์์ค์ด ์๋ค.
ํ๋์ ์๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ฉด ์๋ก ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋์ด
๋ง์น ๊ฐ๋ฒผ์ด VMVirtual Machine์ ์ฌ์ฉํ๋ ๋๋์ ์ค๋ค.์คํ์ค์ธ ์ปจํ ์ด๋์ ์ ์ํ์ฌ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ ์ ์๊ณ
apt-get
์ด๋yum
์ผ๋ก ํจํค์ง๋ฅผ
์ค์นํ ์ ์์ผ๋ฉฐ ์ฌ์ฉ์๋ ์ถ๊ฐํ๊ณ ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํํ ์๋ ์๋ค.CPU๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ํํ ์ ์๊ณ ํธ์คํธ์ ํน์ ํฌํธ์ ์ฐ๊ฒฐํ๊ฑฐ๋ ํธ์คํธ์ ํน์
๋๋ ํ ๋ฆฌ๋ฅผ ๋ด๋ถ ๋๋ ํ ๋ฆฌ์ธ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์๋ ์๋ค.
# 2-3. ๋ ์ด์ด ์ ์ฅ๋ฐฉ์(Layer)
๋์ปค ์ด๋ฏธ์ง๋ ์ปจํ
์ด๋๋ฅผ ์คํํ๊ธฐ ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ณดํต ์ฉ๋์ด ์๋ฐฑ MB์ ์ด๋ฅธ๋ค.
์ฒ์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ์ ๋ ํฌ๊ฒ ๋ถ๋ด์ด ์๋์ง๋ง ๊ธฐ์กด ์ด๋ฏธ์ง์ ํ์ผ ํ๋ ์ถ๊ฐํ๋ค๊ณ ์๋ฐฑ MB๋ฅผ ๋ค์
๋ค์ด๋ฐ๋๋ค๋ฉด ๋งค์ฐ ๋นํจ์จ์ ์ผ ์ ๋ฐ์ ์๋ค.
๋์ปค๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ์ด์ด(Layer) ๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํ๊ณ ์ ๋์จ ํ์ผ ์์คํ
์ ์ด์ฉํ์ฌ
์ฌ๋ฌ๊ฐ์ ๋ ์ด์ด๋ฅผ ํ๋์ ํ์ผ์์คํ
์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
์ด๋ฏธ์ง๋ ์ฌ๋ฌ ๊ฐ์ ์ฝ๊ธฐ ์ ์ฉ ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋๊ณ ํ์ผ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์์ ๋๋ฉด ์๋ก์ด ๋ ์ด์ด๊ฐ ์์ฑ๋๋ค.
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/library/ubuntu:trusty
์ด๊ณ docker.io/library
๋ ์๋ต ๊ฐ๋ฅํ์ฌ ubuntu:14.04
๋ก ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฌํ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ฝ๊ณ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ํ๊ทธ ๊ธฐ๋ฅ์ ์ ์ด์ฉํ๋ฉด ํ
์คํธ๋ ๋กค๋ฐฑ๋ ์ฝ๊ฒ ํ ์ ์๋ค!
# Dockerfile
# vertx/vertx3 debian version
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์ธ์ด๋ฅผ ์ด์ฉํ์ฌ
์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์ ์ ๋๋ค. ์ถํ์ ๋ฌธ๋ฒ์ ๋ํด ์์ธํ ๋ค๋ฃจ๊ฒ ์ง๋ง ์ ์ํ์ ๋ณด๋ฉด ๊ทธ๋ ๊ฒ ๋ณต์กํ์ง ์๋ค๋ ๊ฑธ ์ ์ ์๋ค.
์ด๊ฒ์ ๊ต์ฅํ ๊ฐ๋จํ์ง๋ง ์ ์ฉํ ์์ด๋์ด์ธ๋ฐ, ์๋ฒ์ ์ด๋ค ํ๋ก๊ทธ๋จ์ ์ค์นํ๋ ค๊ณ ์ด๊ฒ ์ ๊ฒ
์์กด์ฑ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์ค์ ํ์ผ์ ๋ง๋ค์๋ ๊ฒฝํ์ด ์๋ค๋ฉด ๋ ์ด์ ๊ทธ ๊ณผ์ ์ ๋ธ๋ก๊น
ํ๊ฑฐ๋
๋ฉ๋ชจ์ฅ์ ์ ์ง ๋ง๊ณ Dockerfile
๋ก ๊ด๋ฆฌํ๋ฉด ๋๋ค. ์ด ํ์ผ์ ์์ค์ ํจ๊ป ๋ฒ์ ๊ด๋ฆฌ ๋๊ณ
์ํ๋ค๋ฉด ๋๊ตฌ๋ ์ด๋ฏธ์ง ์์ฑ๊ณผ์ ์ ๋ณด๊ณ ์์ ํ ์ ์๋ค.
# Docker Hub
๋์ปค ์ด๋ฏธ์ง์ ์ฉ๋์ ๋ณดํต ์๋ฐฑ๋ฉ๊ฐ๋ก ์๊ธฐ๊ฐ๊ฐ ๋๋ ๊ฒฝ์ฐ๋ ํํ๋ค.
์ด๋ ๊ฒ ํฐ ์ฉ๋์ ์ด๋ฏธ์ง๋ฅผ ์๋ฒ์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ฝ์ง ์์๋ฐ
๋์ปค๋ Docker hub๋ฅผ ํตํด ๊ณต๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋ฌด๋ฃ๋ก ๊ด๋ฆฌํด ์ค๋ค.
ํ๋ฃจ์๋ ์์ฒญ๋ ์ฉ๋์ ์ด๋ฏธ์ง๊ฐ ์ ์ธ๊ณ์์ ๋ค์ด๋ก๋ ๋๊ณ ํธ๋ํฝ ๋น์ฉ๋ง ํด๋ ์ด๋ง์ด๋ง ํ ๊ฒ ๊ฐ์๋ฐ ๋ค ๋ฌด๋ฃ๋ค!
# Command์ API
๋์ปค ํด๋ผ์ด์ธํธ์ ์ปค๋งจ๋ ๋ช ๋ น์ด๋ ์ ๋ง ์ ๋ง๋ค์ด์ ธ ์๋ค.
๋๋ถ๋ถ์ ๋ช ๋ น์ด๋ ์ง๊ด์ ์ด๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ปจํ ์ด๋์ ๋ณต์กํ ์์คํ ๊ตฌ์ฑ์ ์ดํดํ์ง ๋ชปํ๋๋ผ๋ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๋ํ http๊ธฐ๋ฐ์ Rest API๋ ์ง์ํ์ฌ ํ์ฅ์ฑ์ด ๊ต์ฅํ ์ข๊ณ ํ๋ฅญํ 3rd party ํด์ด ๋์ค๊ธฐ ์ข์ ํ๊ฒฝ์ด๋ค!
# Container Orchestration
๋์ปค ํธ์คํธ๋ค์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํด๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ ์ง์ํ๊ธฐ ์ํด ์ปจํ
์ด๋๋ฅผ ๋ฐฐํฌํ๊ณ ๊ตฌ์ฑํ๋ ๊ฒ์ ์ปจํ
์ด๋ ์ค์ผ์คํธ๋ ์ด์
์ด๋ผ๊ณ ํ๋ฉฐ,
์ปจํ
์ด๋ ์ค์ผ์คํธ๋ ์ด์
๋๊ตฌ(docker SWARM
, ์ฟ ๋ฒ๋คํฐ์ค
๋ฑ)๋ฅผ ํตํด ์ํ๋๋ค.
# Reference
์ด๋ณด๋ฅผ ์ํ ๋์ปค ์๋ด์ - ๋์ปค๋ ๋ฌด์์ธ๊ฐ? (opens new window)
Docker ๊ณต์ ๋ฌธ์ (opens new window)
AWSKRUG Container Hands-On #1 - ๋ชจ๋์ Docker (opens new window)