Introducción
Docker es una herramienta de contenerización popular utilizada para proporcionar a las aplicaciones de software un sistema de archivos que contiene todo lo que necesitan para ejecutarse. El uso de contenedores Docker asegura que el software se comporte de la misma manera, independientemente de dónde se implemente, porque su entorno de ejecución es consistentemente riguroso.
En este tutorial, proporcionaremos una breve descripción general de la relación entre las imágenes de Docker y los contenedores de Docker. Luego, examinaremos más detalladamente cómo ejecutar, iniciar, detener y eliminar contenedores.
Descripción general
Podemos pensar en una imagen de Docker como una plantilla inerte utilizada para crear contenedores de Docker. Las imágenes generalmente comienzan con un sistema de archivos raíz y agregan cambios en el sistema de archivos y sus parámetros de ejecución correspondientes en capas ordenadas y de solo lectura. A diferencia de una distribución de Linux típica, una imagen de Docker normalmente contiene solo lo esencial necesario para ejecutar la aplicación. Las imágenes no tienen estado y no cambian. En cambio, forman el punto de partida para los contenedores de Docker.
Las imágenes cobran vida con el comando docker run
, que crea un contenedor agregando una capa de lectura-escritura encima de la imagen. Esta combinación de capas de solo lectura con una capa de lectura-escritura se conoce como un sistema de archivos de unión. Cuando se realiza un cambio en un archivo existente en un contenedor en ejecución, el archivo se copia fuera del espacio de solo lectura hacia la capa de lectura-escritura, donde se aplican los cambios. La versión en la capa de lectura-escritura oculta el archivo original pero no lo elimina. Los cambios en la capa de lectura-escritura existen solo dentro de una instancia de contenedor individual. Cuando se elimina un contenedor, se pierden cualquier cambio a menos que se tomen medidas para preservarlos.
Cómo trabajar con contenedores Docker
Trabajando con Contenedores
Cada vez que utilizas el comando docker run
, crea un nuevo contenedor a partir de la imagen que especifiques. Esto puede ser una fuente de confusión, así que echemos un vistazo con algunos ejemplos:
Paso 1: Crear Dos Contenedores
El siguiente comando docker run
creará un nuevo contenedor utilizando la imagen base ubuntu
. -t
nos dará un terminal, y -i
nos permitirá interactuar con él. Confiamos en el comando predeterminado en el archivo Docker de la imagen base Ubuntu, bash
, para dejarnos en un shell.
El indicador de línea de comandos cambia para indicar que estamos dentro del contenedor como usuario root, seguido por el ID del contenedor de 12 caracteres.
Haremos un cambio escribiendo algún texto en el directorio /tmp
del contenedor, luego usaremos cat
para verificar que se guardó correctamente.
OutputExample1
Ahora, salgamos del contenedor.
Los contenedores de Docker dejan de ejecutarse tan pronto como se completa el comando que emitieron, por lo que nuestro contenedor se detuvo cuando salimos del shell de bash. Si ejecutamos docker ps
, el comando para mostrar los contenedores en ejecución, no veremos el nuestro.
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Si agregamos la bandera -a
, que muestra todos los contenedores, detenidos o en ejecución, entonces nuestro contenedor aparecerá en la lista:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi
Cuando se creó el contenedor, se le asignó su ID de contenedor y un nombre generado aleatoriamente. En este caso, 11cc47339ee1 es el ID del contenedor y small_sinoussi
es el nombre generado aleatoriamente. ps -a
muestra esos valores, así como la imagen desde la cual se construyó el contenedor (ubuntu
), cuándo se creó el contenedor (hace seis minutos
), y el comando que se ejecutó en él (/bin/bash
). La salida también proporciona el estado del contenedor (Exited
) y cuánto tiempo hace que el contenedor entró en ese estado (hace 6 segundos
). Si el contenedor todavía estuviera en ejecución, veríamos el estado “Up”, seguido de cuánto tiempo ha estado en ejecución.
Si volvemos a ejecutar el mismo comando, se crea un contenedor completamente nuevo:
Podemos decir que es un nuevo contenedor porque el ID en el indicador de comando es diferente, y cuando buscamos nuestro archivo Example1, no lo encontraremos:
Outputcat: /tmp/Example1: No such file or directory
Esto puede hacer que parezca que los datos han desaparecido, pero ese no es el caso. Ahora saldremos del segundo contenedor para ver que este, y nuestro primer contenedor con el archivo que creamos, ambos están en el sistema.
Cuando enumeramos los contenedores nuevamente, ambos aparecen:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg
11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi
Paso 2: Reiniciar el Primer Contenedor
Para reiniciar un contenedor existente, usaremos el comando start
con la bandera -a
para adjuntarnos a él y la bandera -i
para hacerlo interactivo, seguido por el ID o nombre del contenedor. Asegúrate de sustituir el ID de tu contenedor en el comando a continuación:
Nos encontramos de nuevo en el símbolo del sistema bash del contenedor y cuando ejecutamos cat
en el archivo que creamos anteriormente, todavía está allí.
OutputExample1
Ahora podemos salir del contenedor:
Esta salida muestra que los cambios realizados dentro del contenedor persisten al detenerlo y reiniciarlo. Solo se elimina el contenido cuando se elimina el contenedor. Este ejemplo también ilustra que los cambios se limitaron al contenedor individual. Cuando iniciamos un segundo contenedor, reflejaba el estado original de la imagen.
Paso 3: Eliminar Ambos Contenedores
Hemos creado dos contenedores y concluiremos nuestro breve tutorial eliminándolos. El comando docker rm
, que solo funciona en contenedores detenidos, te permite especificar el nombre o el ID de uno o más contenedores, así que podemos eliminar ambos con lo siguiente:
Output11cc47339ee1
kickass_borg
Ambos contenedores y cualquier cambio que hicimos dentro de ellos, ahora han desaparecido.
Conclusión
Hemos analizado detalladamente el comando docker run
para ver cómo crea automáticamente un nuevo contenedor cada vez que se ejecuta. También hemos visto cómo localizar un contenedor detenido, iniciarlo y conectarnos a él. Si deseas aprender más sobre la gestión de contenedores, podrías estar interesado en la guía, Nombrar Contenedores Docker: 3 Consejos para Principiantes.
Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers