๐ก ๋ณธ ๋ฌธ์๋ 'Docker ์ปจํ ์ด๋๋ฅผ ์ด๋ฃจ๋ ๊ธฐ์ : namespace, cgroups'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
Docker๋ Virtual Machine(VM)์ฒ๋ผ OS level์์ ๊ฒฉ๋ฆฌ(isolation)ํ๋ ๊ฒ์ด ์๋ Process level๋ก ๊ฒฉ๋ฆฌํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ Docker Engine์์ ์ด๋ฃจ์ด์ง๋ฉฐ, ์ด๋ ๋ฆฌ๋ ์ค ์ปค๋ ๊ธฐ์ ์ธ namespace, cgroups๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ๋์์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ Docker์ ๊ธฐ๋ฐ ๊ธฐ์ ์ธ namespace, cgroups์ ๋ํด ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. Docker Engine, ์ปจํ ์ด๋๋ฅผ ์ด๋ฃจ๋ ๊ธฐ์
Docker๋ Virtual Machine(VM)์ฒ๋ผ OS level์์ ๊ฒฉ๋ฆฌํ๋ ๊ฒ์ด ์๋ ํ๋ก์ธ์ค ๋จ์๋ก ๊ฒฉ๋ฆฌํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ Docker Engine์์ ์ด๋ฃจ์ด์ง๋ฉฐ, ์ด๋ ๋ฆฌ๋ ์ค ์ปค๋ ๊ธฐ์ ์ธ namespace, cgroups๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ด๊ธฐ ๋ฒ์ ์ ๋์ปค๋ LXC(linux containers)๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ์ผ๋, ์ดํ Linux ์์กด์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด cgroups, namespace api๋ฅผ ์ง์ ์คํํ๋ libcontainer ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๋ฐํ์ฌ LXC ์์ด ๋์ํ ์ ์๊ฒ ํ์์ต๋๋ค.
์ฆ, libcontainer๊ฐ ์ด์ ๋ถํฐ ์์๋ณผ ์ปค๋ ์๋น์ค์ธ 'namespaces', 'cgroups' ๋ฑ์ ์ฌ์ฉํ์ฌ ์์คํ ์ ๋ฆฌ์์ค๋ฅผ ์กฐ์ํ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
2. ์ปจํ ์ด๋๋ฅผ ์ด๋ฃจ๋ ๊ธฐ์ : namespace
Docker๋ฅผ ์ฌ์ฉํ๋ฉด์ Process๋ Network ๋ฑ์ด ์ด๋ป๊ฒ ๊ฐ ์ปจํ ์ด๋๋ง๋ค ๋ฐ๋ก ๊ด๋ฆฌ๋๋์ง ๊ถ๊ธํ์ง ์์ผ์ จ๋์? VM์์๋ ๊ฐ ๊ฒ์คํธ ๋จธ์ ๋ณ๋ก ๋ ๋ฆฝ์ ์ธ ๊ณต๊ฐ์ ์ ๊ณตํ๊ณ ์๋ก๊ฐ ์ถฉ๋ํ์ง ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์์ต๋๋ค. Docker์์๋ namespaces๋ฅผ ํตํด ์ด๋ฌํ ๋ ๋ฆฝ๋ ๊ณต๊ฐ์ ์ ๊ณตํฉ๋๋ค.
2.1 namespace isolation: ๊ทธ๋ฆผ
namespaces์ nested process tree๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ฉฐ, ์ด ๋ง์ ๊ฐ ํ๋ก์ธ์ค๊ฐ ์์คํ ๋ฆฌ์์ค(process IDs, hostnames, user IDs, network access, interprocess communication, filesystem ๋ฑ)์ ํจ๊ป ๊ณ ์ ํ๊ฒ ๋ถ๋ฆฌ๋ ํ๋ก์ธ์ค ํธ๋ฆฌ๋ฅผ ๊ฐ์ง ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ถ๋ฆฌ๋ process tree๋ ๋ค๋ฅธ process tree์์ ํ์ธํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ต๋๋ค. ์ถ๊ฐ๋ก ๊ทธ๋ฆผ์ ํตํด PID namespace ๊ฒฉ๋ฆฌ์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
- ๋ชจ๋ ์์คํ ์ ๋ถํ ์ PID 1 ํ๋ก์ธ์ค๊ฐ ์์๋๊ณ , ํ๋ก์ธ์ค ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ทธ ์๋์ ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ด ์์๋ฉ๋๋ค.
- ์ด๋, PID namespace๋ก ๊ฒฉ๋ฆฌ๋ฅผ ํ๊ฒ ๋๋ฉด, ํ์ namespace์ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค์ ์กด์ฌ๋ฅผ ์ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ฌผ๋ก ์์ namespace์ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ธ ๊ฒ์ฒ๋ผ ํ์ namespace์ ํ๋ก์ธ์ค๋ฅผ ์ ์ฒด์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
์ด๋ฌํ namespace ๊ฒฉ๋ฆฌ๊ฐ ์ฝ๋๋ฅผ ํตํด ์ด๋ป๊ฒ ๊ฒฉ๋ฆฌ๋๋์ง ํ์ธํ๊ณ , PID๋ฅผ ํฌํจํ์ฌ ์ด๋ค namespaces๊ฐ ์ง์๋๋์ง ํ์ธํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
2.1 namespace isolation: ๋ค์ํ ๊ฒฉ๋ฆฌ ๊ธฐ์ค
System call - clone() ์ ์ ์๋ flags๋ฅผ ์ง์ ํ์ฌ ๋ค์ํ namespace๋ฅผ ๊ฐ๋ ํ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <sched.h>
int clone(int (*fn)(void *), void *child_stack,
int flags, void *arg, ...
/* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ );
์ฌ๊ธฐ์ ์ธ ๋ฒ์งธ ์ธ์๋ก flags๋ฅผ ์ง์ ํ ์ ์๋๋ฐ, ์ด๋ค flags๊ฐ ์๊ณ ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ์ง๋์ง ํ์ธํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
pid_t pid = clone(cb, *stack,
CLONE_NEWPID | // create new PID namespace
CLONE_NEWNET | // create new network namespace
CLONE_NEWNS | // create new mount namespace
CLONE_NEWUTS | // create new UTS namespace
CLONE_NEWIPC | // create new IPC namespace
SIGCLD,
...);
flags๋ค์ ์ง์ ๋๋ ์ต์ ์ ์๋์ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ต๋๋ค.
๋ค์์คํ์ด์ค | ์ค๋ช |
PID namespace for process isolation |
๊ฐ ํ๋ก์ธ์ค์ ํ ๋น๋ ๊ณ ์ ํ ID ์ธ PID ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ๋ถํ ํ์ฌ ๊ฒฉ๋ฆฌ. ๋ค์์คํ์ด์ค๊ฐ ๋ค๋ฅด๋ฉด ์ก์ธ์ค ๋ถ๊ฐ. |
Network namespace for managing network interfaces |
๋คํธ์ํฌ ๋ฆฌ์์ค(IP ์ฃผ์, ํฌํธ ๋ฒํธ, ๋ผ์ฐํ
ํ
์ด๋ธ ๋ฑ)๋ฅผ ๋ค์์คํ์ด์ค ๋ณ๋ก ๋ถํ ํ์ฌ ๊ฒฉ๋ฆฌ. ์๋ฅผ ๋ค์ด ๊ฐ์ ํฌํธ๋ผ๋ ๋ค์์คํ์ด์ค๊ฐ ๋ค๋ฅด๋ฉด ์ฌ์ฉ ๊ฐ๋ฅ. |
UID namespace for user isolation |
์ฌ์ฉ์ ID(UID)์ ๊ทธ๋ฃน ID(GID)๋ฅผ ๋ค์์คํ์ด์ค ๋ณ๋ก ๋ถํ ํ์ฌ ๊ฒฉ๋ฆฌ. ๋ฐ๋ผ์ ์ปจํ ์ด๋์์๋ ๋ฃจํธ ๊ถํ์ ๊ฐ์ง๊ณ ์๋๋ผ๋ ํธ์คํธ์ ๊ด๋ฆฌ ๊ถํ์ ๊ฐ์ง ์ ์๋๋ก ๊ฒฉ๋ฆฌ ๊ฐ๋ฅ. |
MOUNT namespace for managing filesystem mount points |
ํ์ผ ์์คํ
๋ฑ ๋ง์ดํธ๋ ๋๋ฐ์ด์ค๋ฅผ ๋ค์์คํ์ด์ค ๋ณ๋ก ๋ถํ ํ์ฌ ๊ฒฉ๋ฆฌ. ๋ฆฌ๋ ์ค์์ ๋๋ฐ์ด์ค๋ฅผ ์ธ์ํ๊ธฐ ์ํด ๋ง์ดํธ๊ฐ ํ์. |
UTS namespace for isolating kernel and version identifiers |
ํธ์คํธ๋ช ์ด๋ ๋๋ฉ์ธ๋ช ์ ๋ค์์คํ์ด์ค ๋ณ๋ก ๋ถํ ํ์ฌ ๊ฒฉ๋ฆฌ. |
IPC namespace for managing access to IPC resources |
ํ๋ก์ธ์ค ๊ฐ ํต์ (inter process communication)์ ํ์ํ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ(Shared Memory), ์ธ๋งํฌ์ด(Semaphore), ๋ฉ์์ง ํ(Message Queue) ๋ฑ์ ๋ ์์ ์ผ๋ก ์ฌ์ฉ. |
- ์ฌ๊ธฐ์, ๊ฒฉ๋ฆฌ(isolation)๋ ๋ค๋ฅธ ๋ค์์คํ์ด์ค์์๋ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
namespace๋ก ์์คํ ์์ ์ปจํ ์ด๋๋ฅผ ๋ถ๋ฆฌํ์ฌ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์์์ ์์๋ณด์์ต๋๋ค. ์ด๋ฌํ ๋ถ๋ฆฌ๋ ํ๊ฒฝ์ ์ด๋ป๊ฒ ์ ๋ขฐ์ฑ์๊ฒ ์ฌ์ฉํ๊ณ , ๋ถ๋ฆฌ๋ ์์ ๊ด๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ ์ ์์์์ง ๊ถ๊ธํ์ง ์์ผ์ ๊ฐ์ ? cgroups์ ํตํด ํด๊ฒฐํ ์ ์์ต๋๋ค ~
3. ์ปจํ ์ด๋๋ฅผ ์ด๋ฃจ๋ ๊ธฐ์ : cgroups(linux control groups)
๋ฆฌ๋ ์ค์์ ํ๋ก๊ทธ๋จ์ ํ๋ก์ธ์ค๋ก ์คํ๋๊ณ , ํ๋ก์ธ์ค๋ ํ๋ ์ด์์ ์ฐ๋ ๋๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. cgroups ๋ ํ๋ก์ธ์ค์ ์ฐ๋ ๋๋ฅผ ๊ทธ๋ฃนํํด์ ๊ด๋ฆฌํ๋ ๊ธฐ์ ์ ๋๋ค.
์ด๋ฅผ ํตํด ๊ฐ ๊ทธ๋ฃน๋ณ๋ก ์ฌ์ฉํ ์ ์๋ ํธ์คํธ OS์ ์์์ ํ ๋นํ๊ฑฐ๋ ์ ํ์ ๋ ์ ์์ต๋๋ค. ์ฆ ์ปจํ ์ด๋์์ ์ฌ์ฉํ๋ ๋ฆฌ์์ค๋ฅผ ์ ํํจ์ผ๋ก์จ ํ๋์ ์ปจํ ์ด๋๊ฐ ์์์ ๋ชจ๋ ์ฌ์ฉํด ๋ค๋ฅธ ์ปจํ ์ด๋๊ฐ ์ํฅ์ ๋ฐ์ง ์๋๋ก ํ ์ ์์ต๋๋ค. ๋ํ ๊ทธ๋ฃน์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ์ฉํ ์ ์์ด ์ฒด๊ณ์ ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
ํญ๋ชฉ | ์ค๋ช |
cpu | CPU ์ฌ์ฉ๋ ์ ํ. |
cpuacct | CPU ์ฌ์ฉ๋ ํต๊ณ ์ ๋ณด ์ ๊ณต |
cpuset | CPU ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐฐ์น ์ ์ด. |
memory | ๋ฉ๋ชจ๋ฆฌ๋ ์ค์(Swap) ์ฌ์ฉ๋ ์ ํ. |
devices | ๋๋ฐ์ด์ค์ ๋ํ ์ก์ธ์ค ์ ์ด. |
freezer | ๊ทธ๋ฃน ๋ด ํ๋ก์ธ์ค ์ ์ง ๋ฐ ์ฌ๊ฐ. |
net_cls | ๋คํธ์ํฌ ์ ์ด. |
blkio | ๋ธ๋ก ๋๋ฐ์ด์ค ์ ์ถ๋ ฅ๋ ์ ์ด. |
3.1 control group ๊ด๋ฆฌ: cgroups file system
Kernel์์ cgroup์ ์ ์ดํ ๋, ๋ฐ๋ก system call์ ์ ๊ณตํ์ง ์๊ณ cgroupfs๋ผ๊ณ ๋ถ๋ฆฌ๋ pseudo-filesystem์ ํตํด ์ ๊ณต๋ฉ๋๋ค.
ํ์ผ ์์คํ ์ ํตํด์ ์ ํ์ ํ๋ค๋ ๊ฒ ๋ฌด์จ๋ง์ผ๊น์? systemd๋ /sys/fs/cgroup ์๋์ cgroupfs๋ค์ ๋ง์ดํธํฉ๋๋ค. ๊ทธ๋์ mount ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ง์ดํธ๋์ด ์๋ cgroupfs๋ค์ ํ์ธํ ์ ์์ต๋๋ค.
# mount
...
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
...
- ์์ mount๋ ํ์ผ๋ค์ ํ์ธํด๋ณด๋ฉด ์ ์ ์๋ฏ์ด cgroup์ ์ ์ดํ๋ ๋ฆฌ์์ค๋ฅผ ํ์
๋ณ๋ก mountํด์ ๊ด๋ฆฌํฉ๋๋ค.
- cgroupfs ๋ด ๋๋ ํฐ๋ฆฌ๋ ํ๋์ cgroup์ ๋๋ค.
- cgroup์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ์ฒ๋ผ Tree ํํ๋ฅผ ๊ฐ์ต๋๋ค.
- ์ด๋ ๊ฒ ํน์ํ ํํ์ ํ์ผ์์คํ
์ผ๋ก ๊ด๋ฆฌ๋์ด์ง๊ธฐ ๋๋ฌธ์, cgroupfs์ผ๋ก cgroup์ ์ ์ดํ ๋๋ mkdir, rmdir, echo์ ๊ฐ์ ๋ช
๋ น์ด๋ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, cgroup์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ cgroupfs์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
์๋ฅผ ํตํด์ ์ด๋ป๊ฒ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋์ง๋ฅผ ์ ์ ์์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ ๊ฒ ๋ ๋ฆฝ์ ์ธ ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ฑํ๋ค๋ฉด ์ด๋ค์์ผ๋ก ํด๋น ์ปจํ ์ด๋์ ์ ๊ทผํ๋ ๊ฒ์ผ๊น์?
4. ์ปจํ ์ด๋๋ฅผ ์ด๋ฃจ๋ ๊ธฐ์ : Docker Network (feat. ํธ์คํธ-์ปจํ ์ด๋ ๊ฐ ํต์ )
๋จผ์ ๋ฆฌ๋ ์ค์์๋ NIC(Network Interface Controller)์ ๊ฐ์ ๋คํธ์ํฌ ๋์นด๋๊ฐ ์ถ๊ฐ๋๋ฉด /dev/eth0, /dev/eth1 ์ฒ๋ผ ์ธ์ํฉ๋๋ค. ์ฌ๊ธฐ์ eth0 ์ ๊ธฐ๋ณธ ๋คํธ์ํฌ ์ฅ์น๋ผ๊ณ ๋ณผ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ธ์งํ๊ณ ์ปจํ ์ด๋์์ ํต์ ์ ์ดํดํ๋ค๋ฉด ๋์ฑ ๋น ๋ฅด๊ฒ ์ ๊ทผํ์ค ์ ์์ ๊ฒ๋๋ค. ์๋ ๊ทธ๋ฆผ๊ณผ ํจ๊ป ์ปจํ ์ด๋์ ๋คํธ์ํฌ ๊ตฌ์ฑ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋์ปค ์ปจํ ์ด๋๊ฐ ์คํ๋๋ฉด ์ปจํ ์ด๋์ 172.17.0.0/16 ์ด๋ ํ๋ผ์ด๋น IP ์ฃผ์๊ฐ eth0 ์ผ๋ก ์๋ ํ ๋น๋ฉ๋๋ค. ์ด๋ฅผ docker0๋ผ ํ๋ฉฐ, ์ด๋ ๊ฐ ์ปจํ ์ด๋ ๋คํธ์ํฌ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๋คํธ์ํฌ ๋ธ๋ฆฌ์ง(network bridge) ์ญํ ์ ํฉ๋๋ค. ์ฌ๊ธฐ์ ๊ฐ ์ปจํ ์ด๋์ eth0 ์ docker0๊ฐ ๋ง๋ ๊ฐ์ NIC์ธ veth๋ฅผ ํ ๋นํ์ฌ, ์ธ๋ถ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ปจํ ์ด๋๋ก ๋ผ์ฐํ ํฉ๋๋ค.
์ปจํ ์ด๋๊ฐ ์ธ๋ถ ๋คํธ์ํฌ์ ํต์ ํ ๋๋ NAPT(Network Address Port Translation)๋ผ๋ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. ํผ๋ธ๋ฆญ IP ์ฃผ์์ ํ๋ผ์ด๋น IP ์ฃผ์๋ฅผ ์ผ๋์ผ๋ก ๋ณํํ๋ NAT(Network Address Translation)์ ๋ฌ๋ฆฌ NAPT ๋ ํฌํธ ์ ๋ณด๊น์ง ํ์ฉํ๊ธฐ ๋๋ฌธ์ ํ๋์ ํผ๋ธ๋ฆญ IP ์ฃผ์๋ก ์ฌ๋ฌ ๋์ ๋จธ์ ์ ๋์์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
์ด๋ ๊ฒ '๋์ปค ์ปจํ ์ด๋๋ฅผ ์ด๋ฃจ๋ ๊ธฐ์ '์ ๋ํด ์์๋ณด์๋๋ฐ, ์ดํด๊ฐ ๋์๋์? ์ฌ์ค ์ด ๊ธฐ์ ๋ค์ ์ด๋ป๊ฒ ํ๋ก์ธ์ค ๋จ์์ ๊ฒฉ๋ฆฌ๋ฅผ ํ๊ณ ๊ฒฉ๋ฆฌํ ํ๋ก์ธ์ค์ ์ด๋ป๊ฒ ์ ๊ทผํ๋์ง๋ง ์ด์ ์ ๋๊ณ ์ค๋ช ํ์๊ธฐ์ ๋์น ๋ด์ฉ๋ค์ด ๋ง์ต๋๋ค. ์ด๋ '๋์ปค ์ปจํ ์ด๋'๋ฅผ ์ด๋ฃจ๋ ๊ธฐ์ ์ ์ด์ ์ ๋ง์ถ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ถ๊ฐ๋ก ๋์ปค ์์ฒด์ ๊ด์ฌ์ด ์๋ค๋ฉด 'ํ์ผ ์์คํ ', '์คํ ๋ฆฌ์ง' ๋ฑ ๋ค์ํ ๋ถ๋ถ์์ ์ฌ๋ฐ๋ ๊ธฐ์ ์ด ๋ง์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
์ฌ๊ธฐ์ ๋๋๋ฉด... ์ด์์ ์ธ ๋ง๋ฌด๋ฆฌ๊ฒ ์ง๋ง ํ๋ง๋๋ง ์ฒจ์ธํ์๋ฉด. ์ฌ์ค ์์์ ์ค๋ช ํ namespace, cgroup์ ํตํด ์ด๋ป๊ฒ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๋์ง๋ ์ปจํ ์ด๋ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ๋ฐ ์์ด์ ๊ทธ๋ฆฌ ์ค์ํ์ง ์์ต๋๋ค. ๋ค๋ง '์ปจํ ์ด๋ ๊ธฐ์ ์ ์ด๋ ๊ฒ namespace, cgroup ๋ฅผ ํตํด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋ ์ ์๋ค'๋ ์ฌ์ค๋ง ์๊ณ ์์ผ๋ฉด ๋ฉ๋๋ค. ๋ํ ์ด ๊ธฐ์ ์ ํตํด VM์ ๋นํด์ higher level์์ isolation์ ํ์์ผ๋ฉฐ, ๊ทธ๋์ ์ปจํ ์ด๋ ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์๋ค๋ ์ ๋ ์ ๋ ํด์ฃผ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!!
์ฐธ๊ณ
- [Blog] Docker์ ์ปจ์ , ๋ด๋ถ ๊ตฌ์กฐ, ํ์ฉ ์ธ๋ฏธ๋ ์ ๋ฆฌ: https://gayuna.github.io/docker/docker/
- [Blog] ๋์ปค ์ ๋ฆฌ: https://rokrokss.com/post/2019/10/17/%EB%8F%84%EC%BB%A4-Docker-%EC%A0%95%EB%A6%AC.html