ααΎαααΆαααΆαααΆααααααΆαααααααΆαααααΎααααΆαα systemd αα
αααα»α containers α’ααααααααααΆααΌαααα αΎαα αααααααα
ααααΆα 2014 αα·αααααααααα·αα»αααααααΎα Daniel Walsh ααΆααααααα’ααααααα½αα
αα
αααα»αα’ααααααααααΎαααΉααααα αΆαααΈα’αααΈαααααΆαααααΆααααααΌαααΆααααααααΆ αα·αααααααα Podman α’αΆα
αα½αααΎααααα»ααααα αΆαααα
ααΆαα ααα»ααααΆα
αααΎαααΎααααΈααααΎαααΆααααααααααα
αααα»ααα»αααΊααα ααΌα
ααΆα
- αα»ααα α»ααααΆαααα - ααα»αααααΆα αααΎαα ααααΆααααααα·ααΈαα α»ααααΆαααααααααα½αααα ααααΈαααΆαααΈααα·αααα·α α αΎαααααΎαααΆαααΆαα αααα»ααα»αααΊαααα ααΆααΆααα·αααΆαα ααΆααΆααΆααααααΎαααΆααααα»αααΆαααααααααααα·ααΈαααααααα ααΆααααΆααααααΈααααΌ ααα»αααααα·αααααααααααααΆααΉαααΈααααααααΎααΆαα α‘αΎααα α¬ααααΆαααααα·αααΆαααααααααα ααΌα αααα ααΆαααααΎαααΆααααααα·ααΈααΌα ααΆααααΆαααααααααααΎαααΆαααα systemd ααΈα―αααΆα―αααΆαααΊααΆααααααα’α₯αααα ααα
- α―αααΆαα―αααΆαααααααα - αααααα·ααΈααΆαα αααΎααααααααΎαααΆααα ααΆααααα»ααα»αααΊαααααααΌαααΆααααααΎαα‘αΎαααΈααΌααααααΈαα»αααΆαααααΎαααΆαααΎαααΆαααΈααα·αααα·α α¬ααΌαααααα αααααα·ααΈααΆαααααααΆαα―αααΆα―αααΆααααααααΌαααΆαααααααααααΆαααααααα·ααΈααΆααααα α αΎααααααΈααααααααα½ααααα½αααααααΌαααΆαα αΆααααααΎαα ααΌα ααααααΆαα αααααααΎαααΆααααα»αααΆαα αΆααααααΎαααααΆαααααααααααΎαα·ααΈααΆααααααααααΆαααΆαααα ααΆααΆαααΆααα½α α αΌαααααΆαααα init ααααΆαααααα½αααααα’αααα
- Systemd ααΊααΆαααααα·ααΈαααααααααααααΎαααΆαα ααΆαααααααααααααΆαααα (αα·α α αΆααααααΎαααααΆααααα‘αΎααα·α α¬αααααΆααααααΎαααΆα zombie) αααααΎαααΆαα§αααααααααααααα
αααααΆααα·ααΆαααΆααΆαα ααα»ααααΆα
αααΎαααααα·αααααΎαααΆααααααααααα
αααα»ααα»αααΊαααα α
ααα»α
ααααΆαααα½αααΊααΆ systemd/journald ααααααααααααααααααα»αααΊααα αα·αα§αααααααΌα
ααΆ
ααΆαααααααααα Podman
ααΎαβααΈαααΆαβαααα»αβααΆαβααΆαααΆαααβααΆ ααΈαααα»αβααααΆαααΆαααβααΆαβααΆαβαα
βαα»αβα αΎαα αααα»ααααααα½ααα»αααααΌααααα»αααΆαααααΎαααΆααα»αααΊααααα
Red Hat ααΆααααααα
α
α·αααα’αα·αααα
ααα»αααααΆα αααΎαααααΎααααααα
Podman αααααααα»α αα·ααααα»ααα·αααΆααα·ααΈαααααΆααααΉααα»ααααααα’ααααΎααααααααααα αααΆαααΆαα·α Systemd ααΊααΆααααααααααααΈαα»α αααααααΎααΆααΌαα αααα»α α αΎαααΆααα·αα’αα»ααααΆαα±ααααΆααααΎαααΆαααΆαααααΉαααααΌααα αααα»ααα»αααΊααα ααΆααααααΆααΆααα·αα’αΎααΎααΈαααααααααα»αααααΆααααΆααααΆαααααααΆααααααΎααααΆαααα»αααΊαααααααααα»αααααΎαααΆαα
Podman ααΉαααΈα’αααΈαααααααΌαααααΎααΎααααΈααααΎα±ααααααααααααααΎαααΆαααΆαααααΉαααααΌααα αααα»ααα»αααΊαααα ααΆααααΌαααΆαα’αααΈαααΌα ααΆ αααα tmpfs αα ααΎ /run αα·α /tmp α ααΆαα αΌαα α·αααααΎαααα·ααΆααΆα "containerized" α αΎαααααΉαααΆααΆαααΆαα’αα»ααααΆααααα»αααΆαααααααα ααΆαααααααααααααΆααα cgroup directory αα·ααα ααΆαα /var/log/journald folderα
αα αααα’αααα αΆααααααΎααα»αααΊααααααααΆααααααααΆααααΌαααΊ init α¬ systemd Podman ααααααα ααΆαααααααα tmpfs αα·α Cgroups αααααααααααααααα· ααΎααααΈααΆααΆααΆ systemd α αΆααααααΎααααααααΆααααα αΆα ααΎααααΈαααααααΆααααααααΎαααααΎαααΆααααααααααααααααα·ααα ααΌαααααΎαααααΎα --systemd=false α ααΌαα αααΆαααΆ Podman ααααΎαααααα systemd αα ααααααααΆααΎαααΆααΆααααΌαααΆαααααΎαααΆαααΆααααααααΆ systemd α¬ init α
αααααΆααΆααααααααα ααααΈααααα ααααΆαα
αα»αα podman ααα
...βsystemd=true|false
αααα»αααααΎαααΆααα»αααΊααααα αααα»αααααααααααααα ααΆαααΎαααααΎαααΆαααΆαααααΆαααΎαα
ααααα·αααΎα’αααααααΎαααΆαααΆααααααααΆ systemd α¬ init αα ααΆααααα»ααα»αααΊααα Podman ααΉαααααααα ααΆααααααααα ααα»α αααα tmpfs αα αααα»αααααΆααααααα
/run, /run/lock, /tmp, /sys/fs/cgroup/systemd, /var/lib/journal
ααααα αααααΆααααααααααΆαααΎαααΉαααΆα SIGRTMIN+3α
ααΆααα’αααααα’αα»ααααΆαα±αα systemd ααααΎαααΆααα αααα»ααα»ααα·ααα·ααααααααΆαααΆαααααααααΆαα½αα‘αΎαα
α αααΆαα systemd ααααΆααΆαααααααα ααααααααα―αααΆα cgroup α ααααααΆαααΆααααα SELinux ααΆααΆαααα»αααΊαααααΈααΆαααααΎααΆααΆαααααΆαααΎαα ααΎααααΈααΎαααΆαααααα ααΌαααΎααααΆαααΆαααααα boolean container_manage_cgroupα
setsebool -P container_manage_cgroup αα·α
α₯α‘αΌααααααΌααααα‘ααααΎαα’αααΈααα Dockerfile ααΎααα ααΌα αααααΆααααΆαααααΎαααΆα systemd αα αααα»ααα»αααΊααααααααααΎ Podman:
# 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
ααααα·ααΈαααααα»αααααΆα αααΎαααααα α’αααΈααα αΆααααα ααΆααααΆαααα’ ααΆααααΌαααααΎααααααααα α αΎαααΆααααααααααΌαααΆααααααΆαα»ααααααΆααααΈα αΆααααααΎαααααααααα‘αΎααα·αα
α₯α‘αΌααααααΎαααααΆααααα αΆααααααΎααα»α:
# 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! αα
ααΈαααα’ααααα
ααααααΌαααΆαααΆαα½α tambourine ααΎααααΈααΎαααααΎαααΆααα»αααΊαααααααααααΆαααααααΆαααααααα·αα (ααΆα αα·ααααα
ααααααααααΉαααααΌαααΆαααΆαααΆαααΎααααΈααααΎα±ααααΆααααΎαααΆααααΆααααΌααα
αααα»α Docker α¬ααΆααΉαα
αΆαααΆα
αααααΌαααααΎαααΆααα
αααα»ααα»αααΊααααααααΆααα·αααα·α αααααΆααααααααΆααααα’α·αααΌαααΎα
ααααααα’αα½αα ααα½ααααα’αααΈ Podman αα·α systemd
Podman ααααΎαααΆαααΆαααα’ααΆα Docker αα αααα»αα―αααΆαα―αααΆαααααααα
ααααα·αααΎαα»αααΊαααααααΌαα αΆααααααΎααα αααααααααααα αΆααααααΎα αααα’αααα’αΆα αααα αΌαααΆααααααααΆ Podman ααααααααααα αααα»αα―αααΆαα―αααΆαααααααα αααααΉαα αΆααααααΎαααααΆαααα αα·ααααα½ααα·αα·αααααΆα Podman ααααΎααααΌ fork-exec αααααααΆαα αααααΆααα·αααα ααααΎαααΆααα»αααΊαααααΊααΆααΌαααααααΎαααΆα Podman ααΌα ααααααααααααα’αΆα αααα½ααα·αα·ααααα½αααΆαααΆαααΆααααα½αα
Docker ααααΎααααΌαααΆαααΈαααααα α αΎαααΆααααααααΆ Docker CLI ααα’αΆα ααααΌαααΆαααΆαααααααααΆαααα αααα»αα―αααΆα―αααΆααααααα ααααααΆαααΆααααα αα αααααααααΆαααΈαααααα Docker ααααΆαααα αααα·α Docker ααΆ (αααΆαααΈαααααα) ααααΆαααΆααααΎαααΆααα½ααααααααααααααααααααα stdin αα·α stdout α αα αααα»αααα systemd αα·αααΆααααα·αα’αααΈααΆααααααΆαααααΆααααΆαααΈαααααα Docker αα·ααα»αααΊααααααααααΎαααΆααααααααΆαααααααααααααααααα·α Docker αα ααΌα ααααα αΎααα αααα»αααααΌααα ααααααααααααααααΎαααΆααΌαααααΆααα·αα’αΆα αααα½ααα·αα·αααααααΆααααααΆαααα
αααα»αααααΎα±ααααααααααααααΎαααΆαααΆαααααααα
Podman αααααααααααΆαααααΎα±αααααααααΆααααααααααΆαααααΉαααααΌαα αααααΆααα Podman ααααΎααααΌ fork-exec ααΆα’αΆα αααααΌααααααα ααααΎαααΆααα»αααΊαααααΌαααααααΆα Docker αα·αβα’αΆα βααααΎβααΌα ααααβααΆαβααβαααααβααΆβααααΎβααααΌβαααΆαααΈαβαααααβ-αααΆαααΈαβαααααΎα
ααααΆ varlink ααα Podman ααααΎααΎααααΈααααΆααααααααΆαα½αα’αα·αα·ααααΈα ααααΆααα ααΆαααα»αααΊαααααΊαα·αααΆααααΌαααΆαααααΎα±αααααααααΆαααααααααα½αα αααα αα cockpit-podman αααααααααααα»α Node.js αα·αααΆααααααα½ααααααααα cockpit α’αα»ααααΆαα±ααααα»αααααααΎα’ααααααααααΆαα½ααα»α Podman ααΆααααα ααα»α αααααΆααααα αααααα αααα·αααα αααααααααααα»αααααΎαααΆαααΆαααΈαααααα αα-ααααα ααααΎααΆααα ααΆαααααα varlink αααααααααααααααΆααααΆαααααααααα αααααΆαααα Systemd ααααΎαααΆααααααα·ααΈ Podman ααΎααααΈααα½αααΆα αα·αα αΆααααααΎαααααααααααα»αααΊαααα ααΆαααααΎα±ααααααααααααααααα ααΎαααααα½ααα»αααααΆαααααααΌαααΆααααααΆαααααα·αααααααα»αααααΎαααΆαα₯αααααααα αααα’αα»αααα APIs ααΈα ααααΆαα
ααΎαααΈαααααα ααΎααααα»ααααααΎααααΆαααΈαααααα Podman αα½ααααααααααααα α ααΆ podman-remote αααα’αα»αααα Podman CLI ααΌα ααααΆ ααα»ααααα α varlink ααΎααααΈααααΎαααΆααα»αααΊαααα Podman-remote α’αΆα ααααΎαααΆααα ααΎααααΌααααααα SSH αααα’αα»ααααΆαα±ααα’αααααααΎα’ααααααααααααα»ααααα·ααΆαααΆαα½ααα»αααΊααααα ααΎαααΆαααΈαααααααααααΆα ααΌαααα ααΎαααΆαααααααααΎαααααΎαααΆα podman-remote ααΎααααΈααΆαααα MacOS αα·α Windows αα½αααΆαα½αααΉα Linux ααΌα ααααα’αααα’αα·αααααααα ααΎαααα·ααΆααΆαααααα’αΆα ααααΎαααΆααααΆαααΈααα·αααα·α Linux ααΆαα½α Podman varlink αααα»αααααΎαααΆα αα·αααΆααααα·αααααααααααααααα»αααΊααααααα»αααααΎαααΆααα ααΎαααΆαααΈαααΌαααααΆαα
SD_NOTIFY
Systemd α’αα»ααααΆαβα±ααβα’αααβαααααΆαβααΆαβααΎαβααααΎαααΆαβααααΆααααβαααα½αβαα αΌαβαααβααααΆβαα»αααΊαααβαααβαα½αβααβαααααΌαβα±ααβα αΆααβααααΎαα Podman α’αΆα αααααΌααααα SD_NOTIFY αα ααΆααααααΆαα»αααΊααα ααΎααααΈα±ααααααΆααααααΌαααααΉααααααααααααααΆααΆαα½α ααΆααααΎααααΈααααΎαααΆαα α αΎαααααααα Docker αααααααΎααααΌαααΆαααΈαααααααα·αα’αΆα ααααΎααΌα αααααΆαααα
αα αααα»ααααααΆα
ααΎααααααααΉαααααααααΆααααααααΆ podman αααααΎα CONTAINERID ααααααααΎααααααααα αααααΉααααααΎαα―αααΆαα―αααΆαααααααα ααΎααααΈααααααααααα»αααΊαααααΆααααΆαααααααΆααααααΆααα ααΆβαα½αβααβααααΎαααΆαβααΆααβααααβααΆ root αα·αβααααΆαβα«αβαααααΆααβαα»αβαααβαα·αβααΆαβαα·αααα·α ααΎααααααΆααααΆαααΎαααααΎαααααΆαααααααααΎαααΆα OCI-compatible systemd-nspawn αααααα
ααα ααααΈααααα·ααααΆα
ααΆαααααΎαααΆααααααααααα
αααα»ααα»αααΊαααααΊααΆαααααΌαααΆααααα’αΆα
αααααΆαα α αΎαα’ααα»αααα Podman ααΈαααα»αααΎαααΆααα»αααΊαααααααΎαααΆαααααα·αααΆαααααααααΆαα½ααααααααα ααα»ααααααααΎα±ααααΆααΆααααα½αααααΎα
ααααα: www.habr.com