Cómo interactuar con los contenedores Docker

Cómo interactuar con los contenedores Docker

Este artículo extiende el artículo anterior de Docker y muestra cómo interactuar con los contenedores de Docker ejecutando comandos dentro de contenedores, instalando software dentro de contenedores, inspeccionar el estado de los contenedores, acceder a contenedores utilizando bash, persistiendo cambios en imágenes y eliminando contenedores e imágenes no utilizadas.

En este tutorial aprenderás:

  • Cómo ejecutar comandos dentro de contenedores
  • Cómo instalar software dentro de contenedores
  • Cómo inspeccionar el estado del contenedor
  • Cómo acceder a contenedores usando bash
  • Cómo persistir los cambios en las imágenes
  • Cómo eliminar contenedores e imágenes no utilizados
PHP instalado.

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Cualquier distribución de Linux
Software Estibador
Otro Acceso privilegiado a su sistema Linux como root o a través del sudo dominio.
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Cómo interactuar con los contenedores Docker

En el primer artículo de esta serie, aprendió conceptos de Docker y algunos comandos básicos y vio cómo puede ejecutar fácilmente el software de manera compartimentada, sin tocar la configuración del sistema operativo de host. Ahora vamos a profundizar, entrando en un contenedor en ejecución y ejecutando algunos comandos.



Ejecutando comandos dentro de un contenedor en ejecución

En el artículo anterior, inició un contenedor Apache. La imagen subyacente no tenía PHP instalada, por lo que solo era capaz de servir páginas HTML estáticas. Obtengamos un contenedor con Apache y PHP instalado en él. En caso de que se pregunte, hay imágenes listas para usarse con Apache y PHP instalados, y se pueden encontrar en Docker Hub. Estamos haciendo esto solo para demostrar cómo se puede personalizar una imagen a sus necesidades.

Entonces, comencemos una instancia de Debian usando una línea de comando similar del artículo anterior, pero con dos diferencias: damos un nombre (--Nombre Debian_Container), por lo que podemos referirnos a él más tarde y asignar un terminal para que se ejecute (-él).

$ Docker Run -it - -Name Debian_Container -D -P 8000: 80 -V "$ pwd":/var/www/html Debian 

Podemos interactuar con un contenedor Docker en ejecución. Te han dicho antes que los contenedores comparten el mismo núcleo que el sistema operativo del host. Vamos a revisar.

$ docker ejecutor debian_container uname -a 

El comando Docker Exec Arriba ejecuta el comando dado dentro del contenedor y muestra su salida.

Todos los comandos de Docker tienen una ayuda asociada, por lo tanto, podemos ver las opciones Docker Exec acepta:

$ Docker Exec --help 

Ahora puedes jugar con otros comandos:

$ Docker ejecutor debian_container ls -l $ Docker ejecutor debian_container pwd $ docker ejecutor debian_container whoami $ docker ejecutor debian_container gat /etc /número 
Copiar

En este último comando, aprendimos que el contenedor está ejecutando Debian 9, a pesar del sistema operativo de su máquina. Como se mencionó anteriormente, el sistema operativo del host y el contenedor comparten solo el núcleo.

Si lo intentó pero no pudo ejecutar un comando dentro del contenedor, probablemente no esté allí. La imagen (como todas las demás imágenes) está construida a partir de una configuración mínima de Debian, por lo que se debe instalar cualquier herramienta adicional. Logra dos objetivos: tamaño de disco más pequeño y seguridad mejorada, ya que menos software significa menos errores para explotar.

Ahora, entremos en el contenedor.

$ Docker Exec -it Debian Bash Root@B5C694A02248:/usr/local/apache2# 
Copiar

Observe que el aviso ha cambiado y ahora usted es usuario raíz dentro del contenedor (B5C694A02248 es el nombre de host dentro del contenedor) dentro de un caparazón de la fiesta.



Instalar software en un contenedor

Ahora tenemos un shell dentro del contenedor con el usuario raíz. Dado que esta es una versión recortada de Debian, ni siquiera hay los comandos arriba y PD. Vamos a instalarlos.

# Actualización APT # APT Install Procps 
Copiar

Puedes ver lo que está funcionando con arriba y PS -EF.

raíz@f5b423465e03:/# ps -ef uid pid ppid c time tty tty cmd root 1 0 0 19:46 pts/0 00:00:00 raíz bash 42 0 0 19:49 pts/1 00:00:00 bash root 310 42 0 19:53 pts/1 00:00:00 ps -ef root@f5b423465e03:/# 
Copiar

Si, es frugal. Los contenedores Docker generalmente tienen el número mínimo absoluto de procesos que se ejecutan. Para dejar el shell y regresar a su sistema operativo de host, simplemente salga de Bash (escriba salida o Ctrl+D).

Observe que muchos archivos han sido descargados por Actualización de apt y instalación de apt. Todos existen en el disco del contenedor en ejecución. Todavía existen si el contenedor se detiene y comienza de nuevo (Docker Stop Debian_Container; Docker comienza Debian_Container). Pero no existen en la imagen. Significa que, si elimina este contenedor (Docker RM Debian_Container) e iniciar un nuevo contenedor, tendrá que instalar el paquete procps de nuevo. Además, si inicia la imagen de Debian en otro host, también tendrá que instalar procps de nuevo. Más tarde, veremos cómo persistir la imagen con modificaciones de disco, por lo que la próxima vez que inicie un contenedor, se instalará todo el software.

Ahora, instalemos Apache y PHP. El siguiente comando tardará mucho en terminar e descargará e instalará todos los paquetes de dependencia, incluidos Apache y PHP; tomará algunos minutos. Al final, inicie Apache y acceda a localhost en el puerto 8000 en su navegador web (http: // localhost: 8000). Verá la página de Debian predeterminada para Apache.

# APT Install Libapache2-MOD-PHP # Servicio APOCHE2 Inicio 
Copiar

Página predeterminada de Apache Debian.

Ahora confirmemos que PHP está ahí. Puedes ir a /var/ww/html Dentro del contenedor, o salga del shell del contenedor y escriba desde el directorio actual en su sistema operativo host (recuerde que asignamos el directorio actual en /var/www/html Dentro del contenedor?)

$ echo "> phpinfo.php 

Y voilá (http: // localhost: 8000/phpinfo.php).

Información de PHP.

Comprometiéndose con una imagen

Como se mencionó anteriormente, los cambios realizados en el contenedor persisten mientras el contenedor persista, y se espera que los contenedores sean efímeros: están hechos para ser destruidos. Se deben hacer modificaciones duraderas en imágenes.

El próximo artículo mostrará cómo crear una imagen personalizada de manera elegante (y muy recomendable), utilizando un DockerFile. Por ahora, aprenderá un truco que puede ser útil en situaciones específicas en las que no es posible o deseable escribir un Dockerfile. Extender las imágenes con un archivo de Docker si se prefiere porque se puede editar fácilmente mientras cometiendo el estado del contenedor a una nueva imagen no deja rastro de los cambios realizados a menos que se realice un laborioso análisis de la capa del sistema de archivos.

El comando Docker Commit tiene dos parámetros: nombre del contenedor y nuevo nombre de imagen y creará una nueva imagen en el caché de imágenes locales basado en el contenedor. En el comando a continuación, debian_container es el nombre del contenedor y Debian-apache-php es el nuevo nombre de la imagen.

$ Docker Commit Debian_Container Debian-Apache-Php SHA256: 3F01C0C71539C4DC6DFD7483FF68C41143B7E9AB52DE4A9892C8CC136EDA236 
Copiar

Listado de imágenes en el caché del host.

$ Docker Images Repositorio de etiqueta ID de imagen Tamaño de Debian-Aapache-Php Último 3F01C0C71539 Hace 10 minutos 235 MB de Debian Último BE2868BEBABA 11 días hace 101 MB 
Copiar

Observe que hay una nueva imagen en su anfitrión. Una característica interesante de la gestión de la imagen y el contenedor es que Docker solo almacenará la diferencia de estado del disco entre la imagen actual y la imagen en la que se basa, por lo que no se desperdicia espacio de disco redundante. Para esto, Docker usa un sistema de archivos en capas que usa el enfoque de copia en escritura: cuando se crea un nuevo contenedor, hereda el mismo disco de la imagen y, a medida que se realizan modificaciones a los archivos, se escriben en una nueva capa.



Inspección de contenedores

Docker mantiene mucha información sobre los objetos de Docker. El comando Docker inspeccionar se usa para verlos.

$ Docker Inspect Debian_Container 

El comando recuperará un objeto JSON con decenas de líneas que detallen el estado del contenedor: ID de contenedor, fecha creada, estado, imagen, ruta de registro, puertos, volúmenes, redes, etc.

Poda de contenedores e imágenes

Después de jugar con contenedores e imágenes, el disco del anfitrión eventualmente se llenará de entidades abandonadas que deben limpiarse para que pueda recuperar el espacio de disco.

El comando Prune de contenedores Docker eliminará todos los contenedores detenidos. Tenga cuidado: una vez que se elimina el contenedor, se pierde cualquier estado asociado. Haga una copia de seguridad o comprometa cambios en una imagen antes.

El comando poda de imagen de Docker eliminará todas las imágenes no utilizadas. Aún no hemos construido imágenes, pero este comando será útil en el próximo artículo.

Conclusión

En este artículo, aprendió cómo interactuar con los contenedores y cómo cometer cambios en las imágenes, aunque no se recomienda este enfoque.

En el siguiente artículo, creará sus propias imágenes con DockerFile, la forma recomendada de personalizar las imágenes de Docker.

Más en esta serie de artículos de Docker

  • Una introducción práctica a los contenedores Docker
  • Cómo personalizar las imágenes de Docker con DockerFiles

Tutoriales de Linux relacionados:

  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cosas para instalar en Ubuntu 20.04
  • Mastering Bash Script Loops
  • Cómo crear una pila de lámparas basada en Docker usando Docker en ..
  • Linux Apache no ejecuta archivos PHP: solución
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Instalación de WordPress OpenLitespeed
  • Cómo instalar PHP en Ubuntu Linux
  • Instalación de ampache Raspberry Pi