Magazine Gadgets

Exécutez le conteneur Docker Almalinux ou Rocky Linux 8 avec Systemd (systemctl)

Publié le 16 décembre 2021 par Mycamer

Comme nous le savons par défaut, le conteneur Docker s’exécute sans systemd signifie que l’utilisateur ne peut pas utiliser systemctl commander. C’est parce que le conteneur que nous créons sur Docker n’a pas été démarré avec init. Ici, nous apprenons à exécuter Systemd dans les conteneurs Docker Alamlinux/Rocky Linux/CentOS 8.

Eh bien, la question est pourquoi obtenons-nous une erreur chaque fois que nous courons systemctl commande à l’intérieur d’un conteneur Docker ? Quelle en est la raison?

En fait, selon les développeurs Docker, qu’ils recommandent également, il faut utiliser un seul service à l’intérieur d’un conteneur. Cela signifie que si vous envisagez d’installer WordPress à l’aide d’un conteneur, il devrait y avoir un seul conteneur par application. Par exemple Apache + PHP sur un conteneur tandis que MySQL sur un autre. Par conséquent, Docker a été développé sur ce modèle, ce qui signifie qu’il n’y a pas besoin de Systemd que nous trouvons dans n’importe quel système Linux standard pour gérer et exécuter plusieurs services en parallèle. Par conséquent, comme Docker suggère d’exécuter plusieurs conteneurs pour différentes applications, les développeurs ont donc désactivé ce gestionnaire de processus système pour améliorer l’isolement et la sécurité du conteneur, c’est la raison pour laquelle nous obtenons une erreur chaque fois que nous voulons utiliser le systemctl commander.

Astuce – Qu’est-ce que Systemd?

Systemd est un gestionnaire de système et de session (système d’initialisation) qui est responsable de la gestion de tous les services exécutés sur le système pendant toute la durée de fonctionnement de l’ordinateur, du processus de démarrage à l’arrêt. Les processus sont toujours démarrés en parallèle (dans la mesure du possible) afin de maintenir le processus de démarrage aussi court que possible.

Également systemd est le premier processus à se déclencher dans un système Linux, c’est la raison pour laquelle nous exécutons ps -aux sur n’importe quel terminal Linux, nous voyons que le premier processus (PID 1) est alloué au systemd.

ps -aux

Commande PS pour vérifier le processus

D’autre part, lorsque vous exécutez la même commande à l’intérieur d’un conteneur, vous verrez le PID (1) signifie que le premier processus du système a été affecté à frapper.

ps commande à l'intérieur du conteneur docker

Par conséquent, c’est la raison pour laquelle vous obtiendrez l’erreur chaque fois que vous essayez de démarrer un service dans le conteneur Docker en utilisant le systemctl commander.

Installer ou activer systemd dans les conteneurs Docker Almalinux ou Rocky Linux 8

Créer un fichier Docker

Il y a certaines commandes que nous devons exécuter avant de créer un conteneur à l’aide d’Almalinux ou de Rocky. Par conséquent, au lieu de les exécuter dans une seule commande, ajoutons-les dans un fichier docker pour créer une image Docker activée avec systemd.

Créer un répertoire, Disons ‘sysmd‘ :

mkdir sysmd

basculer dessus :

cd sysmd

Créez un fichier docker :

nano Dockerfile

Commandes à exécuter dans le fichier Docker pour obtenir Systemd

Maintenant, copiez-collez les commandes données dans le fichier Docker :

Noter: Changer la almalinux à rockylinux, si vous souhaitez créer une image Docker pour exécuter Rocky Linux.

Les commandes données dans le fichier extrairont l’image Docker (Almalinux ou Rocky), puis exécuteront la commande suivante, y compris le montage du volume et la commande requise pour activer Systemd. De plus, nous supprimerons certains fichiers associés à systemd pour activer d’autres services dont nous n’avons pas besoin sur notre conteneur Docker en ligne de commande.

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"]

Enregistrez le fichier en appuyant sur Ctrl+O, frapper le Entrer touche, puis appuyez sur Ctrl+X pour quitter le fichier.

Commandes à exécuter dans le fichier Docker pour obtenir Systemd

Construire un fichier conteneur Docker avec systemd

Maintenant, nous récupérons et construisons une image de conteneur en passant les commandes données dans le fichier Docker. Pour cela, il existe une commande appelée- docker build et nous utilisons le même.

docker build -t almalinux-md .

Noter: Vous pouvez changer almalinux-md avec le nom que vous voulez donner à votre image. Et n’oubliez pas non plus d’ajouter un point (.) comme indiqué dans la commande ci-dessus, il guide le build commande pour rechercher le fichier Docker dans le répertoire.

Vous pouvez voir que toute la commande donnée dans le fichier a été exécutée par le docker build pour créer une nouvelle image avec le nom que vous lui avez donné.

Créer un fichier Docker pour exécuter le conteneur avec Systemd

Sortir:

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

Rechercher une image Almalinux ou Rocky Linux créée

Maintenant, vérifions si l’image que nous avons créée ici pour démarrer les conteneurs ou non :

docker images

Vérifier les images Docker

Créer ou démarrer un conteneur Docker avec systemd

Nous avons l’image que nous venons de construire, utilisons-la pour créer un conteneur.

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

h2smedia est le joli nom que l’on veut donner à notre conteneur alors que almalinux-md est le nom de l’image que nous avons créée, remplacez-le par le vôtre.

Avertissement: Ici, nous exécutons le conteneur avec un privilégié flag, cela donnera un pouvoir supplémentaire aux conteneurs, en termes simples, le conteneur aura des droits ou des privilèges root sur la machine hôte. De tels conteneurs, nous les utilisons généralement lorsque nous voulons donner un accès direct au matériel (de l’hôte) ou que nous voulons exécuter un conteneur à l’intérieur d’un conteneur. Il est donc recommandé de ne pas utiliser de tels conteneurs à des fins commerciales ou d’entreprise où des utilisateurs extérieurs accèdent à certains services. Faites-le uniquement à des fins de développement ou à des fins locales. C’est la raison pour laquelle nous avons exécuté la commande ci-dessus avec cet indicateur afin que nous puissions avoir la fonction Systemd ou init dans notre conteneur.

Passer à Container Bash

Maintenant, accédons à la ligne de commande du conteneur pour vérifier si nous pouvons exécuter systemctl commande ou non.

Vérifiez systemctl sur Docker Container Almalinux ou Rocky
Démarrer le service avec systemctl dans le conteneur Docker

Le système n'a pas été démarré avec systemd comme système d'initialisation PID 1. Impossible de fonctionner

Maintenant, vous avez l’image Docker avec Systemd et cela vous permettra de créer autant de conteneurs que vous le souhaitez pour développer ou tester des applications locales.

Autres tutos :

Comment installer et configurer Docker Container sur AlmaLinux 8
Comment créer un fichier d’unité de service Systemd sous Linux
• Analyser le temps de démarrage du système Linux avec Systemd

— to www.how2shout.com


Retour à La Une de Logo Paperblog

A propos de l’auteur


Mycamer Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Magazines