Appearance
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
| Concepto | Descripción |
|---|---|
| Imagen | Plantilla inmutable con el sistema de archivos y la configuración necesarios para ejecutar una aplicación. |
| Contenedor | Instancia en ejecución de una imagen. Se puede iniciar, detener y eliminar. |
| Dockerfile | Archivo de instrucciones para construir una imagen. |
| Volumen | Almacenamiento persistente gestionado por Docker, independiente del ciclo de vida de un contenedor. |
| Registro | Servicio 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 infoDescarga y ejecuta una imagen de prueba:
bash
docker run --rm hello-worldEjecutar 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:alpineEn 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 detenidoCrear 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 80Construye 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.0FROM 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_modulesNo 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 lsPara eliminar una imagen que ya no se usa:
bash
docker image ls
docker image rm mi-web:1.0Comprueba 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.