DrawingProcess
๋“œํ”„ DrawingProcess
DrawingProcess
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
ยซ   2026/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (992)
    • Profile & Branding (26)
      • Career (19)
    • IT Trends (255)
      • Conference, Faire (Experien.. (31)
      • News (187)
      • Youtube (20)
      • TED (8)
      • Web Page (2)
      • IT: Etc... (6)
    • Contents (98)
      • Book (67)
      • Lecture (31)
    • Project Process (95)
      • Ideation (0)
      • Study Report (35)
      • Challenge & Award (22)
      • 1Day1Process (5)
      • Making (5)
      • KRC-FTC (Team TC(5031, 5048.. (10)
      • GCP (GlobalCitizenProject) (15)
    • Study: ComputerScience(CS) (73)
      • CS: Basic (9)
      • CS: Database(SQL) (5)
      • CS: Network (14)
      • CS: OperatingSystem (3)
      • CS: Linux (39)
      • CS: Etc... (3)
    • Study: Software(SW) (95)
      • SW: Language (29)
      • SW: Algorithms (1)
      • SW: DataStructure & DesignP.. (1)
      • SW: Opensource (15)
      • SW: Error Bug Fix (43)
      • SW: Etc... (6)
    • Study: Artificial Intellige.. (159)
      • AI: Research (2)
      • AI: 2D Vision(Det, Seg, Tra.. (40)
      • AI: 3D Vision (74)
      • AI: MultiModal (3)
      • AI: SLAM (0)
      • AI: Light Weight(LW) (3)
      • AI: Data Pipeline (7)
      • AI: Machine Learning(ML) (1)
    • Study: Robotics(Robot) (33)
      • Robot: ROS(Robot Operating .. (9)
      • Robot: Positioning (8)
      • Robot: Planning & Control (7)
    • Study: DeveloperTools(DevTo.. (83)
      • DevTool: Git (12)
      • DevTool: CMake (13)
      • DevTool: NoSQL(Elastic, Mon.. (25)
      • DevTool: Container (17)
      • DevTool: IDE (11)
      • DevTool: CloudComputing (4)
    • ์ธ์ƒ์„ ์‚ด๋ฉด์„œ (74)
      • ๋‚˜์˜ ์ทจ๋ฏธ๋“ค (12)
      • ๋‚˜์˜ ์ƒ๊ฐ๋“ค (42)
      • ์—ฌํ–‰์„ ๋– ๋‚˜์ž~ (10)
      • ๋ถ„๊ธฐ๋ณ„ ํšŒ๊ณ  (10)

๊ฐœ๋ฐœ์ž ๋ช…์–ธ

โ€œ ๋งค์ฃผ ๋ชฉ์š”์ผ๋งˆ๋‹ค ๋‹น์‹ ์ด ํ•ญ์ƒ ํ•˜๋˜๋Œ€๋กœ ์‹ ๋ฐœ๋ˆ์„ ๋ฌถ์œผ๋ฉด ์‹ ๋ฐœ์ด ํญ๋ฐœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ผ.
์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋Ÿฐ ์ผ์ด ํ•ญ์ƒ ์ผ์–ด๋‚˜๋Š”๋ฐ๋„ ์•„๋ฌด๋„ ๋ถˆํ‰ํ•  ์ƒ๊ฐ์„ ์•ˆ ํ•œ๋‹ค. โ€

- Jef Raskin

๋งฅ์˜ ์•„๋ฒ„์ง€ - ์• ํ”Œ์ปดํ“จํ„ฐ์˜ ๋งคํ‚จํ† ์‹œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฃผ๋„

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
DrawingProcess

๋“œํ”„ DrawingProcess

[Docker] ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด๋ฃจ๋Š” ๊ธฐ์ˆ : namespace, cgroups, network
Study: DeveloperTools(DevTool)/DevTool: Container

[Docker] ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด๋ฃจ๋Š” ๊ธฐ์ˆ : namespace, cgroups, network

2022. 12. 10. 05:52
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” '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' ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://gngsn.tistory.com/129

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 ๊ฒฉ๋ฆฌ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

https://gngsn.tistory.com/129

  • ๋ชจ๋“  ์‹œ์Šคํ…œ์€ ๋ถ€ํŒ… ์‹œ 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 ์€ ๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ ์žฅ์น˜๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์ธ์ง€ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ์™€์˜ ํ†ต์‹ ์„ ์ดํ•ดํ•œ๋‹ค๋ฉด ๋”์šฑ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜์‹ค ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ํ•จ๊ป˜ ์ปจํ…Œ์ด๋„ˆ์˜ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

https://www.kaitoy.xyz/2015/07/25/how-to-capture-packets-on-a-local-network-with-pcap4j-container/

๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์— 172.17.0.0/16 ์ด๋ž€ ํ”„๋ผ์ด๋น— IP ์ฃผ์†Œ๊ฐ€ eth0 ์œผ๋กœ ์ž๋™ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ docker0๋ผ ํ•˜๋ฉฐ, ์ด๋Š” ๊ฐ ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋„คํŠธ์›Œํฌ ๋ธŒ๋ฆฌ์ง€(network bridge) ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ eth0 ์— docker0๊ฐ€ ๋งŒ๋“  ๊ฐ€์ƒ NIC์ธ veth๋ฅผ ํ• ๋‹นํ•˜์—ฌ, ์™ธ๋ถ€ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.

http://snowdeer.github.io/common-sense/2018/02/02/understanding-about-nat/

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์™€ ํ†ต์‹ ํ•  ๋•Œ๋Š” 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
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Study: DeveloperTools(DevTool) > DevTool: Container' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Docker] ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๋Š” 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•  (0) 2022.12.20
[Docker] ๋„์ปค ํŒŒ์ผ ์‹œ์Šคํ…œ, ์Šคํ† ๋ฆฌ์ง€ ์ •๋ฆฌ (feat. docker volume)  (0) 2022.12.12
[Docker] ๋„์ปค ์ปจํ…Œ์ด๋„ˆ, ๊ฐ€์ƒํ™”, ๋‚ด๋ถ€๊ตฌ์กฐ (feat. VM vs Container)  (1) 2022.11.27
[Docker] ๋„์ปค ์šฉ๋Ÿ‰ ํ™•์ธ ๋ฐ ๊ด€๋ฆฌ (feat. ์„œ๋ฒ„์˜ ์šฉ๋Ÿ‰์ด ๊ฝ‰ ์ฐจ๋ฒ„๋ ธ๋‹ค)  (1) 2022.10.29
[Docker] ๋„์ปค ๋„คํŠธ์›Œํฌ ์ •๋ฆฌ (feat. docker network)  (0) 2022.10.27
    'Study: DeveloperTools(DevTool)/DevTool: Container' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Docker] ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๋Š” 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•
    • [Docker] ๋„์ปค ํŒŒ์ผ ์‹œ์Šคํ…œ, ์Šคํ† ๋ฆฌ์ง€ ์ •๋ฆฌ (feat. docker volume)
    • [Docker] ๋„์ปค ์ปจํ…Œ์ด๋„ˆ, ๊ฐ€์ƒํ™”, ๋‚ด๋ถ€๊ตฌ์กฐ (feat. VM vs Container)
    • [Docker] ๋„์ปค ์šฉ๋Ÿ‰ ํ™•์ธ ๋ฐ ๊ด€๋ฆฌ (feat. ์„œ๋ฒ„์˜ ์šฉ๋Ÿ‰์ด ๊ฝ‰ ์ฐจ๋ฒ„๋ ธ๋‹ค)
    DrawingProcess
    DrawingProcess
    ๊ณผ์ •์„ ๊ทธ๋ฆฌ์ž!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”