GNU/Linux >> Tutoriels Linux >  >> Rocky Linux

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

Comme nous le savons, par défaut, le conteneur Docker s'exécute sans systemd signifie que l'utilisateur ne peut pas utiliser systemctl commande. 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 exécutons systemctl commande dans n'importe quel conteneur Docker ? Quelle est la raison derrière cela ?

En fait, selon les développeurs Docker, qu'ils recommandent également, il convient d'utiliser un seul service dans 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 l'on trouve 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'isolation et la sécurité du conteneur, c'est la raison pour laquelle nous obtenons une erreur chaque fois que nous voulons utiliser le systemctl commande.

Astuce :Qu'est-ce que Systemd ?

Systemd est un gestionnaire de système et de session (init system ) 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) pour que le processus de démarrage soit le plus court possible.

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

ps-aux

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é alloué à bash .

Par conséquent, c'est la raison pour laquelle vous obtiendrez l'erreur chaque fois que vous essayez de démarrer un service à l'intérieur du conteneur Docker en utilisant le systemctl commande.

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

Créer un fichier Docker

Certaines commandes doivent être exécutées avant de créer un conteneur à l'aide d'Almalinux ou de Rocky. Par conséquent, au lieu de les exécuter en 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

passez-y :

cd sysmd

Créer 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 :

Remarque :Changer le 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.

DEPUIS almalinux Conteneur ENV dockerRUN (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. veut/ \&&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, appuyez sur Entrée touche , puis appuyez sur Ctrl+X pour quitter le fichier.

Créer un fichier conteneur Docker avec systemd

Maintenant, nous récupérons et construisons une image de conteneur tout 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 .

Remarque :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 la build commande pour rechercher le fichier Docker dans le répertoire.

Vous pouvez voir que toutes les commandes données dans le fichier ont été exécutées par le docker build pour créer une nouvelle image avec le nom que vous lui avez donné.

Sortie :

Envoi du contexte de construction au démon Docker 2.56kB Étape 1/6 :FROM almalinux ---> 4ca63ce1d8a9 Étape 2/6 :docker conteneur ENV ---> Exécution dans 57d447426e1a Suppression du conteneur intermédiaire 57d447426e1a ---> fa30ff65bd36 Étape 3/ 6 :RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in; do [ $i ==systemd-tmpfiles-setup.service ] || rm -f $i; done); ---> Exécution dans bc3b161040e6 Suppression du conteneur intermédiaire bc3b161040e6 ---> 6f51cf56580e Étape 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/* ---> En cours d'exécution 082cfe33fc89 Retrait du conteneur intermédiaire 082cfe33fc89 ---> 9f8224491315 Étape 5/6 :VOLUME [ “/sys/fs/cgroup” ] ---> Running in fe0177b04643 Retrait du conteneur intermédiaire fe0177b04643 ---> 212b1b01046b Étape 6/6 :CMD [" /usr/sbin/init"] ---> Exécution dans bff7b36d4964 Suppression du conteneur intermédiaire bff7b36d4964 ---> 9b8dfd7c1d81 Construit avec succès 9b8dfd7c1d81 Balisé avec succès almalinux-md:latest

Vérifier la création d'une image Almalinux ou Rocky Linux

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

images fixes

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-la par la vôtre.

Avertissement :Ici, nous exécutons le conteneur avec un privilégié flag, cela donnera plus de puissance 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 matériel direct (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 ces conteneurs à des fins commerciales ou d'entreprise lorsque 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.

Basculer vers Container Bash

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

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 tutoriels :

• 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


Rocky Linux
  1. AlmaLinux contre Rocky Linux

  2. Comment gérer les services Systemd avec Systemctl sous Linux

  3. Comment installer Docker sur AlmaLinux / Rocky Linux

  4. Comment installer et configurer Docker Container sur Rocky Linux 8

  5. Docker peut-il s'exécuter dans un conteneur Linux ?

Comment installer et utiliser le conteneur Rocky Linux Docker

Installer Discord sur AlmaLinux ou Rocky Linux 8

Comment installer Podman sur Rocky Linux 8 / AlmaLinux pour exécuter des conteneurs

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

Comment installer Docker sur Rocky Linux et AlmaLinux

Comment installer Docker sur Rocky Linux et AlmaLinux