¿Cómo extraer una imagen de Docker?

DockerBeginner
Practicar Ahora

Introducción

Docker ha revolucionado la forma en que desarrollamos, implementamos y gestionamos aplicaciones. En el corazón de este ecosistema se encuentran las imágenes de Docker, que sirven como los bloques de construcción para crear y ejecutar aplicaciones en contenedores. En este tutorial, le guiaremos a través del proceso de extracción (pulling) de imágenes de Docker desde un registro (registry), un paso crucial para aprovechar el poder de Docker en sus proyectos.

Al final de este laboratorio, podrá buscar imágenes de Docker, extraerlas (pull) de Docker Hub y comprender cómo usarlas en sus aplicaciones en contenedores.

Entendiendo las Imágenes de Docker

Antes de comenzar a extraer (pulling) imágenes de Docker, es importante entender qué son las imágenes de Docker y cómo funcionan.

¿Qué es una Imagen de Docker?

Una imagen de Docker es un paquete ligero e independiente que contiene todo lo necesario para ejecutar una aplicación:

  • Código de la aplicación
  • Entorno de ejecución
  • Bibliotecas y dependencias
  • Variables de entorno
  • Archivos de configuración

Las imágenes son las plantillas utilizadas para crear contenedores de Docker, que son las instancias en ejecución de estas imágenes.

Repositorios de Imágenes de Docker

Las imágenes de Docker se almacenan en repositorios dentro de los registros (registries). El registro público más popular es Docker Hub, que alberga miles de imágenes listas para usar. Algunos puntos clave sobre Docker Hub:

  • Contiene imágenes oficiales mantenidas por los proveedores de software
  • Aloja imágenes contribuidas por la comunidad, creadas por usuarios
  • Permite a las organizaciones tener repositorios privados para imágenes propietarias

Nomenclatura de las Imágenes de Docker

Las imágenes de Docker siguen una convención de nomenclatura específica:

[registry/]username/repository:tag

Donde:

  • registry es el nombre de host del registro (opcional, por defecto es Docker Hub)
  • username es el nombre de usuario o nombre de la organización en Docker Hub
  • repository es el nombre de la imagen
  • tag es la versión de la imagen (opcional, por defecto es "latest")

Por ejemplo: ubuntu:22.04 o nginx:latest

Verificando la Instalación de Docker

Antes de continuar, asegurémonos de que Docker esté correctamente instalado en su sistema. Abra una terminal y ejecute:

docker --version

Debería ver una salida similar a:

Docker version 20.10.21, build baeda1f

Esto confirma que Docker está instalado y listo para usar.

En el siguiente paso, buscaremos y extraeremos (pull) nuestra primera imagen de Docker.

Buscando y Extrayendo (Pulling) su Primera Imagen de Docker

Ahora que entendemos qué son las imágenes de Docker, aprendamos a encontrarlas y extraerlas (pull) desde Docker Hub.

Buscando Imágenes de Docker

Antes de extraer (pull) una imagen, es posible que desee buscar las opciones disponibles. Use el comando docker search para encontrar imágenes en Docker Hub:

docker search ubuntu

Esto le mostrará una lista de imágenes relacionadas con Ubuntu disponibles en Docker Hub. Debería ver una salida similar a:

NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating s...   14938     [OK]
ubuntu-upstart                   Upstart is an event-based replacement for ...   111       [OK]
rastasheep/ubuntu-sshd           Dockerized SSH service, built on top of of...   256                  [OK]
...

La columna OFFICIAL marcada con [OK] indica imágenes mantenidas por Docker o el proveedor de software.

Extrayendo (Pulling) una Imagen de Docker

Para descargar una imagen de Docker a su máquina local, use el comando docker pull seguido del nombre de la imagen:

docker pull ubuntu:22.04

Este comando extrae (pull) la imagen de Ubuntu 22.04 desde Docker Hub. Debería ver un progreso de descarga similar a:

22.04: Pulling from library/ubuntu
2ab09b027e7f: Pull complete
Digest: sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04

La salida muestra que Docker está descargando capas individuales de la imagen. Cada capa representa un conjunto de cambios en el sistema de archivos.

Extrayendo (Pulling) Imágenes sin una Etiqueta (Tag)

Si no especifica una etiqueta (tag), Docker extraerá (pull) la imagen etiquetada como latest:

docker pull nginx

Esto extraerá (pull) la última versión de la imagen del servidor web Nginx:

Using default tag: latest
latest: Pulling from library/nginx
a603fa5e3b41: Pull complete
(...more layers...)
Digest: sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

Extrayendo (Pulling) desde Otros Registros (Registries)

Por defecto, docker pull descarga imágenes desde Docker Hub. Para extraer (pull) desde otros registros (registries), incluya el nombre de host del registro:

docker pull mcr.microsoft.com/dotnet/sdk:6.0

Este comando extrae (pull) la imagen de .NET SDK 6.0 desde Microsoft Container Registry.

Ahora que ha extraído (pulled) algunas imágenes de Docker, pasemos al siguiente paso para aprender a gestionarlas.

Gestionando Imágenes de Docker

Después de extraer (pulling) imágenes de Docker, necesita saber cómo listarlas, inspeccionarlas y gestionarlas eficazmente.

Listando Imágenes de Docker

Para ver todas las imágenes de Docker que ha descargado a su máquina local, use el comando docker images (o su alias docker image ls):

docker images

Debería ver una salida similar a:

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        22.04     58db3edaf2be   3 weeks ago    77.8MB
nginx         latest    605c77e624dd   4 weeks ago    142MB

Esta salida muestra:

  • REPOSITORY: El nombre de la imagen
  • TAG: La versión de la imagen
  • IMAGE ID: Un identificador único para la imagen
  • CREATED: Cuándo se creó la imagen
  • SIZE: El tamaño de la imagen en disco

Inspeccionando Imágenes de Docker

Para obtener información detallada sobre una imagen específica, use el comando docker inspect:

docker inspect ubuntu:22.04

Este comando muestra un array JSON que contiene todos los detalles sobre la imagen, incluyendo:

  • Información de las capas (layer)
  • Variables de entorno
  • Arquitectura
  • Sistema operativo
  • Configuración

La salida es bastante larga y detallada. Aquí hay un fragmento de lo que podría ver:

[
    {
        "Id": "sha256:58db3edaf2beXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "RepoTags": [
            "ubuntu:22.04"
        ],
        "RepoDigests": [
            "ubuntu@sha256:2b7412e6465c3fc7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f"
        ],
        ...
    }
]

Historial de la Imagen

Para ver el historial de capas (layer) de una imagen (cómo se construyó), use el comando docker history:

docker history ubuntu:22.04

La salida muestra cada capa que compone la imagen:

IMAGE          CREATED       CREATED BY                                      SIZE
58db3edaf2be   3 weeks ago   /bin/sh -c #(nop)  CMD ["bash"]                0B
<missing>      3 weeks ago   /bin/sh -c #(nop) ADD file:15efc167a417...     77.8MB

Eliminando Imágenes de Docker

Cuando ya no necesite una imagen, puede eliminarla para liberar espacio en disco usando el comando docker rmi:

docker rmi nginx

Si tiene éxito, Docker muestra los ID de las imágenes eliminadas:

Untagged: nginx:latest
Untagged: nginx@sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Deleted: sha256:605c77e624ddb75e6110f997c58876bba43f0blindividualayeridshereXX
(...more layers deleted...)

Si la imagen está siendo utilizada por un contenedor, necesitará eliminar el contenedor primero o usar la opción -f (force):

docker rmi -f nginx

Ahora sabe cómo gestionar sus imágenes de Docker. Pasemos al paso final donde realmente usaremos una imagen para ejecutar un contenedor.

Usando Imágenes de Docker

Extraer (pulling) imágenes de Docker es solo el primer paso. Ahora, aprendamos a usar estas imágenes para ejecutar contenedores.

Ejecutando un Contenedor desde una Imagen

Para crear e iniciar un contenedor desde una imagen, use el comando docker run:

docker run ubuntu:22.04 echo "Hello from Ubuntu container"

Este comando:

  1. Crea un nuevo contenedor desde la imagen ubuntu:22.04
  2. Ejecuta el comando echo "Hello from Ubuntu container" dentro del contenedor
  3. Muestra la salida:
Hello from Ubuntu container

Después de ejecutar el comando, el contenedor se detiene porque ha completado su tarea.

Ejecutando un Contenedor Interactivo

Para iniciar un shell interactivo dentro de un contenedor, use las opciones -i (interactive) y -t (terminal):

docker run -it ubuntu:22.04 bash

Esto le da un shell bash dentro del contenedor Ubuntu donde puede ejecutar comandos:

root@a1b2c3d4e5f6:/## ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr

Para salir del contenedor, escriba exit o presione Ctrl+D:

root@a1b2c3d4e5f6:/## exit
exit

Ejecutando un Contenedor en Modo Desconectado (Detached Mode)

Para ejecutar un contenedor en segundo plano (modo desconectado), use la opción -d:

docker run -d --name nginx-server -p 8080:80 nginx

Este comando:

  1. Crea un contenedor llamado nginx-server desde la imagen nginx
  2. Lo ejecuta en modo desconectado (-d)
  3. Mapea el puerto 8080 en su host al puerto 80 en el contenedor
  4. Retorna un ID de contenedor:
e1d0ac1dcb21a93d9d878dcf40c054eb9f3c2b1bf5ecce7c29b6fa8ce6b219c1

Accediendo al Contenedor en Ejecución

Ahora puede acceder al servidor web Nginx en http://localhost:8080 en su navegador, o usar curl para verificar que está funcionando:

curl localhost:8080

Esto debería mostrar la página de bienvenida HTML de Nginx:

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>

Listando Contenedores en Ejecución

Para ver todos los contenedores en ejecución, use:

docker ps

Esto muestra información sobre sus contenedores en ejecución:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
e1d0ac1dcb21   nginx     "/docker-entrypoint.…"   30 seconds ago   Up 29 seconds   0.0.0.0:8080->80/tcp   nginx-server

Deteniendo y Eliminando Contenedores

Para detener un contenedor en ejecución:

docker stop nginx-server

Para eliminar un contenedor detenido:

docker rm nginx-server

Ahora ha usado con éxito imágenes de Docker para ejecutar contenedores. Este es el flujo de trabajo fundamental para usar Docker en sus procesos de desarrollo e implementación.

Resumen

Felicitaciones por completar este laboratorio de imágenes de Docker. Ha aprendido las habilidades esenciales para trabajar con imágenes de Docker:

  1. Comprender qué son las imágenes de Docker y cómo se organizan en los registros (registries)
  2. Buscar y extraer (pulling) imágenes de Docker desde Docker Hub
  3. Gestionar sus imágenes locales de Docker, incluyendo listarlas, inspeccionarlas y eliminarlas
  4. Usar imágenes de Docker para ejecutar contenedores en diferentes modos

Estas habilidades forman la base para trabajar con Docker y le permitirán aprovechar la containerización en su flujo de trabajo de desarrollo. Ahora puede extraer cualquier imagen de Docker desde registros públicos o privados y usarlas para ejecutar aplicaciones en contenedores.

Próximos pasos para un aprendizaje adicional:

  • Crear sus propias imágenes de Docker con Dockerfiles
  • Trabajar con Docker Compose para aplicaciones de múltiples contenedores
  • Usar volúmenes de Docker para almacenamiento persistente
  • Configurar la red de contenedores (container networking)

Siga explorando el vasto ecosistema de imágenes de Docker disponibles en Docker Hub para encontrar herramientas y aplicaciones que puedan acelerar su proceso de desarrollo.