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 ๋กœ ์ œํ•œ
  • ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ ์ฐธ์กฐ

References