์ปจํ…Œ์ด๋„ˆ์—์„œ systemd ์‹คํ–‰

์šฐ๋ฆฌ๋Š” ์˜ค๋žซ๋™์•ˆ ์ปจํ…Œ์ด๋„ˆ์—์„œ systemd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์ œ๋ฅผ ๋”ฐ๋ผ์™”์Šต๋‹ˆ๋‹ค. 2014๋…„์— ๋ณด์•ˆ ์—”์ง€๋‹ˆ์–ด Daniel Walsh๊ฐ€ ๊ธฐ์‚ฌ๋ฅผ ์ผ์Šต๋‹ˆ๋‹ค. Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ systemd ์‹คํ–‰, ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๋…„ ํ›„ - ๋˜ ๋‹ค๋ฅธ ์ด๋ฆ„์€ ๊ถŒํ•œ์ด ์—†๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ systemd ์‹คํ–‰, ๊ทธ๋Š” ์ƒํ™ฉ์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๊ทธ๋Š” โ€œ์•ˆํƒ€๊น๊ฒŒ๋„ XNUMX๋…„์ด ์ง€๋‚˜๋„ โ€˜Docker systemโ€™์„ ๊ตฌ๊ธ€๋งํ•˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ฒƒ์€ ๋˜‘๊ฐ™์€ ์˜ˆ์ „ ๊ธ€์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์ด์ œ๋Š” ๋ญ”๊ฐ€๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค.โ€ ๊ฒŒ๋‹ค๊ฐ€ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. Docker์™€ systemd ๊ฐœ๋ฐœ์ž ๊ฐ„์˜ ์ถฉ๋Œ.

์ปจํ…Œ์ด๋„ˆ์—์„œ systemd ์‹คํ–‰

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ฌด์—‡์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  Podman์ด ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ systemd๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‹ค์ค‘ ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ โ€“ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์ค‘ ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ๊บผ๋‚ด ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋” ์ข‹๊ฒ ์ง€๋งŒ ์•„์ง ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์œ„ ํŒŒ์ผ์—์„œ systemd์— ์˜ํ•ด ์‹œ์ž‘๋œ ์„œ๋น„์Šค์™€ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค.
  2. ์‹œ์Šคํ…œ ๋‹จ์œ„ ํŒŒ์ผ โ€“ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด์ „์— ๊ฐ€์ƒ ๋˜๋Š” ๋ฌผ๋ฆฌ์  ๋จธ์‹ ์—์„œ ์‹คํ–‰๋˜์—ˆ๋˜ ์ฝ”๋“œ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ์œผ๋กœ ์ž‘์„ฑ๋œ ๋‹จ์œ„ ํŒŒ์ผ์ด ์žˆ์œผ๋ฉฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž์ฒด ์ดˆ๊ธฐํ™” ์„œ๋น„์Šค๋ฅผ ํ•ดํ‚นํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ง€์›๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค.
  3. Systemd๋Š” ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋„๊ตฌ๋ณด๋‹ค ์„œ๋น„์Šค๋ฅผ ๋” ์ž˜ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค(์„œ๋น„์Šค ์ข…๋ฃŒ, ์„œ๋น„์Šค ๋‹ค์‹œ ์‹œ์ž‘ ๋˜๋Š” ์ข€๋น„ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ).

์ฆ‰, ์ปจํ…Œ์ด๋„ˆ์—์„œ systemd๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ๋ฐ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ systemd/journald๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์˜ ์ถœ๋ ฅ๊ณผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์ œ์–ดํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Kubernetes ๋˜๋Š” ์˜คํ”ˆ์‹œํ”„ํŠธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ stdout ๋ฐ stderr์— ์ง์ ‘ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ systemd ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์„ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Docker ๋ฐ Moby ๊ฐœ๋ฐœ์ž๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ systemd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

ํฌ๋“œ๋งŒ์˜ ๋“ฑ์žฅ

๋งˆ์นจ๋‚ด ์ƒํ™ฉ์ด ์ง„์ „๋˜์—ˆ์Œ์„ ๋ณด๊ณ ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Red Hat์—์„œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ๋‹ด๋‹นํ•˜๋Š” ํŒ€์€ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋งŒ์˜ ์ปจํ…Œ์ด๋„ˆ ์—”์ง„. ๊ทธ ์‚ฌ๋žŒ ์ด๋ฆ„์ด ์žˆ๋„ค ํฌ๋“œ ๋งจ Docker์™€ ๋™์ผํ•œ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค(CLI)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฑฐ์˜ ๋ชจ๋“  Docker ๋ช…๋ น์€ Podman์—์„œ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ข…์ข… ์„ธ๋ฏธ๋‚˜๋ฅผ ๊ฐœ์ตœํ•ฉ๋‹ˆ๋‹ค. Docker๋ฅผ Podman์œผ๋กœ ๋ณ€๊ฒฝ, ๊ทธ๋ฆฌ๊ณ  ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•œ ์ฒซ ๋ฒˆ์งธ ์Šฌ๋ผ์ด๋“œ ํ˜ธ์ถœ: alias docker=podman.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด Podman๊ณผ ๋‚˜๋Š” ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ์— ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ Systemd๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” Linux init ํ•˜์œ„ ์‹œ์Šคํ…œ์ด๋ฉฐ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ์ˆ˜์ฒœ ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ์ต์ˆ™ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Podman์€ ์ปจํ…Œ์ด๋„ˆ์—์„œ systemd๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. /run ๋ฐ /tmp์— tmpfs๋ฅผ ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋…€๋Š” "์ปจํ…Œ์ด๋„ˆํ™”๋œ" ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜๋ฉฐ cgroup ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ผ๋ถ€์™€ /var/log/journald ํด๋”์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ๊ถŒํ•œ์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์ด init ๋˜๋Š” systemd์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด Podman์€ systemd๊ฐ€ ๋ฌธ์ œ ์—†์ด ์‹œ์ž‘๋˜๋„๋ก tmpfs ๋ฐ Cgroups๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž๋™ ์‹คํ–‰ ๋ชจ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜๋ ค๋ฉด --systemd=false ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. Podman์€ systemd ๋˜๋Š” init ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํŒ๋‹จํ•  ๋•Œ๋งŒ systemd ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋งค๋‰ด์–ผ์—์„œ ๋ฐœ์ทŒํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

๋‚จ์ž ํฌ๋“œ ๋งจ ์‹คํ–‰
...

โ€“systemd=true|false

systemd ๋ชจ๋“œ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ systemd ๋˜๋Š” init ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด Podman์€ ๋‹ค์Œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— tmpfs ๋งˆ์šดํŠธ ์ง€์ ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

/run, /run/lock, /tmp, /sys/fs/cgroup/systemd, /var/lib/journal

๋˜ํ•œ ๊ธฐ๋ณธ ์ •์ง€ ์‹ ํ˜ธ๋Š” SIGRTMIN+3์ž…๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์„ ํ†ตํ•ด systemd๋Š” ์ˆ˜์ • ์—†์ด ๋‹ซํžŒ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : systemd๋Š” cgroup ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์“ฐ๊ธฐ๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ SELinux๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์“ฐ๊ธฐ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด Container_manage_cgroup ๋ถ€์šธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค.

setsebool -P Container_manage_cgroup true

์ด์ œ Podman์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์—์„œ systemd๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Dockerfile์˜ ๋ชจ์Šต์„ ์‚ดํŽด๋ณด์„ธ์š”.

# cat Dockerfile

FROM fedora

RUN dnf -y install httpd; dnf clean all; systemctl enable httpd

EXPOSE 80

CMD [ "/sbin/init" ]

๊ทธ๊ฒŒ ๋‹ค์•ผ.

์ด์ œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์กฐ๋ฆฝํ•ฉ๋‹ˆ๋‹ค.

# podman build -t systemd .

systemd๊ฐ€ Cgroup ๊ตฌ์„ฑ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก SELinux์— ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

# setsebool -P container_manage_cgroup true

๊ทธ๋Ÿฐ๋ฐ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด ๋‹จ๊ณ„๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ ์ด ์ž‘์—…์€ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜๋ฉฐ ์‹œ์Šคํ…œ์„ ์žฌ๋ถ€ํŒ…ํ•œ ํ›„์— ์„ค์ •์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

# podman run -ti -p 80:80 systemd

systemd 239 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid)

Detected virtualization container-other.

Detected architecture x86-64.

Welcome to Fedora 29 (Container Image)!

Set hostname to <1b51b684bc99>.

Failed to install release agent, ignoring: Read-only file system

File /usr/lib/systemd/system/systemd-journald.service:26 configures an IP firewall (IPAddressDeny=any), but the local system does not support BPF/cgroup based firewalling.

Proceeding WITHOUT firewalling in effect! (This warning is only shown for the first loaded unit using IP firewalling.)

[  OK ] Listening on initctl Compatibility Named Pipe.

[  OK ] Listening on Journal Socket (/dev/log).

[  OK ] Started Forward Password Requests to Wall Directory Watch.

[  OK ] Started Dispatch Password Requests to Console Directory Watch.

[  OK ] Reached target Slices.

โ€ฆ

[  OK ] Started The Apache HTTP Server.

์ด์ œ ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

$ curl localhost

<html  xml_lang="en" lang="en">

โ€ฆ

</html>

์ฐธ๊ณ : Docker์—์„œ๋Š” ์ด ์ž‘์—…์„ ์‹œ๋„ํ•˜์ง€ ๋งˆ์„ธ์š”! ๋ฐ๋ชฌ์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ ํƒฌ๋ฒ„๋ฆฐ๊ณผ ํ•จ๊ป˜ ์ถค์„ ์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์ด ๋ชจ๋“  ๊ฒƒ์ด Docker์—์„œ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ํ•„๋“œ์™€ ํŒจํ‚ค์ง€๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๊ถŒํ•œ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ธฐ์‚ฌ.)

Podman๊ณผ systemd์— ๊ด€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฉ‹์ง„ ์ 

Podman์€ ์‹œ์Šคํ…œ ๋‹จ์œ„ ํŒŒ์ผ์—์„œ Docker๋ณด๋‹ค ๋” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

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

Docker๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉฐ Docker CLI ๋ช…๋ น์„ ๋‹จ์œ„ ํŒŒ์ผ์— ์ง์ ‘ ๋ฐฐ์น˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Docker ํด๋ผ์ด์–ธํŠธ๊ฐ€ Docker ๋ฐ๋ชฌ์— ์—ฐ๊ฒฐ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ(ํด๋ผ์ด์–ธํŠธ)๋Š” stdin ๋ฐ stdout์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ systemd๋Š” Docker ํด๋ผ์ด์–ธํŠธ์™€ Docker ๋ฐ๋ชฌ์˜ ์ œ์–ด ํ•˜์— ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด ์ „ํ˜€ ๋ชจ๋ฅด๋ฏ€๋กœ ์ด ๋ชจ๋ธ ๋‚ด์—์„œ systemd๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์†Œ์ผ“์„ ํ†ตํ•ด systemd ํ™œ์„ฑํ™”

Podman์€ ์†Œ์ผ“์„ ํ†ตํ•œ ํ™œ์„ฑํ™”๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Podman์€ fork-exec ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์ผ“์„ ํ•˜์œ„ ์ปจํ…Œ์ด๋„ˆ ํ”„๋กœ์„ธ์Šค๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Docker๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Podman์ด ์›๊ฒฉ ํด๋ผ์ด์–ธํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” varlink ์„œ๋น„์Šค๋Š” ์‹ค์ œ๋กœ ์†Œ์ผ“์„ ํ†ตํ•ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. Node.js๋กœ ์ž‘์„ฑ๋˜๊ณ  ์กฐ์ข…์„ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋กœ ์ž‘์„ฑ๋œ Cockpit-podman ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด Podman ์ปจํ…Œ์ด๋„ˆ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cockpit-podman์„ ์‹คํ–‰ํ•˜๋Š” ์›น ๋ฐ๋ชฌ์€ systemd๊ฐ€ ์ˆ˜์‹ ํ•˜๋Š” varlink ์†Œ์ผ“์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Systemd๋Š” Podman ํ”„๋กœ๊ทธ๋žจ์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์ผ“์„ ํ†ตํ•ด systemd๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์›๊ฒฉ API๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ง€์†์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋ฐ๋ชฌ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋™์ผํ•œ Podman CLI๋ฅผ ๊ตฌํ˜„ํ•˜์ง€๋งŒ varlink๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” podman-remote๋ผ๋Š” ๋˜ ๋‹ค๋ฅธ Podman ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. Podman-remote๋Š” SSH ์„ธ์…˜ ์œ„์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์˜ ์ปจํ…Œ์ด๋„ˆ์™€ ์•ˆ์ „ํ•˜๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์šฐ๋ฆฌ๋Š” podman-remote๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ Linux์™€ ํ•จ๊ป˜ MacOS ๋ฐ Windows๋ฅผ ์ง€์›ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ํ”Œ๋žซํผ์˜ ๊ฐœ๋ฐœ์ž๋Š” Podman varlink๊ฐ€ ์‹คํ–‰๋˜๋Š” Linux ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‹คํ–‰ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋กœ์ปฌ ๋จธ์‹ ์—์„œ ์‹คํ–‰๋˜๋Š” ์ „์ฒด ๊ฒฝํ—˜์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SD_NOTIFY

Systemd๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ๊นŒ์ง€ ๋ณด์กฐ ์„œ๋น„์Šค์˜ ์‹œ์ž‘์„ ์—ฐ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Podman์€ ์„œ๋น„์Šค๊ฐ€ ์ž‘๋™ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Œ์„ systemd์— ์•Œ๋ฆด ์ˆ˜ ์žˆ๋„๋ก SD_NOTIFY ์†Œ์ผ“์„ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” Docker๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ณ„ํš์—์„œ

์ง€์ •๋œ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด systemd ๋‹จ์œ„ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” podman generate systemd CONTAINERID ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ถŒํ•œ์ด ์—†๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ๋ฃจํŠธ ๋ฐ ๋ฃจํŠธ ์—†๋Š” ๋ชจ๋“œ ๋ชจ๋‘์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. OCI ํ˜ธํ™˜ systemd-nspawn ๋Ÿฐํƒ€์ž„์— ๋Œ€ํ•œ ์š”์ฒญ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ปจํ…Œ์ด๋„ˆ์—์„œ systemd๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Podman ๋•๋ถ„์— ๋งˆ์นจ๋‚ด systemd์™€ ์ถฉ๋Œํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€