Una imagen de Docker es una plantilla de solo lectura que incluye todos los archivos, binarios, bibliotecas y configuraciones para ejecutar un contenedor. Por lo tanto, un contenedor de Docker es una imágen de Docker instanciada (en ejecución).
Hay dos cosas importantes a tener en cuenta sobre las imágenes:
Ref: Docker Docs, what is an image
Un Docker Registry es un servicio que permite almacenar y distribuir imágenes de Docker. Docker Hub es el registro público más conocido, aunque no es el único disponible.
Los registros de Docker ofrecen un amplio catálogo de imágenes listas para descargar y la opción de subir nuestras propias imágenes, ya sea para compartirlas o utilizarlas posteriormente. Si preferimos mantener nuestras imágenes de forma privada, algunos registros pueden requerir suscripciones de pago.
Además, es posible configurar registros privados, lo que nos permite gestionar nuestras imágenes de Docker de manera segura dentro de nuestra organización.
Los tags se identifican con un ":" después del nombre de una imágen. Por lo tanto tendrán el formato IMAGEN:TAG.
ubuntu:latestpython:3.9.19redis:7.4.0python:3.9.19-slim-bullseyeSi no se especifica el tag de la imágen, se descargará el tag "latest", que indica la mas reciente versión disponible.
¿Dónde buscar los tags?, en la registry. Por ejemplo en Docker Hub
Para ambientes productivos, es altamente recomendable especificar la versión de la imágen y NO usar la :latest.
Ref: Docker Docs Tags
La Docker CLI es la interfaz de línea de comandos de Docker, donde podemos ejecutar comandos para gestionar contenedores e imágenes. Una vez instalado Docker, podemos utilizar la CLI desde una terminal, como PowerShell o Bash para interactuar con Docker.
Con el comando docker pull descargamos una imágen de la registry que tenemos configurada. Por defecto irá a buscar la imágen a Docker Hub.
docker pull IMAGE:TAG
docker pull alpine
Salida del comando
$ docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
Digest: sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
Docker Docs: docker pull
docker images
Imágenes descargadas
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.29.1-bookworm 33e0bbc7ca9e 2 weeks ago 279MB
nginx 1.29.1-alpine 42a516af16b8 2 weeks ago 79.3MB
alpine latest 4bcff63911fc 6 weeks ago 12.8MB
Observar la diferencia de tamaño de cada imágen de nginx. Se trata de la misma versión de nginx 1.29.1 pero cambia la imágen base, una está basada en Alpine Linux y la otra en Debian 12 (Bookworm).
Docker Docs: Image lsEl comando docker run corre un nuevo contenedor. Descargando la imágen (pull) si no se encuentra previamente descargada.
docker run [opciones] [imagen] [comando]
Ejemplos
docker run hello-world # Iniciará el hello-world de Docker
docker run -it ubuntu bash # Iniciará una bash interactiva
Como se puede ver en el segundo ejemplo, el último parámetro es el comando que ejecutará un contenedor. ¿Qué pasa si ejecutamos el siguiente comando?
docker run ubuntu ls /
Docker Docs: docker run
Listar contenedores
docker container ps # Contenedores en ejecución
docker ps # Contenedores en ejecución abreviado
docker ps -a # Todos los contenedores
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
397b24009eac ubuntu "bash" 6 seconds ago Up 5 seconds infallible_jemison
97476377f815 hello-world "/hello" About an hour ago Exited (0) About an hour ago bold_rosalind
Observar que tras la ejecución del comando docker ps -a se ven los estados de los contenedores. Uno está arriba y el otro Exited (0)
Si no es especificado el name al momento de correr el container, se creará un nombre aleatorio.
Docker Docs: container ls | Docker Docs: Container Status
El comando docker container ps o docker ps nos brinda la siguiente información relevante.
| Comando | Descripción | Uso |
|---|---|---|
docker stop |
Detiene uno o varios contenedores | docker stop CONTAINERS (name o ID) |
docker start |
Inicia un contenedor | docker start [options] CONTAINER |
docker restart |
Reinicia uno o mas contenedores | docker stop CONTAINER |
docker rename |
Renombra un contenedor | docker rename CONTAINER NEW_NAME |
docker rm |
Elimina uno o mas contenedores | docker rm [options] CONTAINER |
Consulte la Docker CLI Refence para un listado completo.