Cómo empezar con las imágenes Docker preconstruidas
Las imágenes son el componente fundamental de Docker. En esta guía, hablaremos de qué son las imágenes Docker, cómo construirlas, cómo gestionarlas y cómo utilizarlas.
Empecemos.
Requisitos previos
- Antes de empezar a utilizar las imágenes Docker, tienes que instalar Docker en tu sistema.
- Esta guía utiliza Ubuntu, pero los pasos deberían ser similares para otras distribuciones.
- Una cuenta de usuario con privilegios de root.
¿Qué debes saber?
Antes de empezar a trabajar con las imágenes Docker, es importante que sepas lo que son.
Las imágenes Docker son los componentes fundamentales de Docker. Docker utiliza imágenes para crear contenedores. Las imágenes son esencialmente plantillas que contienen toda la información necesaria para crear un contenedor, como el código, las bibliotecas y el tiempo de ejecución.
Un contenedor Docker es una instancia de tiempo de ejecución de una imagen. Contiene todo lo que contiene la imagen, además de cualquier cambio o adición que realices mientras el contenedor se está ejecutando. Por ejemplo, si instalas una nueva aplicación en tu sistema, la nueva aplicación se instalará en tu contenedor.
Gestionar las imágenes con la CLI
Gestionar las imágenes con la CLI de Docker es una necesidad para los administradores de Docker. La CLI de Docker es una potente herramienta que te da un control total sobre tus imágenes y contenedores. En esta sección, aprenderás a utilizar la CLI de Docker para gestionar tus imágenes.
1. Ejecuta el siguiente comando para asegurarte de que Docker se está ejecutando.
sudo systemctl status docker
2. Si Docker no se está ejecutando, inícialo con el siguiente comando.
sudo systemctl start docker
3. Añade tu cuenta de usuario al grupo Docker. Cierra la sesión y vuelve a iniciarla para que los cambios surtan efecto.
sudo usermod -aG docker $(whoami)
4. Si ejecutas el comando docker image, verás una lista de todas las opciones disponibles para el comando docker image.
docker image
Como se muestra a continuación, el comando docker image tiene muchas opciones, pero algunas de las más utilizadas son
- ls: Lista las imágenes de tu sistema.
- pull: Saca una imagen de un registro.
- push: Empujar una imagen a un registro.
- crear: Crea una nueva imagen a partir de un archivo Docker.
- rm: Eliminar una imagen de tu sistema.
- etiquetar: Etiquetar una imagen con un nombre.
Para empezar, veamos cómo listar las imágenes de tu sistema.
5. Ejecuta el comando docker image ls para listar las imágenes de tu sistema. El comando docker image ls enumera todas las imágenes de tu servidor, incluyendo los repositorios de los que se han extraído. El ID, el repositorio, la etiqueta y el tamaño de la imagen.
docker image ls
Supón que quieres eliminar una imagen de tu anfitrión. Puedes utilizar el comando rm. Puedes utilizar el nombre de la imagen o el ID de la misma para eliminarla.
docker image rm <image-name>
docker image rm <image-id>
En caso de que utilices el ID, asegúrate de que los primeros caracteres del ID son únicos para las imágenes de la lista. En otras palabras, las primeras letras del ID no deben ser utilizadas por ninguna otra imagen.
6. Por ejemplo, para eliminar la imagen ubuntu:12.04, puedes utilizar cualquiera de los siguientes comandos. Ten en cuenta que sólo podemos utilizar los primeros caracteres del ID(5b1) para eliminar la imagen, ya que no hay otras imágenes con esos primeros caracteres.
docker image rm ubuntu:12.04
docker image rm 5b1
La imagen ubuntu:12.04 se eliminará de tu host junto con todas las capas que se utilicen para crear la imagen, como se muestra a continuación.
7. Vuelve a listar las imágenes de tu sistema para comprobar que la imagen ubuntu:12.04 ya no aparece en la lista.
docker image ls
Ten en cuenta que el comando docker image ls y el comando docker images hacen exactamente lo mismo. Sin embargo, el segundo está ahora obsoleto ya que Docker prefiere que los desarrolladores utilicen el comando docker con sus subcomandos correctos.Lo mismo ocurre con el comando docker rmi. Este comando se utiliza para eliminar una imagen y todas sus capas exactamente igual que docker image rm. Docker recomienda utilizar docker rm con sus subcomandos correctos.
docker image ls
docker images
Tenemos la misma salida.
Hasta ahora, has eliminado una imagen no utilizada a la vez. ¿Y si quieres eliminar dos o más imágenes no utilizadas al mismo tiempo?
Aquí es donde resulta útil el comando de poda. El comando prune puede utilizarse para eliminar todas las imágenes no utilizadas de tu servidor de una sola vez. Puedes utilizar el comando prune para eliminar todas las imágenes colgantes, todas las imágenes no utilizadas, o una combinación de ambas. Las imágenes colgantes son aquellas que no tienen al menos un contenedor asociado.
8. Ejecuta el comando docker image prune para eliminar todas las imágenes no utilizadas/colgantes de tu sistema.
docker image prune
Como puedes ver, el comando prune eliminó todas las imágenes no utilizadas y sus capas de tu host y te ahorró mucho espacio en disco en el proceso.
9. Vuelve a listar las imágenes en tu host para verificar que las imágenes han desaparecido realmente. Ahora que sabes cómo listar, eliminar y podar imágenes de tu host. Estos comandos básicos te ayudarán a mantener tu sistema limpio y organizado.
docker image ls
Inspección de las imágenes Docker
Puede que pienses que las imágenes y los contenedores Docker son cajas negras místicas. Te preguntarás qué tipo de magia ocurre en su interior. En esta sección, disipamos parte del misticismo echando un vistazo a lo que hay en una imagen Docker y cómo puedes utilizar esa información en tu beneficio.
1. Docker ofrece una forma de inspeccionar el contenido de una imagen. El comando docker inspect toma una ruta a una imagen e imprime una gran cantidad de información sobre ella, como se muestra en el siguiente ejemplo.
docker inspect ubuntu
Como se muestra a continuación, la salida del comando anterior contiene mucha información. Aquí estás viendo toda la información en un formato llamado matriz JSON.
La información de la salida se muestra como un almacén de valores clave. Puedes utilizar una herramienta de Linux como la tubería (|) para buscar en la salida una palabra clave específica. Luego, puedes utilizar la salida canalizada para cualquier propósito que desees. Los siguientes ejemplos demuestran cómo puedes utilizarlo.
2. Ejecuta el siguiente comando para guardar la salida del comando docker inspect en un archivo llamado image-inspect.txt.
docker image inspect ubuntu > image-inspect.txt
3. A continuación, utiliza un editor de tu elección para abrir el archivo e inspeccionar su contenido.
sudo nano image-inspect.txt
La salida del comando docker inspect contiene una gran cantidad de información sobre una imagen, como se muestra a continuación. Dentro del editor, puedes navegar fácilmente como desplazarte hacia arriba/abajo por el editor para inspeccionar la diferente información. Puedes editar la información si lo deseas.
También puedes utilizar el argumento –format para dar un formato específico a la salida.
4. Por ejemplo, para imprimir el ID de la imagen de ubuntu, puedes utilizar el siguiente comando.
docker image inspect ubuntu --format='{{.ID}}'
5. Enumera la imagen para verificar el ID de la misma.
docker image ls
6. Ejecuta el siguiente comando para canalizar la salida del comando docker inspect al comando more. Esto te permitirá paginar la salida para que puedas ver toda la información que contiene.
docker image inspect ubuntu | more
Esta vez, verás el nombre del host(b32714f341a6) en la sección ContainerConfig, como se muestra a continuación.
7. ¿Qué pasa si sólo quieres el valor del nombre del host (b32714f341a6)? Puedes conseguirlo ejecutando el siguiente comando.
docker image inspect ubuntu --format='{{.ContainerConfig.Hostname}}'
Como puedes ver, puedes utilizar el comando docker inspect con las herramientas de Linux para hacer algún filtro más. Como un rango. Por ejemplo, para listar todas las direcciones IP del rango 192.168.0.0/16. E incluso puedes combinarlo con otras herramientas de scripting para hacer cosas aún más interesantes.
Uso de las etiquetas Docker
A medida que sigas trabajando con imágenes Docker, querrás empezar a utilizar etiquetas. Las etiquetas te permiten identificar y gestionar fácilmente tus imágenes. Por ejemplo, puedes crear una etiqueta para cada entorno en el que se utilice una imagen, o para cada cliente o clienta para la que se utilice una imagen. Esto facilita la búsqueda de la imagen específica que necesitas, y el seguimiento de qué imágenes se han utilizado para qué fines.
La sintaxis para añadir una etiqueta a una imagen es la siguiente:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Tu etiqueta puede ser cualquier cadena ASCII válida, y puede contener letras minúsculas y mayúsculas, dígitos, guiones bajos, puntos y guiones. No puede comenzar con un punto o un guión, y no debe superar los 128 caracteres de longitud. Veamos un ejemplo.
1. Para añadir una etiqueta a una imagen, primero necesitamos saber el nombre o el ID de la imagen que queremos etiquetar. Podemos listar todas las imágenes disponibles en nuestro sistema ejecutando el siguiente comando:
docker image ls
2. Ahora ejecuta el siguiente comando para añadir la etiqueta «myubuntu» a la imagen.
docker tag ubuntu:latest ubuntu:myubuntu
3. Ahora, si volvemos a ejecutar el comando docker image ls, podemos ver que nuestra imagen ha sido etiquetada con «myubuntu».
Ten en cuenta que las etiquetas son sólo alias. Esto significa que una imagen puede tener varias etiquetas, pero todas ellas remiten a la misma imagen de origen. Así que puedes usar la etiqueta que quieras, siempre que tenga sentido para ti. Y es una buena idea añadir etiquetas cuando creas imágenes para que puedas seguirlas fácilmente después.
4. Veamos un ejemplo más. Supongamos que queremos crear una imagen de Ubuntu con la etiqueta «original». Podemos hacerlo ejecutando el siguiente comando:
docker tag myubuntu:latest myubuntu:original
El comando anterior creará una imagen etiquetada con «original» que se basa en la imagen etiquetada con «latest». Ahora tenemos dos imágenes de myubuntu: una etiquetada con «latest « y otra etiquetada con «original», pero apuntan al mismo ID de imagen de origen(2b4cba85892a).
Trabajar con los registros de Docker
Ahora que tenemos una comprensión básica de lo que son las imágenes Docker, vamos a echar un vistazo al trabajo con los registros. Docker Hub es el registro público más popular, pero hay otras opciones disponibles.
Docker Hub es un registro público de uso gratuito tanto para fines personales como comerciales. Tiene una gran variedad de imágenes disponibles, y también puedes crear tus propias imágenes y compartirlas con otros. Para utilizar Docker Hub, sólo tienes que crear una cuenta y luego instalar el cliente Docker. A continuación, puedes utilizar el comando docker search para encontrar imágenes, y el comando docker pull para descargarlas.
Hasta ahora, hemos trabajado con la imagen de ubuntu que está disponible en Docker Hub, un registro público de Docker. Sin embargo, también puedes crear un registro privado para almacenar tus imágenes.
Desplegar un registro Docker privado
Hay algunas razones por las que puedes querer utilizar un registro privado:
- Para almacenar imágenes que son sólo para uso interno.Tal vez tengas imágenes que contienen información sensible y no quieres que estén disponibles públicamente. O tal vez quieras llevar un registro de las imágenes que se han utilizado en tu entorno y no quieras que otros puedan descargarlas sin tu permiso.
- Acelerar las descargas de imágenes en tu canal de distribución CI/CD almacenándolas en la caché local. Ejecutar tu propio registro y almacenarlo por tu cuenta es una excelente manera de vincularlo con tu sistema CI/CD y mejorarlo.
1. Comprueba si tu host docker está preparado para crear un registro local.
docker version
2. Ejecuta el siguiente comando docker run para tener un registro local y privado en funcionamiento. Donde:
- -p 5000:5000 = asigna el puerto 5000 del host docker al puerto 5000 del contenedor
- –restart=always = garantiza que el contenedor se reinicie siempre si falla
- –name registry = nombre de tu registro privado
- registry:2 = la imagen que se utilizará para crear el contenedor de registro
docker run -d -p 5000:5000 --restart=always --name registry registry:2
3. Ejecuta el siguiente comando para listar todos los contenedores que se están ejecutando en tu host docker.
docker ps
Verás la siguiente salida. Esta salida indica que el contenedor de registro está en funcionamiento en tu servidor Docker. La notación :::5000->5000/tcp es un atajo que asigna el puerto del servidor Docker al puerto del contenedor de registro.
Ahora que tenemos nuestro registro privado en funcionamiento, vamos a ver cómo añadir imágenes a él. El siguiente ejemplo muestra cómo añadir la imagen de ubuntu al registro. En primer lugar, tendrás que sacar la imagen de Docker Hub a tu host local y darle una etiqueta específica. A continuación, empujarás la imagen recién etiquetada a tu registro privado. Por último, elimina la imagen de ubuntu de tu host local y saca la imagen de tu registro privado para probarla.
4. Ejecuta el siguiente comando para descargar la imagen de ubuntu con la etiqueta 20.04 desde Docker Hub a tu host local.
docker image pull ubuntu:20.04
5. A continuación, ejecuta el siguiente comando para etiquetar la imagen de Ubuntu descargada como «mi-ubuntu». Puedes utilizar cualquier etiqueta que quieras, pero es una buena idea utilizar algo que tenga sentido para tu organización.
docker tag ubuntu:20.04 localhost:5000/my-ubuntu
6. Ejecuta el siguiente comando para enviar la imagen recién etiquetada a tu registro privado que se ejecuta en el puerto localhost:5000.
docker push localhost:5000/my-ubuntu
7. Ejecuta el siguiente comando para eliminar las imágenes de ubuntu almacenadas localmente en tu localhost para probar tu registro privado.
docker image remove ubuntu:20.04 && docker image remove localhost:5000/my-ubuntu
8. Una vez eliminadas las imágenes de ubuntu almacenadas localmente, puedes ejecutar el siguiente comando para extraer la imagen de tu registro privado.
docker pull localhost:5000/my-ubuntu
9. Ejecuta el siguiente comando para listar todas las imágenes de tu docker host.
docker image ls
Verás que la imagen my-ubuntu aparece como extraída de tu registro privado, como se muestra a continuación. Este resultado confirma que la imagen se ha extraído con éxito de tu registro privadoy que éste funciona correctamente.
Enviar, extraer y firmar imágenes
Docker ofrece algunas opciones de línea de comandos para empujar, tirar y buscar imágenes. En esta sección, aprenderás a utilizar esos comandos para gestionar tus imágenes en los registros desde la línea de comandos en tu host. Este ejemplo utiliza el Docker Hub para demostrarlo, pero podrías utilizar cualquier otro registro.
1. Ejecuta el comando docker login para entrar en el registro Docker Hub. Proporciona tu nombre de usuario y contraseña cuando se te pida. Si no tienes una cuenta Docker Hub, puedes crear una gratis en https://hub.docker.com/.
docker login
2. Una vez que hayas iniciado la sesión, estarás listo para enviar tus imágenes. Supongamos que quieres enviar la última imagen de Ubuntu al Docker Hub. También debes etiquetar la imagen con un nombre significativo para que puedas referenciarla fácilmente en el futuro. En este ejemplo, etiquetarás la imagen como howtoforge/ubuntu:latest. Siéntete libre de utilizar el nombre de etiqueta que desees.
docker tag ubuntu:latest howtoforge/ubuntu:latest
docker push howtoforge/ubuntu:latest
3.Abre tu navegador web y navega hasta el Docker Hub. Allí verás tu imagen.Este repositorio se ha creado en función de tu nombre de usuario y de la etiqueta que has utilizado. En este ejemplo, el repositorio es howtoforge/ubuntu. Navega hasta la pestaña de la etiqueta y verás que tu etiqueta se ha aplicado con éxito(la más reciente).
4. Ejecuta el siguiente comando para eliminar la imagen local de ubuntu para probar el pull.
docker image rm howtoforge/ubuntu
Enumera las imágenes de tu sistema para verificar que la imagen de ubuntu fue eliminada.
docker image ls
5. Ejecuta el siguiente comando paradescargar la imagen my-ubuntu de tu Docker Hub.
docker pull howtoforge/ubuntu
6. Vuelve a listar las imágenes de tu sistema para verificar que la imagen de ubuntu ha sido extraída. Deberías ver la imagen my-ubuntu en tu sistema.
docker image ls
Mientras trabajas con las imágenes, puede que quieras buscar imágenes específicas en los registros de Docker. Puedes utilizar el comando docker search para buscar imágenes en los registros Docker.
7. Ejecuta el comando docker search para ver todas las opciones y parámetros disponibles.
man docker search
Deberías ver la siguiente salida. Puedes ver útiles opciones de filtrado como
- stars=: filtra los resultados de la búsqueda por el número de estrellas que tiene la imagen en Docker Hub. Puedes utilizarlo para encontrar las imágenes más populares.
- is-automated=(true|false): filtra los resultados de la búsqueda para incluir o excluir las construcciones automatizadas. Puedes utilizarlo para encontrar imágenes que sean o no construcciones automatizadas.
- is-official=(true|false): filtra los resultados de la búsqueda para incluir o excluir las imágenes oficiales. Puedes utilizarlo para encontrar imágenes que sean oficiales y estén respaldadas por la empresa que las produce. Por ejemplo, Ubuntu es la empresa oficial detrás de la imagen de Ubuntu. Nginx es la empresa oficial detrás de la imagen de Nginx. Siempre que sea posible, debes utilizar imágenes oficiales, ya que han sido probadas por la empresa y es más probable que sean estables. Si tienes problemas con una imagen oficial, puedes obtener ayuda de la empresa que la proporciona.
8. Por ejemplo, ejecuta el comando docker search –filter=stars=4 ubuntu para buscar la imagen de ubuntu con 4 o más estrellas en Docker Hub.
docker search --filter=stars=4 ubuntu
9. Ejecuta el siguiente comando para buscar la imagen de ubuntu que sea una imagen oficial de Ubuntu.
docker search --filter=is-official=true ubuntu
La salida debería ser una lista de repositorios que contienen la imagen de ubuntu e indica que es una imagen oficial de Ubuntu(OK), como se muestra a continuación.
10. Ejecuta el siguiente comando para buscar la imagen de ubuntu que tenga al menos 100 estrellas de valoración en Docker Hub y que sea una imagen oficial de Ubuntu.
docker search --filter="stars=100" --filter=is-official=true ubuntu
Las imágenes Docker son una gran manera de almacenar el código y la configuración de tu aplicación. Pero al mismo tiempo, es fácil acumular un montón de imágenes sin usar, sobre todo si estás probando diferentes aplicaciones o probando diferentes configuraciones. Puede que descubras que ya no necesitas algunas de las imágenes de tus registros.
Puedes eliminar una imagen navegando hasta el repositorio que la contiene y haciendo clic en el botón de eliminar.
11. Por ejemplo, en Docker Hub, navega hasta el repositorio howtoforge/ubuntu. Haz clic en Configuración > Eliminar Repositorio. Confirma que quieres eliminar el repositorio escribiendo el nombre del mismo. Haz clic en Eliminar.
Vuelve al panel de control y verás que el repositorio howtoforge/ubuntu se ha eliminado junto con la imagen de ubuntu.
Conclusión
¡Enhorabuena! Has llegado al final del artículo. Ahora deberías tener una comprensión básica de las imágenes Docker y de cómo trabajar con ellas. Si quieres aprender más sobre Docker, te sugerimos que leas la documentación oficial de Docker, donde podrás encontrar más información sobre temas como
- Dockerfiles
- Redes
- Volúmenes
- Servicios
- Modo enjambre