CS

์ปจํ…Œ์ด๋„ˆ (Container)

hyeyeonismm 2025. 4. 28. 22:20

์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹คํ–‰ ํ™˜๊ฒฝ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์„ค์ • ๋“ฑ)์„ ๋ฌถ์–ด์„œ ๊ฒฉ๋ฆฌ๋œ ์ƒํƒœ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. (ex. Docker, Kubernetes ๋“ฑ)
์‰ฝ๊ฒŒ ๋งํ•ด, ํ”„๋กœ๊ทธ๋žจ + ํ•„์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ + ์„ค์ • ํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ์ƒ์ž์— ๋‹ด์•„ ์–ด๋””์„œ๋“  ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š”

์„ค์น˜ ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐ€์ƒ๋จธ์‹ ๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋‹ค. ๋˜ํ•œ, ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” OS ์ „์ฒด๋ฅผ ๊ฐ€์ƒํ™”ํ•˜์ง€ ์•Š๊ณ  ์ปค๋„๋งŒ ๊ณต์œ ํ•œ๋‹ค.

 

๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ์ผ ๊ฒฝ์šฐ

์ผ๋ฐ˜ ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„ ํ™˜๊ฒฝ์œผ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ๋‹ค.
๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„์—์„œ python --version์„ ํ†ตํ•ด ์•Œ์•„๋ณธ Python์˜ ๋ฒ„์ „์ด 3.12๋ผ๋ฉด ํ•ด๋‹น ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Python 3.12 ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•œ๋‹ค.
๋ฌผ๋ก  ์—ฌ๋Ÿฌ Python ๋ฒ„์ „์„ ์„ค์น˜ํ•ด PATH๋ฅผ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Š” ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์˜์กด์„ฑ๊ณผ ์™„์ „ํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋œ ํ™˜๊ฒฝ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

 

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์“ด๋‹ค๋ฉด?

ํ•˜๋‚˜์˜ ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋…๋ฆฝ๋œ ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋…๋ฆฝ๋œ ํ”„๋กœ์„ธ์Šค ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
์ปจํ…Œ์ด๋„ˆ๋Š” ํ•˜์ดํผ๋ฐ”์ด์ €์ฒ˜๋Ÿผ OS ์ „์ฒด๋ฅผ ๊ฐ€์ƒํ™”ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์ž์› ๊ด€๋ฆฌ๋Š” ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„์— ์ข…์†๋˜์–ด ํ˜ธ์ŠคํŠธ ์ปค๋„์„ ๊ณต์œ ํ•œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์•„ํ‚คํ…์ฒ˜

์ปจํ…Œ์ด๋„ˆ๋Š” VM๊ณผ ๋‹ค๋ฅด๊ฒŒ ์šด์˜์ฒด์ œ ์ปค๋„์„ ๊ณต์œ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ VM์— ๋น„ํ•ด ๋น ๋ฅด๊ณ  ๊ฐ€๋ณ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
VM์€ ๊ฐ๊ฐ์˜ Guest OS๋ฅผ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ ์šด์˜์ฒด์ œ ์ „์ฒด๋ฅผ ๋ถ€ํŒ…ํ•ด์•ผ ํ•œ๋‹ค. ๋ฐ˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ํ˜ธ์ŠคํŠธ ์ปค๋„ ์œ„์—์„œ ๋…๋ฆฝ๋œ ํ”„๋กœ์„ธ์Šค๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ณ  ๊ฐ€๋ณ๋‹ค.

 

์ปจํ…Œ์ด๋„ˆ์˜ ํ”„๋กœ์„ธ์Šค ๊ฒฉ๋ฆฌ

์ปจํ…Œ์ด๋„ˆ๋Š” ์ƒˆ๋กœ์šด ๊ฐ€์ƒ ์šด์˜์ฒด์ œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฆฌ๋ˆ…์Šค์˜ namespace์™€ cgroups ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•œ๋‹ค.

  • namespace: ํ”„๋กœ์„ธ์Šค, ๋„คํŠธ์›Œํฌ, ํŒŒ์ผ ์‹œ์Šคํ…œ ๋“ฑ ๋ฆฌ์†Œ์Šค๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฒฉ๋ฆฌ
  • cgroups(control groups): CPU, Memory ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๊ฒฐ์ •

๋‘ ๊ฐœ๋…์ด ๋น„์Šทํ•ด๋ณด์ด์ง€๋งŒ namespace๋Š” ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒฉ๋ฆฌ์˜ ๊ฐœ๋…์ด๊ณ , cgroups์€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ๋Ÿ‰์„ ๊ฒฐ์ •ํ•˜๋Š” ์ œํ•œ์˜ ๊ฐœ๋…์ด๋‹ค.

์ด ๋‘ ๊ธฐ๋Šฅ์ด ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋ฉด์„œ, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ๋œ ์„œ๋ฒ„ ์•ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜์˜ ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„์—์„œ 2๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ์ปจํ…Œ์ด๋„ˆ A์—์„œ ps aux๋ฅผ ์‹คํ–‰ํ•˜๋ฉด A ๋‚ด๋ถ€ ํ”„๋กœ์„ธ์Šค๋งŒ ๋ณด์ธ๋‹ค. 
ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋‘ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‘ ๊ฐ™์€ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์œ„์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์ด๋‹ค.

 

LXC (Linux Containers)

LXC๋Š” ๋ฆฌ๋ˆ… ์ปค๋„์˜ namespace์™€ cgroups๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฉ๋ฆฌ๋œ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ์ดˆ๊ธฐ Docker๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ LXC๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค. ํ˜„์žฌ๋Š” libcontainer๋ผ๋Š” ๋…์ž์ ์ธ ์‹คํ–‰ ์—”์ง„์„ ๊ฐœ๋ฐœํ•˜์—ฌ LXC ์—†์ด ์ž์ฒด์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

LXC๋Š” ์šด์˜์ฒด์ œ ๋‹จ์œ„ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. ๋„์ปค์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งŒ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ, VM๊ณผ ์œ ์‚ฌํ•œ ๊ฒฝ๋Ÿ‰ ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฒ‰๋ณด๊ธฐ์—๋Š” VM๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ํ˜ธ์ŠคํŠธ์™€ ๋™์ผํ•œ ์ปค๋„์„ ๊ณต์œ ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

 

Ubuntu์— LXC ์„ค์น˜ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ

LXC๊ฐ€ ์™€๋‹ฟ์ง€ ์•Š์•„์„œ ubuntu ์ธ์Šคํ„ด์Šค์—์„œ ์„ค์น˜ํ•ด๋ณด์•˜๋‹ค.

sudo apt install lxc

์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ณ  lxc-checkconfig์„ ํ†ตํ•ด ์„ค์น˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ…Œ์ŠคํŠธ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ

sudo lxc-create -n test-container1 -t download

 

์ƒ์„ฑ ํ›„ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

docker exec๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ ‘์†ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ ‘์† ๊ฐ€๋Šฅํ•˜๋‹ค.

 sudo lxc-attach -n test-container1

 

ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„์™€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ uname -r ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋ฒ„์ „์„ ํ™•์ธํ•ด๋ณด๋ฉด ์ปค๋„ ๋ฒ„์ „์ด ๋™์ผํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

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

 

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด nginx๋ฅผ ์„ค์น˜ํ•˜์˜€์œผ๋ฉฐ, ์ดํ›„ ss -tulnp ๋ช…๋ น์–ด๋กœ ํฌํŠธ 80์ด ์—ด๋ ค์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ๋‹ค.

apt install nginx -y
systemctl start nginx

์ปจํ…Œ์ด๋„ˆ ๋ฐ–์œผ๋กœ ๋‚˜์™€์„œ๋„ ๋™์ผํ•œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋ดค๋Š”๋ฐ, ํ˜ธ์ŠคํŠธ์—์„œ๋Š” ํฌํŠธ 80์ด ์—ด๋ ค์žˆ์ง€ ์•Š์•˜๋‹ค.
์ฆ‰, ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์—ด๋ฆฐ ํฌํŠธ๋Š” ํ•ด๋‹น namespace ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.

 

์ด๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋Š” ์ปค๋„์„ ๊ณต์œ ํ•˜์ง€๋งŒ, ๋„คํŠธ์›Œํฌ ์Šคํƒ์€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒฉ๋ฆฌ๋˜์–ด ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

'CS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Docker  (0) 2025.04.29
๊ฐ€์ƒํ™” (Virtualization)  (0) 2025.04.28
[OS] ํ”„๋กœ์„ธ์Šค  (0) 2025.02.17