GNU/Linux >> Linux Esercitazione >  >> Rocky Linux

Esegui il contenitore Docker Almalinux o Rocky Linux 8 con Systemd (systemctl)

Come sappiamo, per impostazione predefinita il contenitore Docker viene eseguito senza systemd significa che l'utente non può utilizzare systemctl comando. È perché qualsiasi contenitore creiamo su Docker non è stato avviato con init. Qui impariamo come eseguire Systemd all'interno dei contenitori Docker Alamlinux/Rocky Linux/CentOS 8.

Beh, la domanda è perché riceviamo un errore ogni volta che eseguiamo systemctl comando all'interno di qualsiasi contenitore docker? Qual è il motivo?

In realtà, secondo gli sviluppatori Docker, che consigliano anche loro, si dovrebbe utilizzare un unico servizio all'interno di un container. Significa che se hai intenzione di installare WordPress utilizzando un container, dovrebbe esserci un unico container per applicazione. Ad esempio Apache + PHP su un container mentre MySQL su un altro. Quindi, Docker è stato sviluppato su questo modello, il che significa che non è necessario Systemd che troviamo in qualsiasi sistema Linux standard per gestire ed eseguire più servizi in parallelo. Pertanto, poiché Docker suggerisce di eseguire più contenitori per app diverse, quindi gli sviluppatori hanno disabilitato questo gestore dei processi di sistema per migliorare l'isolamento e la sicurezza del contenitore, questo è il motivo per cui riceviamo un errore ogni volta che vogliamo utilizzare systemctl comando.

Suggerimento:cos'è Systemd?

Systemd è un gestore di sistema e sessione (sistema init ) che è responsabile della gestione di tutti i servizi in esecuzione sul sistema durante l'intero tempo di funzionamento del computer, dal processo di avvio allo spegnimento. I processi vengono sempre avviati in parallelo (per quanto possibile) per mantenere il processo di avvio il più breve possibile.

Inoltre, il systemd è il primo processo da attivare in un sistema Linux, questo è il motivo per cui eseguiamo ps -aux comando su qualsiasi terminale Linux vediamo che il primo processo (PID 1) è allocato al systemd .

ps -aux

D'altra parte, quando esegui lo stesso comando all'interno di un container, vedrai il PID (1) significa che il primo processo del sistema è stato assegnato a bash .

Pertanto, questo è il motivo per cui riceverai l'errore ogni volta che tenti di avviare un servizio all'interno del contenitore Docker utilizzando systemctl comando.

Installa o abilita systemd all'interno dei container Docker Almalinux o Rocky Linux 8

Crea un file Docker

Ci sono alcuni comandi che dobbiamo eseguire prima di creare un contenitore usando Almalinux o Rocky. Quindi, invece di eseguirli in un unico comando, aggiungiamoli in un file Docker per creare un'immagine Docker abilitata con systemd .

Crea una directory, diciamo "sysmd ' :

mkdir sysmd

passa ad esso:

cd sysmd

Crea un file Docker:

nano Dockerfile

Comandi da eseguire nel file Docker per ottenere Systemd

Ora, copia e incolla i comandi forniti nel file Docker:

Nota :Cambia almalinux a rockylinux , se desideri creare un'immagine Docker per eseguire Rocky Linux.

I comandi forniti nel file estrarranno l'immagine Docker (Almalinux o Rocky) e quindi eseguiranno il comando seguente incluso il montaggio di Volume e il comando richiesto per abilitare Systemd. Inoltre, rimuoveremo alcuni file associati a systemd per abilitare altri servizi di cui non abbiamo bisogno nel nostro contenitore Docker della riga di comando.

FROM almalinux
ENV container docker

RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in ; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done);

RUN rm -rf /lib/systemd/system/multi-user.target.wants/ \
&& rm -rf /etc/systemd/system/.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/*

VOLUME [ “/sys/fs/cgroup” ]
CMD ["/usr/sbin/init"]

Salva il file premendo Ctrl+O premi Invio tasto, quindi premi Ctrl+X per uscire dal file.

Crea un file contenitore Docker con systemd

Ora recuperiamo e costruiamo un'immagine del contenitore passando i comandi forniti nel file Docker. Per questo, esiste un comando chiamato- docker build e noi usiamo lo stesso.

docker build -t almalinux-md .

Nota :puoi modificare almalinux-md con qualsiasi nome tu voglia dare alla tua Immagine. Inoltre, non dimenticare di aggiungere un punto (. ) come indicato nel comando precedente, guida la build comando per cercare il file Docker all'interno della directory.

Puoi vedere che tutti i comandi dati nel file sono stati eseguiti da docker build per creare una nuova immagine con il nome che le hai assegnato.

Risultato:

Sending build context to Docker daemon 2.56kB 
Step 1/6 : FROM almalinux 
---> 4ca63ce1d8a9 
Step 2/6 : ENV container docker 
---> Running in 57d447426e1a 
Removing intermediate container 57d447426e1a 
---> fa30ff65bd36 
Step 3/6 : RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in ; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); 
---> Running in bc3b161040e6 
Removing intermediate container bc3b161040e6 
---> 6f51cf56580e 
Step 4/6 : RUN rm -rf /lib/systemd/system/multi-user.target.wants/ && rm -rf /etc/systemd/system/.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/* 
---> Running in 082cfe33fc89 
Removing intermediate container 082cfe33fc89 
---> 9f8224491315 
Step 5/6 : VOLUME [ “/sys/fs/cgroup” ] 
---> Running in fe0177b04643 
Removing intermediate container fe0177b04643 
---> 212b1b01046b 
Step 6/6 : CMD ["/usr/sbin/init"] 
---> Running in bff7b36d4964 
Removing intermediate container bff7b36d4964 
---> 9b8dfd7c1d81 
Successfully built 9b8dfd7c1d81 
Successfully tagged almalinux-md:latest

Controlla l'immagine Almalinux o Rocky Linux creata

Ora controlliamo se l'immagine che abbiamo creato lì per avviare i contenitori o meno:

docker images

Crea o avvia Docker Container con systemd

Abbiamo l'immagine che abbiamo appena costruito, usiamola per creare un contenitore.

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

h2smedia è il bel nome che vogliamo dare al nostro contenitore mentre almalinux-md è il nome dell'immagine che abbiamo creato, sostituiscilo con il tuo.

Avviso :qui stiamo eseguendo il container con un privilegiato flag, questo darà potenza extra ai contenitori, in parole semplici:il contenitore avrà diritti o privilegi di root sulla macchina host. Tali contenitori li utilizziamo solitamente quando vogliamo fornire l'accesso hardware diretto (dell'host) o vogliamo eseguire un contenitore all'interno di un contenitore. Pertanto, si consiglia di non utilizzare tali contenitori per uso commerciale o aziendale quando utenti esterni accedono ad alcuni servizi. Fallo solo per scopi di sviluppo o locali. Questo è il motivo per cui abbiamo eseguito il comando precedente con questo flag in modo da poter avere la funzione Systemd o init nel nostro contenitore.

Passa a Container Bash

Ora accediamo alla riga di comando del contenitore per verificare se possiamo eseguire systemctl comando o meno.

Ora hai l'immagine Docker con Systemd e questo ti consentirà di creare tutti i contenitori che desideri per lo sviluppo o il test di applicazioni locali.

Altri tutorial:

• Come installare e configurare Docker Container su AlmaLinux 8
• Come creare un file dell'unità di servizio Systemd in Linux
• Analizzare il tempo di avvio del sistema Linux con Systemd


Rocky Linux
  1. AlmaLinux vs Rocky Linux

  2. Come gestire i servizi Systemd con Systemctl su Linux

  3. Come installare Docker su AlmaLinux / Rocky Linux

  4. Come installare e configurare Docker Container su Rocky Linux 8

  5. La finestra mobile può essere eseguita all'interno di un contenitore Linux?

Come installare e utilizzare il contenitore Rocky Linux Docker

Installa Discord su AlmaLinux o Rocky Linux 8

Come installare Podman su Rocky Linux 8 / AlmaLinux per eseguire Containers

Esegui il contenitore Docker Almalinux o Rocky Linux 8 con Systemd (systemctl)

Come installare Docker su Rocky Linux e AlmaLinux

Come installare Docker su Rocky Linux e AlmaLinux