Anyị na-agbaso isiokwu nke iji systemd na containers ruo ogologo oge. Laa azụ na 2014, injinia nchekwa anyị Daniel Walsh dere edemede
N'isiokwu a, anyị ga-egosi ihe gbanwere ka oge na-aga na otú Podman nwere ike isi nyere anyị aka n'okwu a.
Enwere ọtụtụ ihe kpatara ịgbanye sistemu n'ime akpa, dịka:
- Akpa ọtụtụ ọrụ – Ọtụtụ ndị mmadụ chọrọ ịdọpụ ha multi-ọrụ ngwa n'ime mebere igwe na-agbaba ha na arịa. Ọ ga-aka mma, n'ezie, imebi ngwa ndị dị otú ahụ na microservices, ma ọ bụghị onye ọ bụla maara otú e si eme nke a ma ma ọ bụ na-enweghị oge. Ya mere, ịme ụdị ngwa dị ka ọrụ nke sistemu sitere na faịlụ otu weputara na-eme ka uche zuru oke.
- Faịlụ Unit Sistemụ - A na-ewu ọtụtụ ngwa na-agba n'ime igbe site na koodu nke na-agbabu na igwe mebere ma ọ bụ nke anụ ahụ. Ngwa ndị a nwere faịlụ otu nke edere maka ngwa ndị a ma ghọta ka esi amalite ha. Yabụ na ọ ka mma ịmalite ọrụ site na iji ụzọ akwadoro, kama ịpụnara ọrụ init nke gị.
- Systemd bụ onye njikwa usoro. Ọ na-ejikwa ọrụ (na-emechi, malitegharịa ọrụ, ma ọ bụ na-egbu usoro zombie) karịa ngwá ọrụ ọ bụla ọzọ.
Nke ahụ kwuru, enwere ọtụtụ ihe kpatara ịghara ịgba ọsọ systemd na arịa. Nke kachasị bụ na systemd/journald na-achịkwa mmepụta nke arịa, yana ngwaọrụ ndị dị ka
Ọbịbịa nke Podman
Obi dị anyị ụtọ ịkọ na ọnọdụ ahụ emesịa gaa n'ihu. Ndị otu na-ahụ maka ịgba ọsọ akpa na Red Hat kpebiri ịmalite
Ọtụtụ ndị na-eme nke a.
Mụ na Podman m enweghị ụzọ ọ bụla megide arịa ndị dabere na sistemụ. A sị ka e kwuwe, Systemd bụ ihe ndị a na-ejikarị Linux init subsystem, na ịhapụ ya ka ọ rụọ ọrụ nke ọma n'ime akpa pụtara ileghara ka ọtụtụ puku mmadụ si agba arịa ngwa ngwa.
Podman maara ihe ọ ga-eme iji mee ka sistemu na-arụ ọrụ nke ọma n'ime akpa. Ọ chọrọ ihe dị ka ịgbanye tmpfs na /run na /tmp. Ọ na-amasị ya ka agbanyere gburugburu “containerized” ma na-atụ anya ide ikike n'akụkụ ya nke ndekọ aha otu yana na folda /var/log/journald.
Mgbe ịmalitere akpa nke iwu mbụ bụ init ma ọ bụ sistemu, Podman na-ahazi tmpfs na Cgroups na-akpaghị aka iji hụ na sistemụ na-amalite n'enweghị nsogbu. Iji gbochie ụdị mbido akpaaka a, jiri nhọrọ --systemd=false. Biko mara na Podman na-eji usoro sistemụ naanị mgbe ọ hụrụ na ọ ga-agba ọsọ sistemu ma ọ bụ iwu init.
Nke a bụ akụkụ nke akwụkwọ ntuziaka:
nwoke podman oso
...–systemd=ezigbo|ụgha
Na-agba ọsọ akpa na ọnọdụ sistemu. Agbanyere na ndabara.
Ọ bụrụ na ị na-agba sistemu ma ọ bụ iwu init n'ime akpa, Podman ga-ahazi isi ihe ugwu tmpfs na akwụkwọ ndekọ aha ndị a:
/run, /run/mkpọchi, /tmp, /sys/fs/cgroup/systemd, /var/lib/journal
Ọzọkwa mgbama nkwụsị nke ndabara ga-abụ SIGRTMIN+3.
Ihe a niile na-enye ohere ka sistemu na-agba ọsọ n'ime akpa mechiri emechi na-enweghị mgbanwe ọ bụla.
IHE: sistemu na-anwa idegara sistemu faịlụ otu. Agbanyeghị, SELinux na-egbochi arịa ime nke a na ndabara. Iji mee ka ide ihe, mee ka container_manage_cgroup bolean paramita:
setsebool -P container_manage_cgroup eziokwu
Ugbu a lee ka Dockerfile dị ka ọ na-agba ọsọ n'ime akpa site na iji Podman:
# cat Dockerfile
FROM fedora
RUN dnf -y install httpd; dnf clean all; systemctl enable httpd
EXPOSE 80
CMD [ "/sbin/init" ]
Ọ gwụla.
Ugbu a, anyị na-achịkọta akpa ahụ:
# podman build -t systemd .
Anyị na-agwa SELinux ka o kwe ka systemd gbanwee nhazi otu ìgwè:
# setsebool -P container_manage_cgroup true
Site n'ụzọ, ọtụtụ ndị na-echefu nzọụkwụ a. Ọ dabara nke ọma, naanị nke a kwesịrị ime otu ugboro ma chekwaa ntọala ahụ mgbe ịmaliteghachi sistemụ ahụ.
Ugbu a, anyị na-amalite akpa ahụ:
# 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.
Nke ahụ bụ ya, ọrụ a na-arụ ọrụ:
$ curl localhost
<html xml_lang="en" lang="en">
…
</html>
IHE: Anwala nke a na Docker! N'ebe ahụ, ị ka kwesịrị iji ịgbà agba egwu iji malite ụdị arịa ndị a site na daemon. (A ga-achọrọ ubi na ngwugwu ndị ọzọ iji mee ka ihe a niile na-arụ ọrụ n'enweghị nsogbu na Docker, ma ọ bụ ọ ga-adị mkpa ka etinye ya n'ime akpa nwere ihe ùgwù. Maka nkọwa, lee
Ihe di na nwunye mara mma gbasara Podman na sistemu
Podman na-arụ ọrụ nke ọma karịa Docker na faịlụ otu sistemụ
Ọ bụrụ na arịa kwesịrị ịmalite mgbe akpụkpọ ụkwụ sistemụ, ị nwere ike itinye iwu Podman kwesịrị ekwesị n'ime faịlụ sistemu sistemu, nke ga-amalite ọrụ wee nyochaa ya. Podman na-eji ụdị ndụdụ-exec ọkọlọtọ. N'ikwu ya n'ụzọ ọzọ, usoro akpa bụ ụmụaka nke usoro Podman, yabụ systemd nwere ike nyochaa ha ngwa ngwa.
Docker na-eji ụdị ihe nkesa ndị ahịa, yana iwu Docker CLI nwekwara ike idowe ya ozugbo na faịlụ otu. Agbanyeghị, ozugbo onye ahịa Docker jikọọ na Docker daemon, ọ (onye ahịa) na-aghọ naanị usoro ọzọ na-ejikwa stdin na stdout. N'aka nke ya, systemd enweghị echiche banyere njikọ dị n'etiti onye ahịa Docker na akpa nke na-arụ n'okpuru njikwa Docker daemon, ya mere, n'ime ihe nlereanya a, systemd enweghị ike nyochaa ọrụ ahụ.
Sistemu na-arụ ọrụ site na oghere
Podman na-ejikwa ịgbalite site na oghere nke ọma. N'ihi na Podman na-eji ụdị ndụdụ-exec, ọ nwere ike ibuga oghere na usoro akpa nwa ya. Docker enweghị ike ime nke a n'ihi na ọ na-eji ụdị ihe nkesa ahịa.
Ọrụ varlink nke Podman na-eji na-ekwurịta okwu na ndị ahịa dịpụrụ adịpụ na arịa na-arụ ọrụ n'ezie site na oghere. Ngwungwu kokpiiti-podman, nke edere na Node.js na akụkụ nke ọrụ ụgbọ mmiri, na-enye ndị mmadụ ohere ịmekọrịta ihe na Podman site na ntanetị weebụ. The web daemon na-agba ọsọ kokpiiti-podman na-eziga ozi na varlink soket nke sistemu na-ege ntị. Systemd wee rụọ ọrụ Podman mmemme ịnata ozi wee malite ijikwa arịa. Ịgbalite sistemụ arụ ọrụ n'elu oghere na-ewepụ mkpa maka daemon na-agba ọsọ mgbe niile mgbe ị na-emejuputa API ndị dịpụrụ adịpụ.
Na mgbakwunye, anyị na-etolite onye ahịa Podman ọzọ a na-akpọ podman-remote, nke na-arụ otu Podman CLI mana na-akpọ varlink ka ọ na-agba arịa. Podman-remote nwere ike na-agba ọsọ n'elu SSH sessions, na-enye gị ohere iji nchekwa na-akpakọrịta na arịa na dị iche iche igwe. Ka oge na-aga, anyị na-eme atụmatụ ime ka podman-remote na-akwado MacOS na Windows n'akụkụ Linux, ka ndị mmepe na nyiwe ndị ahụ nwere ike na-agba ọsọ Linux mebere igwe na Podman varlink na-agba ọsọ ma nwee ahụmahụ zuru oke na arịa na-agba ọsọ na igwe mpaghara.
SD_NOTIFY
Systemd na-enye gị ohere ịkwụsị mmalite nke ọrụ inyeaka ruo mgbe ọrụ akpanyere ha chọrọ ga-amalite. Podman nwere ike ibuga oghere SD_NOTIFY na ọrụ akpanyere ka ọrụ ahụ gosi sistemu na ọ dịla njikere ịrụ ọrụ. Ọzọkwa, Docker, nke na-eji ụdị ihe nkesa ahịa, enweghị ike ime nke a.
Na atụmatụ
Anyị na-eme atụmatụ ịgbakwunye iwu podman na-emepụta sistemu CONTAINERID, nke ga-ewepụta faịlụ otu sistemụ iji jikwaa otu akpa akọwapụtara. Nke a kwesịrị ịrụ ọrụ na ụdị mgbọrọgwụ na enweghị mgbọrọgwụ maka arịa ndị na-enweghị ihe ọ bụla. Anyị ahụla arịrịọ maka oge ojiri ọsọ sistemu-nspawn dakọtara OCI.
nkwubi
Ịgba ọsọ n'ime akpa bụ mkpa kwere nghọta. Ekele dịrị Podman, anyị mechara nwee oge ịgba ọsọ nke na-emegideghị sistemu, mana ọ na-eme ka ọ dị mfe iji.
isi: www.habr.com