Skip to content

Docker ​

Docker permite empaquetar una aplicación y sus dependencias en una imagen que se puede ejecutar como contenedor. Así, la aplicación se comporta de forma consistente en el equipo de desarrollo, las pruebas y otros entornos.

Conceptos básicos ​

ConceptoDescripción
ImagenPlantilla inmutable con el sistema de archivos y la configuración necesarios para ejecutar una aplicación.
ContenedorInstancia en ejecución de una imagen. Se puede iniciar, detener y eliminar.
DockerfileArchivo de instrucciones para construir una imagen.
VolumenAlmacenamiento persistente gestionado por Docker, independiente del ciclo de vida de un contenedor.
RegistroServicio que almacena y distribuye imágenes, como Docker Hub.

Comprobar la instalación ​

Instala Docker siguiendo las instrucciones oficiales para tu sistema operativo y comprueba que el cliente y el motor están disponibles:

bash
docker --version
docker info

Descarga y ejecuta una imagen de prueba:

bash
docker run --rm hello-world

Ejecutar un contenedor ​

El comando docker run crea y ejecuta un contenedor. Por ejemplo, para iniciar Nginx y publicar su puerto HTTP localmente:

bash
docker run --name mi-web -d -p 8080:80 nginx:alpine

En este ejemplo, -d ejecuta el contenedor en segundo plano, -p 8080:80 conecta el puerto 8080 del equipo con el puerto 80 del contenedor y --name asigna un nombre fácil de recordar. La web queda disponible en http://localhost:8080.

Comandos habituales para consultar y administrar contenedores:

bash
docker ps                 # Contenedores en ejecución
docker ps -a              # Todos los contenedores, incluidos los detenidos
docker logs mi-web        # Ver los registros
docker exec -it mi-web sh # Abrir una consola dentro del contenedor
docker stop mi-web        # Detener el contenedor
docker start mi-web       # Volver a iniciarlo
docker rm mi-web          # Eliminar un contenedor detenido

Crear una imagen con un Dockerfile ​

Este ejemplo construye una imagen de Nginx con una página HTML propia. Guarda el archivo index.html junto al siguiente Dockerfile:

dockerfile
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80

Construye la imagen y ejecútala:

bash
docker build -t mi-web:1.0 .
docker run --rm -d --name mi-web -p 8080:80 mi-web:1.0

FROM define la imagen base, COPY incorpora un archivo al sistema de archivos de la imagen y EXPOSE documenta el puerto que utiliza la aplicación. EXPOSE no publica por sí mismo el puerto: para acceder desde el equipo se necesita -p en docker run.

Excluir archivos de la imagen ​

Un archivo .dockerignore evita enviar archivos innecesarios al contexto de construcción. Por ejemplo:

text
.git
.env
node_modules

No incluyas credenciales, claves privadas ni otros secretos en una imagen. Los archivos que contienen secretos tampoco deberían copiarse al contexto de construcción.

Persistencia y limpieza ​

Los datos que solo están en la capa escribible del contenedor se pierden al eliminarlo. Usa un volumen cuando deban sobrevivir al ciclo de vida del contenedor:

bash
docker volume create datos-web
docker run -d --name mi-web-con-datos \
  -p 8080:80 \
  -v datos-web:/usr/share/nginx/html \
  nginx:alpine
docker volume ls

Para eliminar una imagen que ya no se usa:

bash
docker image ls
docker image rm mi-web:1.0

Comprueba siempre qué recursos vas a borrar antes de usar comandos de limpieza: algunos pueden eliminar imágenes, contenedores o volúmenes que todavía necesitas.