Personalizando los contenedores

  • Enviado por: administrador

Personalizando los contenedores

Poco a poco he ido mostrando conceptos básicos de contenedores en entregas anteriores. Ya estamos en el punto en el que sabemos más de contenedores y un poco más acerca de sus conceptos básicos.

Ya hemos descargado imágenes del Docker Store para que su ejecuten. Además, en la entrega pasada pudimos aislar cada instancia de las demás.

Ahora quiero dar un paso más explicando cómo personalizar los contenedores a través de un archivo de configuración y además cómo guardar cambios que se hagan sobre dichos contenedores.

Si bien hay más de 700.000 imágenes en el Docker Store, probablemente ninguna de ellas es exactamente como la necesita para cubrir sus necesidades, imágenes como las de Windows y Linux ya son una base, pero deben ser ajustadas a lo que usted requiere.

Hasta ahora hemos usado imágenes de Linux Alpine. Por ejemplo, si yo cambio la configuración de una imagen o contenedor de Alpine y quiero reutilizarla con esos cambios que realicé, debo tomar acciones para que este cambio quede de manera permanente, eso lo vamos a explicar en esta entrega.

El objetivo de estos cambios y personalización es tener imágenes que pueda reutilizar y compartir con otros, si así lo considero.

Bueno, ¡Manos a la obra!

Empecemos con una imagen de Ubuntu:

docker container run -ti ubuntu bash

Bueno, no tenía la imagen localmente y simplemente se descargó del Docker Store, esto ya es algo que vimos en ocasiones anteriores.

Vamos a personalizar la imagen para agregar cambios sobre la misma:

apt-get update

El comando apt-get update sirve para mantener actualizado el sistema operativo Ubuntu y descargar de un repositorio que contiene los paquetes actualizados las últimas versiones de dichos paquetes.

Vamos a instalar un paquete que no viene en esta imagen de Ubuntu que se denomina figlet, usando el comando apt-get install -y figlet

Como le pusimos la opción -y lo instalará sin pedir confirmación.

Ahora vamos a ejecutar figlet «Hola Docker»

El paquete figlet ya está instalado en nuestro contenedor, y es el que permite mostrar el aviso “Hola Docker” tal como se ve en la imagen.

Ahora nos salimos del contenedor con exit.

Supongamos que el paquete figlet es útil para nuestro equipo de desarrollo. Una opción podría ser decirle al resto del equipo que lo instale de la misma manera que lo acabamos de hacer, pero en la vida real un paquete o aplicación que lleguemos a necesitar puede implicar la instalación de varias dependencias y paquetes y puede ser un proceso complejo que puede generar varios errores y demoras.

A cambio de eso, sería más fácil crear una imagen con el paquete o las aplicaciones que requiero y luego compartirlas con el equipo.

Ya tengo un contenedor con el paquete (en este caso figlet), lo que debo hacer ahora es identificar el ID del contenedor, para ello uso el comando docker container ls -a

Ahora ya identificamos que el ID de nuestro contenedor es 938c72306d9f

Podemos ver qué cambios se han hecho sobre el contenedor usando el comando

docker container diff <container ID>

En nuestro caso particular el comando sería el siguiente:

docker container diff 938c72306d9f

El resultado del comando es largo, pero quise resaltar que en la salida de dicho comando aparece la cadena “figlet”, que indica que previamente se instaló dicho paquete en nuestro contenedor.

Aquí se introduce un concepto fundamental en Docker y es el de layer (o capa), del que ya vamos a hablar en otra entrega, pero aquí hay que decir que Docker lleva un control de los cambios que se hagan en nuestros contenedores.

Si cierro mi ambiente y me salgo de mi sesión los cambios realizados sobre el contenedor se perderán, de modo que debo hacer un commit de estos cambios para no perderlos.

Ello se hace usando el comando docker container commit CONTAINER_ID

Para nuestro ejemplo, el comando sería docker container commit 938c72306d9f

Vamos a listar las imágenes usando docker image ls

Observen que la imagen de Ubuntu que jalamos (pull) anteriormente, también aparece listada con nuestra imagen personalizada (a la que le instalamos el figlet).

Nuestra imagen personalizada no tiene Información en las columnas REPOSITORY o TAG, lo cual puede hacer difícil la identificación del contenedor que queremos compartir con nuestro equipo de trabajo.

Para facilitar esta identificación existe lo que se denominan TAGS (marca), y lo que haremos es ponerle un TAG a nuestra imagen.

Del comando docker image ls podemos identificar el ID de la imagen y así ponerle una marca o TAG, para este ejemplo vamos a marcar la imagen como ourfiglet usando el comando docker image tag c9cd18e67e3d ourfiglet

Ahora si vuelvo a listar mis imágenes, ya veo la marca o TAG de mi imagen:

Lo que en realidad pasó al ponerle una marca o TAG a la imagen se muestra a continuación (Imagen tomada de https://training.play-with-docker.com/ops-s1-images/ )

Ahora podemos ejecutar un contenedor basado en la nueva imagen denominada ourfiglet de la siguiente manera:

docker container run ourfiglet figlet Hola Docker

Y observen la salida del comando, no fue necesario ingresar a la consola de la imagen Ubuntu para tener este resultado.

A mí parece muy fascinante todo esto y espero que a ustedes también.

En la próxima entrega voy a hablar de las capas o layers de Docker, que es un concepto muy importante y que es fundamental en esta tecnología.

¡No se pierdan la próxima entrega! Un abrazo para todos.

Autor: administrador