GNU/Linux >> Tutoriales Linux >  >> Rocky Linux

Ejecute el contenedor Docker de Almalinux o Rocky Linux 8 con Systemd (systemctl)

Como sabemos, por defecto, el contenedor Docker se ejecuta sin systemd significa que el usuario no puede usar systemctl dominio. Es porque cualquier contenedor que creamos en Docker no se ha iniciado con init. Aquí aprendemos cómo ejecutar Systemd dentro de los contenedores Alamlinux/Rocky Linux/CentOS 8 Docker.

Bueno, la pregunta es por qué obtenemos un error cada vez que ejecutamos systemctl comando dentro de cualquier contenedor docker? ¿Cuál es la razón detrás de esto?

En realidad, según los desarrolladores de Docker, que también recomiendan, se debe usar un solo servicio dentro de un contenedor. Significa que si planea instalar WordPress usando un contenedor, entonces debería haber un solo contenedor por aplicación. Por ejemplo, Apache + PHP en un contenedor mientras que MySQL en otro. Por lo tanto, Docker se ha desarrollado en este modelo, lo que significa que no hay necesidad de Systemd que encontramos en cualquier sistema Linux estándar para administrar y ejecutar múltiples servicios en paralelo. Por lo tanto, como Docker sugiere ejecutar múltiples contenedores para diferentes aplicaciones, los desarrolladores deshabilitaron este administrador de procesos del sistema para mejorar el aislamiento y la seguridad del contenedor, esa es la razón por la que recibimos un error cada vez que queremos usar el systemctl comando.

Consejo:¿Qué es Systemd?

Systemd es un administrador de sistemas y sesiones (init system ) que es responsable de administrar todos los servicios que se ejecutan en el sistema durante todo el tiempo de funcionamiento de la computadora, desde el proceso de inicio hasta el apagado. Los procesos siempre se inician en paralelo (en la medida de lo posible) para que el proceso de arranque sea lo más corto posible.

Además, el systemd es el primer proceso que se desencadena en un sistema Linux, por eso ejecutamos ps -aux comando en cualquier terminal de Linux, vemos que el primer proceso (PID 1) se asigna a systemd .

ps -aux

Por otro lado, cuando ejecuta el mismo comando dentro de un contenedor, verá el PID (1) significa que el primer proceso del sistema ha sido asignado a bash .

Por lo tanto, esta es la razón por la que obtendrá el error cada vez que intente iniciar algún servicio dentro del contenedor Docker usando systemctl comando.

Instalar o habilitar systemd dentro de los contenedores Docker de Almalinux o Rocky Linux 8

Crear un archivo Docker

Hay ciertos comandos que debemos ejecutar antes de crear un contenedor utilizando Almalinux o Rocky. Por lo tanto, en lugar de ejecutarlos en un solo comando, agréguelos en un archivo acoplable para crear una imagen acoplable habilitada con systemd .

Crear un directorio, digamos 'sysmd ' :

mkdir sysmd

cambiar a él:

cd sysmd

Crear un archivo docker:

nano Dockerfile

Comandos para ejecutar en el archivo Docker para obtener Systemd

Ahora, copie y pegue los comandos dados en el archivo Docker:

Nota :Cambia el almalinux a rockylinux , si desea crear una imagen de Docker para ejecutar Rocky Linux.

Los comandos proporcionados en el archivo extraerán la imagen de Docker (Almalinux o Rocky) y luego ejecutarán el siguiente comando, incluido el montaje del volumen y el comando requerido para habilitar Systemd. Además, eliminaremos algunos archivos asociados con systemd para habilitar otros servicios que no necesitamos en nuestro contenedor Docker de línea de 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"]

Guarde el archivo presionando Ctrl+O, pulsa Intro y luego presione Ctrl+X para salir del archivo.

Crear archivo contenedor Docker con systemd

Ahora, buscamos y construimos una imagen de contenedor mientras pasamos los comandos dados en el archivo Docker. Para eso, hay un comando llamado- docker build y usamos lo mismo.

docker build -t almalinux-md .

Nota :Puede cambiar almalinux-md con el nombre que quieras darle a tu Imagen. Y tampoco olvides agregar un punto (. ) como se indica en el comando anterior, guía la build comando para buscar Docker File dentro del directorio.

Puede ver que todos los comandos dados en el archivo han sido ejecutados por docker build para hacer una nueva imagen con el nombre que le has dado.

Salida:

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

Comprobar la imagen creada de Almalinux o Rocky Linux

Ahora, comprobemos si la imagen que hemos creado allí para iniciar contenedores o no:

docker images

Crear o iniciar Docker Container con systemd

Tenemos la Imagen que acabamos de construir, usémosla para crear un contenedor.

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

h2smedia es el bonito nombre que queremos dar a nuestro contenedor mientras que almalinux-md es el nombre de la imagen que hemos creado, reemplázala por la tuya.

Advertencia :Aquí estamos ejecutando el contenedor con un privilegio flag, esto le dará poder adicional a los contenedores, en palabras simples:el contenedor tendrá derechos o privilegios de raíz para la máquina host. Dichos contenedores, generalmente los usamos cuando queremos dar acceso directo al hardware (del host) o queremos ejecutar un contenedor dentro de un contenedor. Por lo tanto, se recomienda no utilizar dichos contenedores para uso comercial o empresarial donde los usuarios externos accedan a algunos servicios. Hágalo solo para fines locales o de desarrollo. Esa es la razón por la que ejecutamos el comando anterior con este indicador para que podamos tener la función Systemd o init en nuestro contenedor.

Cambiar a Contenedor Bash

Ahora, accedamos a la línea de comandos del contenedor para verificar si podemos ejecutar systemctl comando o no.

Ahora, tiene la imagen de Docker con Systemd y esto le permitirá crear tantos contenedores como desee para desarrollar o probar aplicaciones locales.

Otros tutoriales:

• Cómo instalar y configurar Docker Container en AlmaLinux 8
• Cómo crear un archivo de unidad de servicio Systemd en Linux
• Analizar el tiempo de arranque del sistema Linux con Systemd


Rocky Linux
  1. AlmaLinux frente a Rocky Linux

  2. Cómo administrar los servicios de Systemd con Systemctl en Linux

  3. Cómo instalar Docker en AlmaLinux / Rocky Linux

  4. Cómo instalar y configurar Docker Container en Rocky Linux 8

  5. ¿Se puede ejecutar docker dentro de un contenedor de Linux?

Cómo instalar y usar el contenedor Rocky Linux Docker

Instala Discord en AlmaLinux o Rocky Linux 8

Cómo instalar Podman en Rocky Linux 8 / AlmaLinux para ejecutar Contenedores

Ejecute el contenedor Docker de Almalinux o Rocky Linux 8 con Systemd (systemctl)

Cómo instalar Docker en Rocky Linux y AlmaLinux

Cómo instalar Docker en Rocky Linux y AlmaLinux