# Docker๋ž€?

img

# ๐Ÿงฑ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

img

# 2. Docker ์ฃผ์š”๊ฐœ๋…

# 2-1. ์ด๋ฏธ์ง€(Image)

img

์ด๋ฏธ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ ์„ค์ • ๊ฐ’ ๋“ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ƒํƒœ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š๊ณ  ๋ณ€ํ•˜์ง€ ์•Š์Œ(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)

img

  • ๋„์ปค์˜ ์ด๋ฏธ์ง€๊ฐ€ ์‹คํ–‰๋œ ์ƒํƒœ
  • ๊ฒฉ๋ฆฌ๋œ ๊ณต๊ฐ„์—์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๊ธฐ์ˆ 

๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์˜ ํ•˜๋‚˜์ง€๋งŒ ๊ธฐ์กด๋ฐฉ์‹๊ณผ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์Œ

๊ธฐ์กด์˜ ๊ฐ€์ƒํ™” ๋ฐฉ์‹์€ ์ฃผ๋กœ OS๋ฅผ ๊ฐ€์ƒํ™”ํ•จ

VMware๋‚˜ VirtualBox๊ฐ™์€ ๊ฐ€์ƒ๋จธ์‹ ์€ ํ˜ธ์ŠคํŠธ OS์œ„์— ๊ฒŒ์ŠคํŠธ OS ์ „์ฒด๋ฅผ ๊ฐ€์ƒํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹.
์ด ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ OS๋ฅผ ๊ฐ€์ƒํ™”(๋ฆฌ๋ˆ…์Šค์—์„œ ์œˆ๋„์šฐ๋ฅผ ๋Œ๋ฆฐ๋‹ค๋˜๊ฐ€) ํ•  ์ˆ˜ ์žˆ๊ณ  ๋น„๊ต์  ์‚ฌ์šฉ๋ฒ•์ด
๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋ฌด๊ฒ๊ณ  ๋Š๋ ค์„œ ์šด์˜ํ™˜๊ฒฝ์—์„  ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด CPU์˜ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ (HVM)์„ ์ด์šฉํ•œ KVM(Kernel-based Virtual Machine)๊ณผ ๋ฐ˜๊ฐ€์ƒํ™”(Paravirtualization)๋ฐฉ์‹์˜ Xen์ด ๋“ฑ์žฅํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๊ฒŒ์ŠคํŠธ OS๊ฐ€ ํ•„์š”ํ•˜๊ธด ํ•˜์ง€๋งŒ ์ „์ฒด OS๋ฅผ ๊ฐ€์ƒํ™”ํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ์˜€๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ŠคํŠธํ˜• ๊ฐ€์ƒํ™” ๋ฐฉ์‹์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋จ

์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ๋“ค์€ OpenStack์ด๋‚˜ AWS, Rackspace๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์—์„œ ๊ฐ€์ƒ ์ปดํ“จํŒ… ๊ธฐ์ˆ ์˜ ๊ธฐ๋ฐ˜์ด ๋˜์—ˆ๋‹ค.

img

์ „๊ฐ€์ƒํ™”๋“  ๋ฐ˜๊ฐ€์ƒํ™”๋“  ์ถ”๊ฐ€์ ์ธ OS๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๊ฐ€์ƒํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด์จŒ๋“  ์„ฑ๋Šฅ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฉ๋ฆฌ ํ•˜๋Š” ๋ฐฉ์‹์ด ๋“ฑ์žฅํ•œ๋‹ค.

๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์ด ๋ฐฉ์‹์„ ๋ฆฌ๋ˆ…์Šค ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•˜๊ณ  ๋‹จ์ˆœํžˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฉ๋ฆฌ ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋”ฑ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์„ฑ๋Šฅ์ ์œผ๋กœ๋„ ๊ฑฐ์˜ ์†์‹ค์ด ์—†๋‹ค.

ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด
๋งˆ์น˜ ๊ฐ€๋ฒผ์šด VMVirtual Machine์„ ์‚ฌ์šฉํ•˜๋Š” ๋Š๋‚Œ์„ ์ค€๋‹ค.

์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘์†ํ•˜์—ฌ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๊ณ  apt-get์ด๋‚˜ yum์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ
์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž๋„ ์ถ”๊ฐ€ํ•˜๊ณ  ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๊ณ  ํ˜ธ์ŠคํŠธ์˜ ํŠน์ • ํฌํŠธ์™€ ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ŠคํŠธ์˜ ํŠน์ •
๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‚ด๋ถ€ ๋””๋ ‰ํ† ๋ฆฌ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

# 2-3. ๋ ˆ์ด์–ด ์ €์žฅ๋ฐฉ์‹(Layer)

img

๋„์ปค ์ด๋ฏธ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต ์šฉ๋Ÿ‰์ด ์ˆ˜๋ฐฑ 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) ๋ ˆ์ด์–ด๋งŒ ๋‹ค์šด๋ฐ›์œผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ต‰์žฅํžˆ ํšจ์œจ์ ์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋„ ๋ ˆ์ด์–ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๊ธฐ์กด์˜ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด ์œ„์— ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰์ค‘์— ์ƒ์„ฑํ•˜๋Š” ํŒŒ์ผ์ด๋‚˜ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์€ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ ˆ์ด์–ด์— ์ €์žฅ๋˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•ด๋„ ์ตœ์†Œํ•œ์˜ ์šฉ๋Ÿ‰๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

๊ฐ€์ƒํ™”์˜ ํŠน์„ฑ์ƒ ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰์ด ํฌ๊ณ  ์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๋Š”๊ฑธ ๊ฐ์•ˆํ•˜๋ฉด ๋‹จ์ˆœํ•˜์ง€๋งŒ ์—„์ฒญ๋‚˜๊ฒŒ ์˜๋ฆฌํ•œ ์„ค๊ณ„์ด๋‹ค.

์ด๋ฏธ์ง€ ๊ฒฝ๋กœ

img

์ด๋ฏธ์ง€๋Š” 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

img

๋„์ปค ์ด๋ฏธ์ง€์˜ ์šฉ๋Ÿ‰์€ ๋ณดํ†ต ์ˆ˜๋ฐฑ๋ฉ”๊ฐ€๋กœ ์ˆ˜๊ธฐ๊ฐ€๊ฐ€ ๋„˜๋Š” ๊ฒฝ์šฐ๋„ ํ”ํ•˜๋‹ค.

์ด๋ ‡๊ฒŒ ํฐ ์šฉ๋Ÿ‰์˜ ์ด๋ฏธ์ง€๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์€๋ฐ

๋„์ปค๋Š” Docker hub๋ฅผ ํ†ตํ•ด ๊ณต๊ฐœ ์ด๋ฏธ์ง€๋ฅผ ๋ฌด๋ฃŒ๋กœ ๊ด€๋ฆฌํ•ด ์ค€๋‹ค.

ํ•˜๋ฃจ์—๋„ ์—„์ฒญ๋‚œ ์šฉ๋Ÿ‰์˜ ์ด๋ฏธ์ง€๊ฐ€ ์ „์„ธ๊ณ„์—์„œ ๋‹ค์šด๋กœ๋“œ ๋˜๊ณ  ํŠธ๋ž˜ํ”ฝ ๋น„์šฉ๋งŒ ํ•ด๋„ ์–ด๋งˆ์–ด๋งˆ ํ•  ๊ฒƒ ๊ฐ™์€๋ฐ ๋‹ค ๋ฌด๋ฃŒ๋‹ค!

# Command์™€ API

๋„์ปค ํด๋ผ์ด์–ธํŠธ์˜ ์ปค๋งจ๋“œ ๋ช…๋ น์–ด๋Š” ์ •๋ง ์ž˜ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๋ช…๋ น์–ด๋Š” ์ง๊ด€์ ์ด๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋”๋ผ๋„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ http๊ธฐ๋ฐ˜์˜ Rest API๋„ ์ง€์›ํ•˜์—ฌ ํ™•์žฅ์„ฑ์ด ๊ต‰์žฅํžˆ ์ข‹๊ณ  ํ›Œ๋ฅญํ•œ 3rd party ํˆด์ด ๋‚˜์˜ค๊ธฐ ์ข‹์€ ํ™˜๊ฒฝ์ด๋‹ค!

# Container Orchestration

img

๋„์ปค ํ˜ธ์ŠคํŠธ๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํˆด๋“ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ(docker SWARM, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋“ฑ)๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰๋œ๋‹ค.

# Reference

์ดˆ๋ณด๋ฅผ ์œ„ํ•œ ๋„์ปค ์•ˆ๋‚ด์„œ - ๋„์ปค๋ž€ ๋ฌด์—‡์ธ๊ฐ€? (opens new window)

Docker ๊ณต์‹ ๋ฌธ์„œ (opens new window)

AWSKRUG Container Hands-On #1 - ๋ชจ๋‘์˜ Docker (opens new window)

Last Updated: 6/18/2023, 2:13:15 PM