ИзпълнСниС Π½Π° systemd Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

Π‘Π»Π΅Π΄ΠΈΠΌ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° systemd Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΎΡ‚ дълго Π²Ρ€Π΅ΠΌΠ΅. ΠŸΡ€Π΅Π· 2014 Π³. Π½Π°ΡˆΠΈΡΡ‚ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ ΠΏΠΎ сигурността Π”Π°Π½ΠΈΠ΅Π» Уолш написа статия ИзпълнСниС Π½Π° systemd Π² Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π° няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΠΎ-късно - Π΄Ρ€ΡƒΠ³, ΠΊΠΎΠΉΡ‚ΠΎ сС Π½Π°Ρ€ΠΈΡ‡Π°ΡˆΠ΅ Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° systemd Π² Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π² ΠΊΠΎΠΉΡ‚ΠΎ заяви, Ρ‡Π΅ ситуацията Π½Π΅ сС Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΠ»Π° ΠΌΠ½ΠΎΠ³ΠΎ. По-спСциално Ρ‚ΠΎΠΉ пишС, Ρ‡Π΅ β€žΠ·Π° съТалСниС, Π΄ΠΎΡ€ΠΈ Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΠΎ-късно, Π°ΠΊΠΎ Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π² Google β€žDocker systemβ€œ, ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ сС появява, Π΅ ΡΡŠΡ‰Π°Ρ‚Π° стара статия. Π’Π°ΠΊΠ° Ρ‡Π΅ Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ Π½Π΅Ρ‰ΠΎ." ОсвСн Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ Π·Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Docker ΠΈ systemd.

ИзпълнСниС Π½Π° systemd Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΈ ΠΊΠ°ΠΊ Podman ΠΌΠΎΠΆΠ΅ Π΄Π° Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π²ΡŠΠΏΡ€ΠΎΡ.

Има ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π΄Π° стартиратС systemd Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  1. ΠœΡƒΠ»Ρ‚ΠΈΡΠ΅Ρ€Π²ΠΈΠ·Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ – ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€Π° искат Π΄Π° изтСглят своитС мултисСрвизни прилоТСния ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Π‘ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π΄Π° Ρ€Π°Π·Π±ΠΈΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° прилоТСния Π² микроуслуги, Π½ΠΎ Π½Π΅ всСки Π·Π½Π°Π΅ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π° всС ΠΎΡ‰Π΅ ΠΈΠ»ΠΈ просто няма Π²Ρ€Π΅ΠΌΠ΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ стартиранСто Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° прилоТСния ΠΊΠ°Ρ‚ΠΎ услуги, стартирани ΠΎΡ‚ systemd ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π΅ напълно Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ.
  2. Systemd ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ – ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ прилоТСния, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, са ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π΅ изпълняван Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ ΠΈΠ»ΠΈ физичСски машини. Π’Π΅Π·ΠΈ прилоТСния ΠΈΠΌΠ°Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ Π΅ написан Π·Π° Ρ‚Π΅Π·ΠΈ прилоТСния ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π° ΠΊΠ°ΠΊ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ стартирани. Π’Π°ΠΊΠ° Ρ‡Π΅ всС ΠΎΡ‰Π΅ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° стартиратС услуги, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, вмСсто Π΄Π° Ρ…Π°ΠΊΠ½Π΅Ρ‚Π΅ собствСната си услуга Π·Π° стартиранС.
  3. Systemd Π΅ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Π½Π° процСси. Π’ΠΎΠΉ управлява услуги (ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°, рСстартира услуги ΠΈΠ»ΠΈ ΡƒΠ±ΠΈΠ²Π° Π·ΠΎΠΌΠ±ΠΈ процСси) ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΎΡ‚ всСки Π΄Ρ€ΡƒΠ³ инструмСнт.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π΄Π° Π½Π΅ стартиратС systemd Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ Π΅, Ρ‡Π΅ systemd/journald ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈ инструмСнти ΠΊΠ°Ρ‚ΠΎ Kubernetes ΠΈΠ»ΠΈ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° смяна ΠΎΡ‡Π°ΠΊΠ²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π° записват рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² stdout ΠΈ stderr. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Π°ΠΊΠΎ Ρ‰Π΅ управляватС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Ρ‡Ρ€Π΅Π· инструмСнти Π·Π° оркСстрация ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ, спомСнати ΠΏΠΎ-Π³ΠΎΡ€Π΅, трябва сСриозно Π΄Π° обмислитС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° systemd ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. ОсвСн Ρ‚ΠΎΠ²Π°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Docker ΠΈ Moby чСсто са силно ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° systemd Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.

Π˜Π΄Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Подман

Щастливи смС Π΄Π° ΡΡŠΠΎΠ±Ρ‰ΠΈΠΌ, Ρ‡Π΅ ситуацията Π½Π°ΠΉ-накрая сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»Π°. Π•ΠΊΠΈΠΏΡŠΡ‚, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π² Red Hat, Ρ€Π΅ΡˆΠΈ Π΄Π° сС Ρ€Π°Π·Π²ΠΈΠ²Π° вашия собствСн ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅Π½ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π». Има ΠΈΠΌΠ΅ Подман ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΡΡŠΡ‰ΠΈΡ интСрфСйс Π½Π° командния Ρ€Π΅Π΄ (CLI) ΠΊΠ°Ρ‚ΠΎ Docker. И ΠΏΠΎΡ‡Ρ‚ΠΈ всички Docker ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π² Podman ΠΏΠΎ ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½. ЧСсто ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ сСминари, ΠΊΠΎΠΈΡ‚ΠΎ сСга сС Π½Π°Ρ€ΠΈΡ‡Π°Ρ‚ ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° Docker Π½Π° Podman, Π° ΠΏΡŠΡ€Π²ΠΈΡΡ‚ слайд ΠΏΡ€ΠΈΠ·ΠΎΠ²Π°Π²Π° Π·Π° писанС: alias docker=podman.

Много Ρ…ΠΎΡ€Π° правят Ρ‚ΠΎΠ²Π°.

ΠœΠΎΡΡ‚ Podman ΠΈ Π°Π· ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½ Π½Π΅ смС ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° systemd ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Π’ края Π½Π° ΠΊΡ€Π°ΠΈΡ‰Π°Ρ‚Π° Systemd Π΅ Π½Π°ΠΉ-чСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°Ρ‚Π° подсистСма Π·Π° стартиранС Π½Π° Linux ΠΈ Π΄Π° Π½Π΅ ΠΉ позволяватС Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π΄Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠ°ΠΊ хиляди Ρ…ΠΎΡ€Π° са свикнали Π΄Π° работят с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.

Podman Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ, Π·Π° Π΄Π° Π½Π°ΠΊΠ°Ρ€Π° systemd Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Има Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π½Π΅Ρ‰Π° ΠΊΠ°Ρ‚ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° tmpfs Π½Π° /run ΠΈ /tmp. Вя ΠΎΠ±ΠΈΡ‡Π° Π΄Π° ΠΈΠΌΠ° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° "ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€Π°Π½Π°" срСда ΠΈ ΠΎΡ‡Π°ΠΊΠ²Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° запис Π² Π½Π΅ΠΉΠ½Π°Ρ‚Π° част ΠΎΡ‚ дирСкторията Π½Π° cgroup ΠΈ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° /var/log/journald.

ΠšΠΎΠ³Π°Ρ‚ΠΎ стартиратС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅ init ΠΈΠ»ΠΈ systemd, Podman Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° tmpfs ΠΈ Cgroups, Π·Π° Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ systemd стартира Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Π—Π° Π΄Π° Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ стартиранС, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ опцията --systemd=false. Моля, ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Podman ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ€Π΅ΠΆΠΈΠΌ systemd само ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²ΠΈΠ΄ΠΈ, Ρ‡Π΅ трябва Π΄Π° изпълни ΠΊΠΎΠΌΠ°Π½Π΄Π° systemd ΠΈΠ»ΠΈ init.

Π•Ρ‚ΠΎ ΠΈΠ·Π²Π°Π΄ΠΊΠ° ΠΎΡ‚ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΡ‚ΠΎ:

man podman run
...

–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 -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! Π’Π°ΠΌ всС ΠΎΡ‰Π΅ трябва Π΄Π° Ρ‚Π°Π½Ρ†ΡƒΠ²Π°Ρ‚Π΅ с Π΄Π°ΠΉΡ€Π΅, Π·Π° Π΄Π° стартиратС Ρ‚Π΅Π·ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΏΡ€Π΅Π· Π΄Π΅ΠΌΠΎΠ½Π°. (Π©Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ всичко Ρ‚ΠΎΠ²Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ Π² Docker, ΠΈΠ»ΠΈ Ρ‰Π΅ трябва Π΄Π° сС изпълнява Π² ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π—Π° подробности Π²ΠΆ. Бтатия.)

ΠžΡ‰Π΅ няколко страхотни Π½Π΅Ρ‰Π° Π·Π° Podman ΠΈ systemd

Podman Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΎΡ‚ Docker във Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° систСмния ΠΌΠΎΠ΄ΡƒΠ»

Ако ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ стартирани, ΠΊΠΎΠ³Π°Ρ‚ΠΎ систСмата сС Π·Π°Ρ€Π΅ΠΆΠ΄Π°, Ρ‚ΠΎΠ³Π°Π²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄Π° Π²ΠΌΡŠΠΊΠ½Π΅Ρ‚Π΅ подходящитС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π½Π° Podman във Ρ„Π°ΠΉΠ»Π° Π½Π° систСмния ΠΌΠΎΠ΄ΡƒΠ», ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ стартира услугата ΠΈ Ρ‰Π΅ я наблюдава. Podman ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° стандартния ΠΌΠΎΠ΄Π΅Π» fork-exec. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΈΡ‚Π΅ процСси са Π΄Π΅Ρ†Π° Π½Π° процСса Podman, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ systemd ΠΌΠΎΠΆΠ΅ лСсно Π΄Π° Π³ΠΈ наблюдава.

Docker ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠ΄Π΅Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚-ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Docker CLI ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ ΡΡŠΡ‰ΠΎ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ поставСни Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ». Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, слСд ΠΊΠ°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π½Π° Docker сС ΡΠ²ΡŠΡ€ΠΆΠ΅ с Π΄Π΅ΠΌΠΎΠ½Π° Π½Π° Docker, Ρ‚ΠΎΠΉ (ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚) става просто Π΄Ρ€ΡƒΠ³ процСс, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‰ stdin ΠΈ stdout. На свой Ρ€Π΅Π΄ systemd няма прСдстава Π·Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° Docker ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° Π΄Π΅ΠΌΠΎΠ½Π° Π½Π° Docker, ΠΈ слСдоватСлно Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» systemd ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° наблюдава услугата.

АктивиранС Π½Π° systemd Ρ‡Ρ€Π΅Π· сокСт

Podman ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Ρ‡Ρ€Π΅Π· сокСт. Въй ΠΊΠ°Ρ‚ΠΎ Podman ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠ΄Π΅Π»Π° fork-exec, Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΈ сокСта към своитС Π΄ΡŠΡ‰Π΅Ρ€Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΈ процСси. Docker Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠ΄Π΅Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚-ΡΡŠΡ€Π²ΡŠΡ€.

Услугата varlink, която Podman ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° комуникация с ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ към ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Ρ‡Ρ€Π΅Π· сокСт. ΠŸΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ cockpit-podman, написан Π½Π° Node.js ΠΈ част ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° cockpit, позволява Π½Π° Ρ…ΠΎΡ€Π°Ρ‚Π° Π΄Π° взаимодСйстват с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Podman Ρ‡Ρ€Π΅Π· ΡƒΠ΅Π± интСрфСйс. Π£Π΅Π± Π΄Π΅ΠΌΠΎΠ½ΡŠΡ‚, ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‰ cockpit-podman, ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π΄ΠΎ сокСт varlink, ΠΊΠΎΠΉΡ‚ΠΎ systemd ΡΠ»ΡƒΡˆΠ°. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Systemd Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Podman, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° управлява ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. АктивиранСто Π½Π° systemd ΠΏΡ€Π΅Π· сокСт Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° нСобходимостта ΠΎΡ‚ постоянно Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Π΄Π΅ΠΌΠΎΠ½ ΠΏΡ€ΠΈ внСдряванС Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ API.

ОсвСн Ρ‚ΠΎΠ²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π° Podman, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ podman-remote, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈΠ»Π°Π³Π° ΡΡŠΡ‰ΠΈΡ CLI Π½Π° Podman, Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° varlink Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Podman-remote ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΡŠΡ€Ρ…Ρƒ SSH сСсии, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява сигурно Π΄Π° взаимодСйстватС с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ машини. Π‘ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌΠ΅ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ podman-remote Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° MacOS ΠΈ Windows Π·Π°Π΅Π΄Π½ΠΎ с Linux, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Ρ‚Π΅Π·ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° стартират Linux Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина с Podman varlink ΠΈ Π΄Π° ΠΈΠΌΠ°Ρ‚ пълно изТивяванС, Ρ‡Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ работят Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° машина.

SD_NOTIFY

Systemd Π²ΠΈ позволява Π΄Π° ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚Π΅ стартиранСто Π½Π° спомагатСлни услуги, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Π°Ρ‚Π° услуга, която Ρ‚Π΅ изискват. Podman ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΈ сокСта SD_NOTIFY към ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Π°Ρ‚Π° услуга, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ услугата Π΄Π° ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈ systemd, Ρ‡Π΅ Π΅ Π³ΠΎΡ‚ΠΎΠ²Π° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°. И ΠΎΡ‚Π½ΠΎΠ²ΠΎ, Docker, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠ΄Π΅Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚-ΡΡŠΡ€Π²ΡŠΡ€, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π°.

Π’ ΠΏΠ»Π°Π½ΠΎΠ²Π΅Ρ‚Π΅

ΠŸΠ»Π°Π½ΠΈΡ€Π°ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° podman generate systemd CONTAINERID, която Ρ‰Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° систСмСн Ρ„Π°ΠΉΠ» с Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’ΠΎΠ²Π° трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ Π² root, Ρ‚Π°ΠΊΠ° ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌ Π±Π΅Π· root Π·Π° Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Π”ΠΎΡ€ΠΈ видяхмС заявка Π·Π° OCI-ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠ° срСда Π·Π° изпълнСниС Π½Π° systemd-nspawn.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° systemd Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠ° Π½ΡƒΠΆΠ΄Π°. И Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Podman Π½Π°ΠΉ-накрая ΠΈΠΌΠ°ΠΌΠ΅ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ Π΅ Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ със systemd, Π½ΠΎ Π³ΠΎ ΠΏΡ€Π°Π²ΠΈ лСсСн Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€