A ti tẹle koko-ọrọ ti lilo systemd ninu awọn apoti fun igba pipẹ. Pada ni ọdun 2014, ẹlẹrọ aabo wa Daniel Walsh kowe nkan kan
Ninu àpilẹkọ yii a yoo fihan ohun ti o yipada ni akoko ati bi Podman ṣe le ṣe iranlọwọ fun wa ninu ọran yii.
Awọn idi pupọ lo wa lati ṣiṣẹ eto inu apoti kan, gẹgẹbi:
- Multiservice awọn apoti - ọpọlọpọ eniyan fẹ lati fa awọn ohun elo iṣẹ-ọpọlọpọ wọn kuro ninu awọn ẹrọ foju ati ṣiṣe wọn sinu awọn apoti. Yoo dara julọ, dajudaju, lati fọ iru awọn ohun elo sinu awọn iṣẹ microservices, ṣugbọn kii ṣe gbogbo eniyan mọ bi o ṣe le ṣe eyi sibẹsibẹ tabi nirọrun ko ni akoko. Nitorinaa, ṣiṣe iru awọn ohun elo bii awọn iṣẹ ti a ṣe ifilọlẹ nipasẹ eto lati awọn faili ẹyọkan jẹ oye pipe.
- Systemd Unit Awọn faili - Pupọ awọn ohun elo ti n ṣiṣẹ ninu awọn apoti ni a kọ lati koodu ti o ṣiṣẹ tẹlẹ lori foju tabi awọn ẹrọ ti ara. Awọn ohun elo wọnyi ni faili ẹyọkan ti a kọ fun awọn ohun elo wọnyi ati loye bi o ṣe yẹ ki wọn ṣe ifilọlẹ. Nitorinaa o tun dara julọ lati bẹrẹ awọn iṣẹ ni lilo awọn ọna atilẹyin, dipo gige iṣẹ init tirẹ.
- Systemd jẹ oluṣakoso ilana. O ṣakoso awọn iṣẹ (tiipa, awọn iṣẹ tun bẹrẹ, tabi pa awọn ilana Zombie) dara julọ ju eyikeyi ọpa miiran lọ.
Iyẹn ti sọ, awọn idi pupọ lo wa lati ma ṣiṣẹ eto ni awọn apoti. Ohun akọkọ ni pe systemd/journald n ṣakoso iṣelọpọ awọn apoti, ati awọn irinṣẹ bii
Wiwa ti Podman
Inu wa dun lati jabo pe ipo naa ti lọ siwaju nikẹhin. Awọn egbe lodidi fun nṣiṣẹ awọn apoti ni Red Hat pinnu lati se agbekale
Ọpọlọpọ eniyan ṣe eyi.
Mi Podman ati Emi ko si ni ọna kan lodi si awọn apoti ti o da lori eto. Lẹhinna, Systemd jẹ eto ipilẹ init Linux ti o wọpọ julọ, ati pe ko gba laaye lati ṣiṣẹ daradara ninu awọn apoti tumọ si aibikita bii ẹgbẹẹgbẹrun eniyan ṣe saba si awọn apoti ṣiṣe.
Podman mọ kini lati ṣe lati jẹ ki systemd ṣiṣẹ daradara ninu apoti kan. O nilo awọn nkan bii iṣagbesori tmpfs lori / run ati / tmp. O nifẹ lati jẹ ki agbegbe “afikun” ṣiṣẹ ati nireti kikọ awọn igbanilaaye si apakan tirẹ ti itọsọna akojọpọ ati si folda /var/log/journald.
Nigbati o ba bẹrẹ eiyan kan ninu eyiti aṣẹ akọkọ jẹ init tabi eto, Podman ṣe atunto tmpfs laifọwọyi ati Awọn ẹgbẹ lati rii daju pe eto eto bẹrẹ laisi awọn iṣoro. Lati dènà ipo ifilọlẹ aifọwọyi, lo aṣayan --systemd=eke. Jọwọ ṣakiyesi pe Podman nlo ipo eto nikan nigbati o rii pe o nilo lati ṣiṣẹ systemd tabi aṣẹ init.
Eyi ni yiyan lati inu itọnisọna:
ọkunrin podman run
...–systemd=otitọ| irọ
Nṣiṣẹ a eiyan ni systemd mode. Ṣiṣẹ nipasẹ aiyipada.
Ti o ba ṣiṣẹ eto eto tabi aṣẹ init inu apo eiyan kan, Podman yoo tunto awọn aaye oke tmpfs ninu awọn ilana atẹle:
/run, /run/titiipa, /tmp, /sys/fs/cgroup/systemd, /var/lib/journal
Paapaa ifihan agbara iduro aiyipada yoo jẹ SIGRTMIN+3.
Gbogbo eyi ngbanilaaye systemd lati ṣiṣẹ ninu apoti pipade laisi awọn iyipada eyikeyi.
AKIYESI: awọn igbiyanju eto lati kọ si eto faili akojọpọ. Sibẹsibẹ, SELinux ṣe idiwọ awọn apoti lati ṣe eyi nipasẹ aiyipada. Lati mu kikọ ṣiṣẹ, jẹ ki eiyan_manage_cgroup paramita boolean ṣiṣẹ:
setsebool -P container_manage_cgroup otitọ
Bayi wo kini Dockerfile ṣe dabi fun ṣiṣe eto ninu apoti kan nipa lilo Podman:
# cat Dockerfile
FROM fedora
RUN dnf -y install httpd; dnf clean all; systemctl enable httpd
EXPOSE 80
CMD [ "/sbin/init" ]
Gbogbo ẹ niyẹn.
Bayi a ṣajọpọ apoti naa:
# podman build -t systemd .
A sọ fun SELinux lati gba systemd laaye lati yipada iṣeto Awọn ẹgbẹ:
# setsebool -P container_manage_cgroup true
Nipa ọna, ọpọlọpọ eniyan gbagbe nipa igbesẹ yii. O da, eyi nikan nilo lati ṣee ṣe ni ẹẹkan ati pe o ti fipamọ eto naa lẹhin atunbere eto naa.
Bayi a kan bẹrẹ apoti naa:
# 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.
Iyẹn ni, iṣẹ naa ti wa ni oke ati nṣiṣẹ:
$ curl localhost
<html xml_lang="en" lang="en">
…
</html>
AKIYESI: Maṣe gbiyanju eyi lori Docker! Nibẹ ni o tun nilo lati jo pẹlu tambourine lati ṣe ifilọlẹ iru awọn apoti wọnyi nipasẹ daemon. (Awọn aaye afikun ati awọn idii yoo nilo lati jẹ ki gbogbo eyi ṣiṣẹ lainidi ni Docker, tabi yoo nilo lati ṣiṣẹ ni apo eiyan ti o ni anfani. Fun awọn alaye, wo
A tọkọtaya diẹ itura ohun nipa Podman ati systemd
Podman ṣiṣẹ dara julọ ju Docker ni awọn faili ẹyọ ti eto
Ti awọn apoti ba nilo lati bẹrẹ nigbati awọn bata eto, lẹhinna o le jiroro ni fi awọn aṣẹ Podman ti o yẹ sinu faili ẹyọkan ti eto, eyiti yoo bẹrẹ iṣẹ naa ki o ṣe atẹle rẹ. Podman nlo awoṣe orita-exec boṣewa. Ni awọn ọrọ miiran, awọn ilana eiyan jẹ awọn ọmọde ti ilana Podman, nitorinaa systemd le ṣe atẹle wọn ni rọọrun.
Docker nlo awoṣe olupin-olupin, ati awọn aṣẹ Docker CLI tun le gbe taara sinu faili ẹyọ kan. Bibẹẹkọ, ni kete ti alabara Docker ba sopọ si Docker daemon, o (alabara) di ilana mimu mimu stdin ati stdout miiran kan. Ni ọna, systemd ko ni imọran nipa asopọ laarin alabara Docker ati eiyan ti o nṣiṣẹ labẹ iṣakoso ti Docker daemon, ati nitorinaa, laarin awoṣe yii, eto ipilẹ ko le ṣe atẹle iṣẹ naa.
Ṣiṣẹ systemd nipasẹ iho
Podman kapa ibere ise nipasẹ iho ti tọ. Nitori Podman nlo awoṣe orita-exec, o le dari iho naa si awọn ilana eiyan ọmọ rẹ. Docker ko le ṣe eyi nitori pe o nlo awoṣe olupin-olupin.
Iṣẹ varlink ti Podman nlo lati ṣe ibasọrọ pẹlu awọn onibara latọna jijin si awọn apoti ti wa ni mu ṣiṣẹ gangan nipasẹ iho kan. Apoti-podman, ti a kọ sinu Node.js ati apakan ti iṣẹ akanṣe, gba eniyan laaye lati ṣe ajọṣepọ pẹlu awọn apoti Podman nipasẹ wiwo wẹẹbu kan. Daemon wẹẹbu nṣiṣẹ cockpit-podman nfi awọn ifiranṣẹ ranṣẹ si iho varlink kan ti ẹrọ ti n tẹtisi. Systemd lẹhinna mu eto Podman ṣiṣẹ lati gba awọn ifiranṣẹ wọle ati bẹrẹ iṣakoso awọn apoti. Ṣiṣẹ ẹrọ ṣiṣẹ lori iho yọkuro iwulo fun daemon ti nṣiṣẹ nigbagbogbo nigbati o ba n ṣe awọn API latọna jijin.
Ni afikun, a n ṣe idagbasoke alabara Podman miiran ti a pe ni podman-remote, eyiti o ṣe imuse Podman CLI kanna ṣugbọn pe varlink lati ṣiṣẹ awọn apoti. Latọna jijin Podman le ṣiṣẹ lori awọn akoko SSH, gbigba ọ laaye lati ṣe ibaraenisepo pẹlu awọn apoti lori awọn ẹrọ oriṣiriṣi. Ni akoko pupọ, a gbero lati jẹ ki podman-latọna jijin lati ṣe atilẹyin MacOS ati Windows lẹgbẹẹ Linux, ki awọn olupilẹṣẹ lori awọn iru ẹrọ yẹn le ṣiṣẹ ẹrọ foju Linux kan pẹlu Podman varlink nṣiṣẹ ati ni iriri kikun pe awọn apoti nṣiṣẹ lori ẹrọ agbegbe.
SD_NOTIFY
Systemd gba ọ laaye lati da idaduro ifilọlẹ awọn iṣẹ iranlọwọ titi di igba ti iṣẹ apoti ti wọn nilo yoo bẹrẹ. Podman le dari iho SD_NOTIFY si iṣẹ ti a fi sinu apoti ki iṣẹ naa le sọ sisitemu pe o ti ṣetan lati ṣiṣẹ. Ati lẹẹkansi, Docker, eyiti o nlo awoṣe olupin-olupin, ko le ṣe eyi.
Ninu awọn eto
A gbero lati ṣafikun aṣẹ podman ṣe ipilẹṣẹ CONTAINERID ti eto, eyiti yoo ṣe agbekalẹ faili ẹyọkan ti eto lati ṣakoso apoti kan pato pato. Eyi yẹ ki o ṣiṣẹ ni awọn gbongbo mejeeji ati awọn ipo root fun awọn apoti ti ko ni anfani. A ti rii paapaa ibeere kan fun akoko asiko ṣiṣe eto-nspawn ibaramu OCI kan.
ipari
Nṣiṣẹ systemd ni a eiyan jẹ ẹya understandable nilo. Ati ọpẹ si Podman, a nipari ni a eiyan asiko isise ti ko ni rogbodiyan pẹlu systemd, ṣugbọn mu ki o rọrun lati lo.
orisun: www.habr.com