GNU/Linux >> Znalost Linux >  >> Rocky Linux

Spusťte kontejner Almalinux nebo Rocky Linux 8 Docker pomocí Systemd (systemctl)

Jak víme, ve výchozím nastavení kontejner Docker běží bez systemd znamená, že uživatel nemůže používat systemctl příkaz. Je to proto, že jakýkoli kontejner, který vytvoříme na Dockeru, nebyl zaveden pomocí init. Zde se naučíme, jak spustit Systemd v kontejnerech Alamlinux/Rocky Linux/CentOS 8 Docker.

No, otázka je, proč se nám zobrazuje chyba kdykoli spustíme systemctl příkaz v jakémkoli kontejneru dockeru? Jaký je za tím důvod?

Ve skutečnosti, podle vývojářů Docker, které také doporučují, by člověk měl používat jednu službu uvnitř kontejneru. To znamená, že pokud plánujete nainstalovat WordPress pomocí kontejneru, měl by pro každou aplikaci existovat jeden kontejner. Například Apache + PHP na jednom kontejneru, zatímco MySQL na jiném. Proto byl Docker vyvinut na tomto modelu, což znamená, že není potřeba, aby Systemd, který najdeme v jakémkoli standardním linuxovém systému, řídil a spouštěl více služeb paralelně. Proto, jak Docker navrhuje spouštět více kontejnerů pro různé aplikace, proto vývojáři deaktivovali tohoto správce systémových procesů, aby zlepšili izolaci a zabezpečení kontejneru, to je důvod, proč se zobrazí chyba, kdykoli chceme použít systemctl příkaz.

Tip – Co je Systemd?

Systemd je správce systému a relací (inicializace systému ), který je zodpovědný za správu všech služeb spuštěných v systému po celou dobu provozu počítače, od procesu spouštění až po vypnutí. Procesy jsou vždy spouštěny paralelně (v rámci možností), aby byl proces bootování co nejkratší.

Také systemd je prvním procesem, který se spustí v systému Linux, proto spouštíme ps -aux příkaz na libovolném linuxovém terminálu vidíme, že první proces (PID 1) je přidělen systemd .

ps -aux

Na druhou stranu, když spustíte stejný příkaz uvnitř kontejneru, uvidíte PID (1) znamená, že první proces systému byl přidělen bash .

To je důvod, proč se chyba zobrazí pokaždé, když se pokusíte spustit nějakou službu v kontejneru Docker pomocí systemctl příkaz.

Instalovat nebo povolit systemd v kontejnerech Almalinux nebo Rocky Linux 8 Docker

Vytvořte soubor Docker

Existují určité příkazy, které musíme provést před vytvořením kontejneru pomocí Almalinuxu nebo Rockyho. Místo toho, abychom je spouštěli v jediném příkazu, pojďme je přidat do souboru dockeru, abychom vytvořili obrázek Docker s povoleným systemd .

Vytvořte adresář řekněme ‘sysmd ‘ :

mkdir sysmd

přepněte na něj:

cd sysmd

Vytvoření souboru dockeru:

nano Dockerfile

Příkazy ke spuštění v souboru Docker pro získání Systemd

Nyní zkopírujte a vložte dané příkazy do souboru Docker:

Poznámka :Změňte almalinux na rockylinux , pokud chcete vytvořit Docker Image pro spuštění Rocky Linuxu.

Dané příkazy v souboru vytáhnou Docker Image (Almalinux nebo Rocky) a poté provedou následující příkaz včetně připojení svazku a příkazu potřebného k povolení Systemd. Také odstraníme některé soubory spojené se systemd, abychom povolili další služby, které v našem kontejneru Docker příkazového řádku nevyžadujeme.

Z almalinuxu ENV kontejner dockerRUN (cd /lib/systemd/system/sysinit.target.wants/; for i in; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; hotovo);RUN rm -rf /lib/systemd/system/multi-user.target.wants/ \&&rm -rf /etc/systemd/system/.wants/ \&&rm -rf /lib/systemd/system/local-fs.target. chce/ \&&rm -f /lib/systemd/system/sockets.target.wants/udev \&&rm -f /lib/systemd/system/sockets.target.wants/initctl \&&rm -rf /lib/systemd/ system/basic.target.wants/ \&&rm -f /lib/systemd/system/anaconda.target.wants/*VOLUME [ “/sys/fs/cgroup” ]CMD ["/usr/sbin/init"] 

Uložte soubor stisknutím Ctrl+O stiskněte Enter a poté stiskněte Ctrl+X pro ukončení souboru.

Vytvoření souboru kontejneru Docker pomocí systemd

Nyní načteme a vytvoříme obraz kontejneru a přitom předáme příkazy zadané v souboru Docker. K tomu existuje příkaz s názvem- docker build a používáme totéž.

docker build -t almalinux-md .

Poznámka :Můžete změnit almalinux-md s jakýmkoli jménem, ​​které chcete dát svému obrázku. A také nezapomeňte přidat tečku (. ), jak je uvedeno ve výše uvedeném příkazu, vede build příkaz k vyhledání souboru Docker v adresáři.

Můžete vidět, že všechny příkazy zadané v souboru byly provedeny docker build vytvořit nový obrázek s názvem, který jste mu dali.

Výstup:

Odeslání kontextu sestavení do démona Docker 2,56 kB Krok 1/6 :Z almalinuxu ---> 4ca63ce1d8a9 Krok 2/6 :ENV kontejnerový docker ---> Spuštění v 57d447426e1a Odebrání mezilehlého kontejneru 57d447426e1a ---> 4ca63ce1d8a9 Krok 57d447426e1a 6 :RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; hotovo); ---> Spuštění v bc3b161040e6 Odebrání přechodného kontejneru bc3b161040e6 ---> 6f51cf56580e Krok 4/6 :SPUŠTĚTE rm -rf /lib/systemd/system/multi-user.target.wants/ &&rm -rf /etc /.wants/ &&rm -rf /lib/systemd/system/local-fs.target.wants/ &&rm -f /lib/systemd/system/sockets.target.wants/udev &&rm -f /lib/systemd/ system/sockets.target.wants/initctl &&rm -rf /lib/systemd/system/basic.target.wants/ &&rm -f /lib/systemd/system/anaconda.target.wants/* ---> Spuštěno 082cfe33fc89 Odebrání mezikontejneru 082cfe33fc89 ---> 9f8224491315 Krok 5/6 :VOLUME [ “/sys/fs/cgroup” ] ---> Krok zaběhnutí fe0177b04643 Vyjmutí 204b mezikontejneru 204b-1017 MD 21b"-1017 /usr/sbin/init"] ---> Spuštěno bff7b36d4964 Odebrání přechodného kontejneru bff7b36d4964 ---> 9b8dfd7c1d81 Úspěšně vytvořeno 9b8dfd7c1d81 Úspěšně označeno almalinux-md:latest

Vyhledejte vytvořený obrázek Almalinux nebo Rocky Linux

Nyní se podívejme, zda obrázek, který jsme tam vytvořili pro spuštění kontejnerů, nebo ne:

obrázky dockeru

Vytvořte nebo spusťte kontejner Docker pomocí systemd

Máme obrázek, který jsme právě vytvořili, pojďme ho použít k vytvoření kontejneru.

docker run -itd --privileged--name h2smedia almalinux-md 

h2smedia je hezké jméno, které chceme dát našemu kontejneru, zatímco almalinux-md je název obrázku, který jsme vytvořili, nahraďte jej svým.

Upozornění :Zde spouštíme kontejner s privilegovaným flag, to dodá kontejnerům extra sílu, jednoduše řečeno - kontejner bude mít práva nebo oprávnění root k hostitelskému počítači. Takové kontejnery obvykle používáme, když chceme poskytnout přímý přístup k hardwaru (hostitele) nebo chceme spustit kontejner uvnitř kontejneru. Proto se doporučuje nepoužívat takové kontejnery pro komerční nebo podnikové použití, kde k některým službám přistupují externí uživatelé. Vytvořte jej pouze pro vývojové nebo místní účely. To je důvod, proč jsme spustili výše uvedený příkaz s tímto příznakem, abychom mohli mít v našem kontejneru zařízení Systemd nebo init.

Přepnout na Container Bash

Nyní se podívejme na příkazový řádek kontejneru a zkontrolujeme, zda můžeme spustit systemctl příkaz nebo ne.

Nyní máte Docker Image s Systemd a to vám umožní vytvořit tolik kontejnerů, kolik chcete pro vývoj nebo testování místních aplikací.

Další výukové programy:

• Jak nainstalovat a nastavit Docker Container na AlmaLinux 8
• Jak vytvořit soubor servisní jednotky Systemd v Linuxu
• Analyzovat dobu spouštění systému Linux pomocí Systemd


Rocky Linux
  1. Jak spravovat služby Systemd pomocí Systemctl v systému Linux

  2. Jak nainstalovat Docker na AlmaLinux / Rocky Linux

  3. Může docker běžet uvnitř linuxového kontejneru?

  1. Jak používat příkaz Docker Run s příklady

  2. AlmaLinux vs Rocky Linux

  3. Jak nainstalovat a nastavit Docker Container na Rocky Linux 8

  1. Jak spustit Jenkins Container jako službu Systemd pomocí Dockeru

  2. Jak nainstalovat Docker na Rocky Linux 8 / CentOS 8 / RHEL 8 / AlmaLinux

  3. Nainstalujte a spusťte Jenkins pomocí Systemd a Docker