Docker Engine ์ด๋
Docker Engine(Docker ๊ฐ ์ค์น๋ Host) ์ 3๊ฐ์ Component ๋ก ๊ตฌ์ฑ๋จ
- Docker Daemon
- Docker REST API Server
- Docker CLI
Docker Daemon
- Docker Daemon ์ Docker ๊ฐ์ฒด์ธ Image, Container, Volume ๋ฐ Network ๋ฅผ ๊ด๋ฆฌํ๋ Background Process
Docker REST API Server
- Docker REST API Server ๋ ํ๋ก๊ทธ๋จ์ด ์ฐ๋ API ์ธํฐํ์ด์ค๋ก Daemon ๊ณผ ํต์ ํ๊ณ ๋ช ๋ น์ด๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉ๋จ
Docker CLI
- Docker CLI ๋ ํ์ ์ฌ์ฉํ๋ ๋ช ๋ น์ค ์ธํฐํ์ด์ค๋ก Container ์คํ, ์ค์ง ๋ฐ Image ์ ๊ฑฐ ๋ฑ์ ์ฌ์ฉ๋จ
- Docker REST API Server ๋ฅผ ์ฌ์ฉํ์ฌ Docker Daemon ๊ณผ ์ํธ์์ฉํ๋๋ฐ ์ด ๋ Docker CLI ๊ฐ ๊ฐ์ Host ์ ์กด์ฌํ์ง ์์๋ ๋จ
docker -H=10.123.2.1:2375 run nginx
์ ๊ฐ์ด Docker Engine ์ ์ฃผ์์ ํฌํธ๋ฅผ ์ง์ ํด์ ์ํธ์์ฉ ๊ฐ๋ฅ
Containerization
- Docker ๋ Namespace ๋ก ๊ณต๊ฐ์ ๊ตฌ๋ถํจ
- Process ID, Network, IPC, Mount ๋ฐ Unix Timesharing ์์คํ ์ ๋ ๋ฆฝ๋ Namespace ์ ์์ฑ
- ๋ฐ๋ผ์ ์ปจํ ์ด๋๊ฐ ๊ฐ๊ฐ ๋ถ๋ฆฌ๋จ
Namespace - PID
- ๋ชจ๋ Process ๋ ๊ฐ์ Host ์์ ์คํ๋์ง๋ง Namespace ์ ์ํด ๋ถ๋ฆฌ๋จ
- Container ๋ด๋ถ์์ PID=1 ์ธ Process ๋ Host ์์ PID=5 ์ธ Process ์ ๋์ผ
docker exec {CONTAINER ID} ps -ef
๋ก ํ์ธํ PID ์ps -ef
๋ก ํ์ธํ PID ๊ฐ ๋ค๋ฆ
cgroups
- Docker Host ์ Container ๋ CPU ์ Memory ๋ฑ ๋์ผํ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํจ
- Container ๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ฆฌ์์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํ์ด ์์ด์ Host ์ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ํ์ฉํ ์ ์์
- ์ด ๋ cgroups(control groups) ๋ฅผ ํตํด ๊ฐ Container ์ ํ ๋น๋ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ์ ํํ ์ ์์
docker run --cpus=.5 ubuntu
๋ก Container ๊ฐ ์ฌ์ฉํ CPU ๋ฅผ 50% ๋ก ์ ํdocker run --memory=100m ubuntu
๋ก Container ๊ฐ ์ฌ์ฉํ Memory ๋ฅผ 100MB ๋ก ์ ํ
- ์์ธํ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์ ์ฐธ์กฐ