ç§ãã¡ã¯ã³ã³ããå
㧠systemd ã䜿çšãããšãããããã¯ãé·ãéè¿œããããŠããŸããã 2014 幎ã«é¡ããŸãããåœç€Ÿã®ã»ãã¥ãªã㣠ãšã³ãžãã¢ã§ãããããšã« ãŠã©ã«ã·ã¥ã¯æ¬¡ã®èšäºãæžããŸããã
ãã®èšäºã§ã¯ãæéã®çµéãšãšãã«äœãå€ãã£ãã®ãããããŠãã®åé¡ã«ãã㊠Podman ãã©ã®ããã«åœ¹ç«ã€ã®ãã説æããŸãã
ã³ã³ããå
㧠systemd ãå®è¡ããçç±ã¯æ¬¡ã®ãšããã§ãã
- ãã«ããµãŒãã¹ã³ã³ãã â å€ãã®äººã¯ããã«ããµãŒãã¹ ã¢ããªã±ãŒã·ã§ã³ãä»®æ³ãã·ã³ããåŒãåºããã³ã³ããå ã§å®è¡ããããšèããŠããŸãã ãã¡ããããã®ãããªã¢ããªã±ãŒã·ã§ã³ããã€ã¯ããµãŒãã¹ã«åå²ããæ¹ãè¯ãã§ããããã誰ãããã®æ¹æ³ããŸã ç¥ã£ãŠããããã§ã¯ãããŸããããããã¯åã«æéããããŸããã ãããã£ãŠããã®ãããªã¢ããªã±ãŒã·ã§ã³ããsystemd ã«ãã£ãŠãŠããã ãã¡ã€ã«ããèµ·åããããµãŒãã¹ãšããŠå®è¡ããããšã¯å®å šã«çã«ããªã£ãŠããŸãã
- Systemd ãŠããã ãã¡ã€ã« â ã³ã³ããå ã§å®è¡ãããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã¯ã以åã«ä»®æ³ãã·ã³ãŸãã¯ç©çãã·ã³äžã§å®è¡ãããŠããã³ãŒãããæ§ç¯ãããŸãã ãããã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ããããã®ã¢ããªã±ãŒã·ã§ã³çšã«äœæããããŠããã ãã¡ã€ã«ããããã¢ããªã±ãŒã·ã§ã³ã®èµ·åæ¹æ³ãç解ããŠããŸãã ãããã£ãŠãç¬èªã® init ãµãŒãã¹ããããã³ã°ãããããããµããŒããããŠããæ¹æ³ã䜿çšããŠãµãŒãã¹ãéå§ããæ¹ããŸã è¯ãã§ãããã
- Systemd ã¯ããã»ã¹ ãããŒãžã£ãŒã§ãã ä»ã®ã©ã®ããŒã«ãããåªãããµãŒãã¹ç®¡ç (ãµãŒãã¹ã®ã·ã£ããããŠã³ãåèµ·åããŸãã¯ãŸã³ã ããã»ã¹ã®åŒ·å¶çµäº) ãè¡ããŸãã
ãšã¯ãããsystemd ãã³ã³ãããŒã§å®è¡ããªãçç±ã¯ãããããããŸãã äž»ãªãã®ã¯ãsystemd/journald ãã³ã³ãããŒã次ã®ãããªããŒã«ã®åºåãå¶åŸ¡ããããšã§ãã
ããããã³ã®å°æ¥
ããããç¶æ³ãåé²ããããšããå ±åã§ããããšãå¬ããæããŸãã Red Hat ã§ã³ã³ããã®å®è¡ãæ
åœããããŒã ã¯ã
å€ãã®äººãããããŸãã
Podman ãšç§ã¯æ±ºã㊠systemd ããŒã¹ã®ã³ã³ãããŒã«å察ããŠããããã§ã¯ãããŸããã çµå±ã®ãšããã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 -Pcontainer_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 .
SELinux ã« systemd ã«ãã Cgroups èšå®ã®å€æŽãèš±å¯ããããã«æ瀺ããŸãã
# setsebool -P container_manage_cgroup true
ãšããã§ããã®æé ãå¿ããŠãã人ãå€ãã§ãã 幞ããªããšã«ããããè¡ãå¿ èŠãããã®ã¯ XNUMX åã ãã§ãããèšå®ã¯ã·ã¹ãã ã®åèµ·ååŸã«ä¿åãããŸãã
ããã§ãã³ã³ãããèµ·åããã ãã§ãã
# 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 ã«é¢ãããã®ä»ã®åªããç¹
systemd ãŠããã ãã¡ã€ã«ã§ã¯ Podman ã Docker ãããããŸãåäœããŸã
ã·ã¹ãã ã®èµ·åæã«ã³ã³ãããéå§ããå¿ èŠãããå Žåã¯ãé©å㪠Podman ã³ãã³ãã systemd ãŠããã ãã¡ã€ã«ã«æ¿å ¥ããã ãã§ããµãŒãã¹ãéå§ããç£èŠãããŸãã Podman ã¯æšæºã® fork-exec ã¢ãã«ã䜿çšããŸãã èšãæããã°ãã³ã³ããããã»ã¹ã¯ 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 ããã±ãŒãžã䜿çšãããšãWeb ã€ã³ã¿ãŒãã§ã€ã¹ãéã㊠Podman ã³ã³ãããŒãšå¯Ÿè©±ã§ããããã«ãªããŸãã Cockpit-podman ãå®è¡ããŠãã Web ããŒã¢ã³ã¯ãsystemd ããªãã¹ã³ãã varlink ãœã±ããã«ã¡ãã»ãŒãžãéä¿¡ããŸãã 次ã«ãSystemd 㯠Podman ããã°ã©ã ãã¢ã¯ãã£ãã«ããŠã¡ãã»ãŒãžãåä¿¡ããã³ã³ãããŒã®ç®¡çãéå§ããŸãã ãœã±ããçµç±ã§ systemd ãã¢ã¯ãã£ãåãããšããªã¢ãŒã API ãå®è£ ãããšãã«ããŒã¢ã³ãåžžã«å®è¡ããå¿ èŠããªããªããŸãã
ããã«ãpodman-remote ãšåŒã°ããå¥ã® Podman ã¯ã©ã€ã¢ã³ããéçºäžã§ããããã¯åã Podman CLI ãå®è£ ããŸãããã³ã³ãããå®è¡ããããã« varlink ãåŒã³åºããŸãã Podman-remote 㯠SSH ã»ãã·ã§ã³äžã§å®è¡ã§ãããããããŸããŸãªãã·ã³äžã®ã³ã³ãããšå®å šã«å¯Ÿè©±ã§ããŸãã å°æ¥çã«ã¯ãpodman-remote ã Linux ãšãšãã« MacOS ããã³ Windows ããµããŒãã§ããããã«ããäºå®ã§ããããã«ããããããã®ãã©ãããã©ãŒã äžã®éçºè ã¯ãPodman varlink ãå®è¡ãããŠãã Linux ä»®æ³ãã·ã³ãå®è¡ããããŒã«ã« ãã·ã³äžã§ã³ã³ãããå®è¡ãããŠãããšããå®å šãªãšã¯ã¹ããªãšã³ã¹ãåŸãããšãã§ããŸãã
SD_NOTIFY
Systemd ã䜿çšãããšãå¿ èŠãªã³ã³ããåããããµãŒãã¹ãéå§ããããŸã§ãè£å©ãµãŒãã¹ã®èµ·åã延æã§ããŸãã Podman 㯠SD_NOTIFY ãœã±ãããã³ã³ãããŒåããããµãŒãã¹ã«è»¢éããŠããµãŒãã¹ã systemd ã«æäœã®æºåãã§ããããšãéç¥ã§ããããã«ããŸãã ãŸããã¯ã©ã€ã¢ã³ã/ãµãŒã㌠ã¢ãã«ã䜿çšãã Docker ã§ã¯ãããè¡ãããšãã§ããŸããã
èšç»ã§ã¯
ã³ãã³ã podman generated systemd CONTAINERID ãè¿œå ããäºå®ã§ããããã¯ãæå®ãããç¹å®ã®ã³ã³ãããŒã管çããããã® systemd ãŠããã ãã¡ã€ã«ãçæããŸãã ããã¯ãç¹æš©ã®ãªãã³ã³ããã®ã«ãŒã ã¢ãŒããšã«ãŒãã¬ã¹ ã¢ãŒãã®äž¡æ¹ã§æ©èœããã¯ãã§ãã OCI äºæã® systemd-nspawn ã©ã³ã¿ã€ã ãæ±ãããªã¯ãšã¹ãããããŸããã
ãŸãšã
ã³ã³ããå
㧠systemd ãå®è¡ããå¿
èŠãããã®ã¯ç解ã§ããŸãã ãã㊠Podman ã®ãããã§ãsystemd ãšç«¶åããã«äœ¿ããããã³ã³ãã ã©ã³ã¿ã€ã ãã€ãã«å®æããŸããã
åºæïŒ habr.com