በኮንቴይነር ውስጥ ስርዓትን ያሂዱ

በኮንቴይነሮች ውስጥ ሲስተምድ የመጠቀምን ርዕስ ለረጅም ጊዜ ስንከተል ቆይተናል። በ 2014 የእኛ የደህንነት መሐንዲስ ዳንኤል ዋልሽ አንድ ጽሑፍ ጽፏል በ Docker ኮንቴይነር ውስጥ በስርአት የሚሰራ, እና ከጥቂት አመታት በኋላ - ሌላ, ተጠርቷል ልዩ ባልሆነ መያዣ ውስጥ በስርዓት መሮጥሁኔታው ብዙም እንዳልተሻሻለ ገልጿል። በተለይም “እንደ አለመታደል ሆኖ እና ከሁለት አመት በኋላ “Docker system” ን ጎግል ብታደርግ ያው የድሮው የእሱ መጣጥፍ መጀመሪያ ብቅ ይላል። ስለዚህ የለውጥ ጊዜው አሁን ነው። በተጨማሪም, አስቀድመን ተናግረናል በ Docker እና በስርዓት ገንቢዎች መካከል ግጭት.

በኮንቴይነር ውስጥ ስርዓትን ያሂዱ

በዚህ ጽሑፍ ውስጥ ከዚያን ጊዜ ጀምሮ ምን እንደተለወጠ እና ፖድማን በዚህ ጉዳይ ላይ እንዴት ሊረዳን እንደሚችል እናሳያለን.

በመያዣው ውስጥ ስርዓትን ለማስኬድ ብዙ ምክንያቶች አሉ ፣ ለምሳሌ-

  1. ባለብዙ አገልግሎት መያዣዎች - ብዙ ሰዎች የባለብዙ አገልግሎት አፕሊኬሽኖቻቸውን ከቨርቹዋል ማሽኖች አውጥተው በኮንቴይነሮች ውስጥ ማስኬድ ይፈልጋሉ። በእርግጥ እንደዚህ ያሉ መተግበሪያዎችን ወደ ማይክሮ ሰርቪስ መስበር የተሻለ ይሆናል ፣ ግን ይህንን እንዴት ማድረግ እንዳለበት ሁሉም ሰው አይያውቅም ወይም በቀላሉ ምንም ጊዜ የለም። ስለዚህ እነዚህን አፕሊኬሽኖች ከክፍል ፋይሎች በስርዓት የሚመሩ አገልግሎቶችን ማካሄድ ፍፁም ትርጉም አለው።
  2. የስርዓት ክፍል ፋይሎች - አብዛኛዎቹ በኮንቴይነሮች ውስጥ የሚሰሩ አፕሊኬሽኖች የተገነቡት ቀደም ሲል በምናባዊ ወይም በአካላዊ ማሽኖች ላይ ይሰራ ከነበረው ኮድ ነው። እነዚህ አፕሊኬሽኖች ለእነዚህ መተግበሪያዎች የተፃፈ እና እንዴት መተግበር እንዳለባቸው የሚረዳ አንድ ነጠላ ፋይል አላቸው። ስለዚህ የራስዎን የመግቢያ አገልግሎት ከመጥለፍ ይልቅ የሚደገፉ ዘዴዎችን በመጠቀም አገልግሎቶችን መጀመር አሁንም የተሻለ ነው።
  3. ሲስተምድ የሂደት አስተዳዳሪ ነው። ከማንኛውም መሳሪያ በተሻለ አገልግሎቶችን ያስተዳድራል (ይዘጋዋል፣ አገልግሎቶችን እንደገና ያስጀምራል ወይም ዞምቢዎችን ይገድላል)።

ይህ በተባለው ጊዜ ፣ ​​​​በኮንቴይነሮች ውስጥ ስርዓትን ላለማድረግ ብዙ ምክንያቶች አሉ። ዋናው ሲስተምድ/ጆርናልድ የእቃ መያዢያዎችን ውፅዓት እና የመሳሰሉትን መሳሪያዎች ይቆጣጠራል ኩባንያቶች ወይም ክፍት ፈረቃ ኮንቴይነሮች ምዝግብ ማስታወሻዎችን በቀጥታ ወደ stdout እና stderr ለመጻፍ ይጠብቃሉ. ስለዚህ ኮንቴይነሮችን በኦርኬስትራ መሳሪያዎች ለማስተዳደር ከፈለጉ ልክ እንደ ከላይ ያሉትን በስርዓት የተመሰረቱ መያዣዎችን መጠቀም ያስፈልግዎታል። በተጨማሪም፣ የዶከር እና ሞቢ ገንቢዎች በኮንቴይነሮች ውስጥ ሲስተምድ መጠቀምን ብዙ ጊዜ አጥብቀው ይቃወማሉ።

ፖድማን እየመጣ ነው።

ሁኔታው በመጨረሻ ወደፊት መሄዱን ስንገልጽ ደስ ብሎናል። በቀይ ኮፍያ ላይ ኮንቴይነሮችን የማስኬድ ኃላፊነት ያለው ቡድን ለማዳበር ወሰነ የራስዎ መያዣ ሞተር. ስም አግኝቷል ፖድማን እና ልክ እንደ Docker ተመሳሳይ የትእዛዝ መስመር በይነገጽ (CLI) ያቀርባል። እና ሁሉም ማለት ይቻላል የዶከር ትዕዛዞች በፖድማን በተመሳሳይ መንገድ ጥቅም ላይ ሊውሉ ይችላሉ። ብዙ ጊዜ ሴሚናሮችን እንይዛለን, አሁን የሚባሉት ዶከርን ወደ ፖድማን ቀይር, እና በጣም የመጀመሪያው ስላይድ ለመጻፍ ይፈልጋል: alias docker=podman.

ብዙ ሰዎች ይህን ያደርጋሉ።

የእኔ ፖድማን እና እኔ በስርዓት የተመሰረቱ መያዣዎችን በምንም መንገድ አንቃወምም። ከሁሉም በላይ ሲስተምድ የሊኑክስ ኢንኢት ንኡስ ሲስተም ብዙ ጊዜ ጥቅም ላይ ይውላል እና በኮንቴይነሮች ውስጥ በትክክል እንዳይሰራ መከልከል በሺዎች የሚቆጠሩ ሰዎች ኮንቴይነሮችን ለማስኬድ የሚጠቀሙበትን መንገድ ችላ ማለት ነው።

ፖድማን ሲስተምድ በእቃ መያዣ ውስጥ በትክክል እንዲሰራ ለማድረግ ምን መደረግ እንዳለበት ያውቃል። እንደ tmpfs በ / run እና /tmp ላይ መጫን ያሉ ነገሮችን ትፈልጋለች። እሷ "በኮንቴይነር" አካባቢ እንዲሰራ ትወዳለች እና ለቡድን ማውጫው ክፍል እና ለ/var/log/ጆርናልድ ማህደር የመፃፍ ፍቃዶችን ትጠብቃለች።

እንደ መጀመሪያው ትእዛዝ init ወይም systemd ያለው ኮንቴይነር ሲጀመር፣ Podman በራስ ሰር tmpfs እና Cgroups ያዋቅራል ስለዚህ ሲስተምድ በተቀላጠፈ እንዲጀምር። ይህንን የራስ ማስጀመሪያ ሁነታ ለማሰናከል --systemd=false አማራጭን ይጠቀሙ። ፖድማን ሲስተምድ ሁነታን የሚጠቀመው ሲስተይድ ወይም ኢንቲት ትዕዛዝ ማስኬድ እንደሚያስፈልገው ሲያይ መሆኑን ልብ ይበሉ።

ከመመሪያው የተወሰደ የሚከተለው ነው።

ሰው ፖድማን ሩጫ
...

–systemd=እውነት|ውሸት

መያዣውን በስርዓት ሁነታ ማሄድ. በነባሪነት የነቃ።

የስርዓትድ ወይም የመግቢያ ትእዛዝ በእቃ መያዣ ውስጥ እየሄደ ከሆነ፣ፖድማን tmpfs mount points በሚከተሉት ማውጫዎች ውስጥ ያዘጋጃል።

/አሂድ፣/አሂድ/ቆልፍ፣/tmp፣ /sys/fs/cgroup/systemd፣ /var/lib/ጆርናል

እንዲሁም SIGRTMIN+3 እንደ ነባሪ የማቆሚያ ምልክት ጥቅም ላይ ይውላል።

ይህ ሁሉ ሲስተምድ ያለ ምንም ማሻሻያ በተዘጋ መያዣ ውስጥ እንዲሠራ ያስችለዋል።

ማስታወሻ: systemd ወደ ግሩፕ ፋይል ስርዓት ለመጻፍ ይሞክራል። ነገር ግን, SELinux መያዣዎችን በነባሪነት እንዳይሰሩ ይከላከላል. መፃፍን ለመፍቀድ የመያዣ_ማኔጅ_ግሩፕ ቡሊያን መለኪያን አንቃ፡-

setsebool -P container_manage_cgroup እውነት

አሁን Podmanን በመጠቀም ሲስተምድ በኮንቴይነር ውስጥ ለማስኬድ 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 የCgroups ውቅር እንዲለውጥ ለ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 ላይ አይሞክሩ! እንደዚህ አይነት መያዣዎችን በአጋንንት ለማራመድ አሁንም በከበሮ መደነስ ያስፈልጋል። (ይህን በዶከር ውስጥ ያለምንም እንከን እንዲሰራ ለማድረግ ተጨማሪ መስኮች እና ፓኬጆች ያስፈልጋሉ ወይም ልዩ በሆነ መያዣ ውስጥ መሮጥ አለበት ። ዝርዝሮችን ይመልከቱ ጽሑፍ.)

ስለ Podman እና systemd ጥቂት ተጨማሪ አሪፍ ነገሮች

ፖድማን በስርዓት ዩኒት ፋይሎች ውስጥ ከዶከር የተሻለ ይሰራል

ኮንቴይነሮች በሲስተም ማስነሻ ላይ መጀመር ከፈለጉ በቀላሉ ተገቢውን የፖድማን ትዕዛዞችን በስርዓት ክፍል ፋይል ውስጥ ማስገባት ይችላሉ ፣ ይህም አገልግሎቱን ይጀምራል እና ይከታተለዋል። ፖድማን መደበኛውን ፎርክ-ኤክሴክ ሞዴል ይጠቀማል. በሌላ አገላለጽ የእቃ መጫኛ ሂደቶች የፖድማን ሂደት ልጆች ናቸው, ስለዚህ systemd በቀላሉ ሊቆጣጠራቸው ይችላል.

Docker የደንበኛ አገልጋይ ሞዴልን ይጠቀማል፣ እና Docker CLI ትዕዛዞች በቀጥታ በአንድ ፋይል ውስጥ ሊቀመጡ ይችላሉ። ነገር ግን፣ የዶከር ደንበኛ ከዶከር ዴሞን ጋር ከተገናኘ በኋላ፣ እሱ (ደንበኛው) stdin እና stdout ሌላ የሂደት አያያዝ ይሆናል። በምላሹ ሲስተምድ በዶከር ደንበኛ እና ዶከር ዴሞንን በሚያንቀሳቅሰው ኮንቴይነር መካከል ስላለው ግንኙነት ምንም ሀሳብ የለውም ፣ ስለሆነም በዚህ ሞዴል ውስጥ ሲስተምድ በመርህ ደረጃ አገልግሎቱን መከታተል አይችልም።

በሶኬት በኩል ስርዓትን በማንቃት ላይ

ፖድማን የሶኬት ማንቃትን በትክክል ይቆጣጠራል። ፖድማን የፎርክ-ኤክሴክ ሞዴልን ስለሚጠቀም, ሶኬቱን ወደ ልጅ መያዣ ሂደቶች ማስተላለፍ ይችላል. ዶከር ደንበኛ-አገልጋይ ሞዴል ስለሚጠቀም ያንን ማድረግ አይችልም።

የርቀት ደንበኞች ከኮንቴይነር ጋር እንዲገናኙ ለማድረግ ፖድማን የሚጠቀመው የቫርሊንክ አገልግሎት በእውነቱ በሶኬት ላይ ተጠርቷል። በ Node.js የተፃፈው ኮክፒት-ፖድማን ጥቅል እና የኮክፒት ፕሮጄክት አካል ሰዎች ከፖድማን ኮንቴይነሮች ጋር በድር በይነገጽ እንዲገናኙ ያስችላቸዋል። የዌብ ዴሞን ሩጫ ኮክፒት-ፖድማን ሲስተምድ እያዳመጠው ወዳለው የቫርሊንክ ሶኬት መልእክት ይልካል። ሲስተምድ መልዕክቶችን ለመቀበል እና ኮንቴይነሮችን ለማስተዳደር የፖድማን ፕሮግራምን ያነቃል። የርቀት ኤፒአይዎችን በሚተገበርበት ጊዜ ሲስተምን በሶኬት ላይ ማንቃት ያለማቋረጥ የሚያሄድ ዴሞንን አስፈላጊነት ያስወግዳል።

እኛ ደግሞ ሌላ ፖድማን-ርቀት የተባለ የፖድማን ደንበኛ እያዘጋጀን ነው እሱም ተመሳሳይ Podman CLI ን የሚተገበር ግን ኮንቴይነሮችን ለመጀመር ቫርሊንክን ይጠራል። Podman-remote በኤስኤስኤች ክፍለ ጊዜዎች ላይ ሊሄድ ይችላል፣ ይህም ከተለያዩ ማሽኖች ጋር ደህንነቱ በተጠበቀ ሁኔታ መስተጋብር እንዲፈጥሩ ያስችልዎታል። በጊዜ ሂደት፣ በእነዚያ መድረኮች ላይ ያሉ ገንቢዎች ፖድማን ቫርሊንክን የሚያስኬድ የሊኑክስ ቨርቹዋል ማሽን እንዲሰሩ እና ኮንቴይነሮች በአካባቢያዊ ማሽን ላይ እንደሚሰሩ ሙሉ ስሜት እንዲሰማቸው ከሊኑክስ ጋር በመሆን ፖድማን-ርቀትን ለመጠቀም ማክኦኤስን እና ዊንዶውስን ለመጠቀም አቅደናል።

ኤስዲ_ማስታወቂያ

ሲስተምድ የሚያስፈልጋቸው በኮንቴይነር የተያዘ አገልግሎት እስኪጀምር ድረስ የረዳት አገልግሎቶችን መጀመሪያ እንዲያዘገዩ ይፈቅድልዎታል። ፖድማን የኤስዲ_NOTIFY ሶኬትን ወደ ኮንቴነር ወደያዘው አገልግሎት ማስተላለፍ ይችላል አገልግሎቱ ለስርአት ለመሄድ መዘጋጀቱን ያሳውቃል። እና በድጋሚ, የደንበኛ-አገልጋይ ሞዴልን የሚጠቀመው Docker, እንዴት እንደሆነ አያውቅም.

በእቅዶቹ ውስጥ

አንድን መያዣ ለማስተዳደር በስርዓት የተሰራ ዩኒት ፋይል የሚያመነጭ በስርዓት የተሰራ CONTAINERID ትዕዛዝን የሚያመነጭ ፖድማን ለመጨመር አቅደናል። ይህ በሁለቱም ስር እና ስር-አልባ ሁነታዎች ውስጥ ላልተፈቀዱ መያዣዎች መስራት አለበት. የOCI ታዛዥ systemd-nspawn የሩጫ ጊዜ ጥያቄን አይተናል።

መደምደሚያ

በኮንቴይነር ውስጥ ስርዓትን ማስኬድ ለመረዳት የሚቻል ፍላጎት ነው። እና ለፖድማን ምስጋና ይግባውና በመጨረሻም ሲስተምድ የማይቃወም፣ ግን ለመጠቀም ቀላል የሚያደርግ የኮንቴይነር አሂድ ጊዜ አለን።

ምንጭ: hab.com

አስተያየት ያክሉ