Tutorial Completo de Docker: Qué es, Funciones, Características e Instalación

1. Introducción a Docker
¿Qué es Docker?
Docker es una plataforma de código abierto que permite crear, desplegar y ejecutar aplicaciones en contenedores. Según la definición oficial, Docker es una plataforma que empaqueta software en unidades estandarizadas llamadas contenedores que incluyen todo lo necesario para que el software se ejecute.
Docker utiliza la tecnología de contenedores para proporcionar una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos. A diferencia de las máquinas virtuales tradicionales, Docker utiliza características de aislamiento de recursos del kernel Linux, tales como cgroups y espacios de nombres (namespaces) para permitir que contenedores independientes se ejecuten dentro de una sola instancia de Linux.
Historia y evolución
Docker fue creado en 2013 y se lanzó la versión 1.0 en 2014. Desde entonces, se ha convertido en el estándar de la industria para los contenedores y ha revolucionado la forma en que desarrollamos y desplegamos aplicaciones. La plataforma ha evolucionado de ser una tecnología inicial de código abierto a convertirse en un entorno de ejecución estandarizado que ahora es oficialmente compatible con multitud de productos.
Por qué Docker es importante
Docker ha transformado el desarrollo de software porque resuelve el problema de «funciona en mi máquina». Permite a los desarrolladores crear entornos consistentes que funcionan igual en desarrollo, pruebas y producción. Según estadísticas recientes, más de 20 millones de desarrolladores utilizan la plataforma mensualmente, lo que demuestra su amplia adopción en la industria.
2. Conceptos Básicos de Docker
Contenedores vs Máquinas Virtuales
La principal diferencia entre contenedores Docker y máquinas virtuales radica en cómo virtualizan los recursos:
Contenedores Docker:
- Comparten el mismo sistema operativo subyacente
- Son más ligeros que las máquinas virtuales
- Se pueden ejecutar múltiples aplicaciones sin preocuparse por conflictos en el sistema operativo
- Pueden iniciarse en segundos
Máquinas Virtuales:
- Requieren un sistema operativo completo para cada aplicación
- Consumen más recursos de infraestructura
- Tardan más tiempo en iniciarse
- Proporcionan mayor aislamiento pero con mayor overhead
Imágenes Docker
Las imágenes Docker son plantillas de solo lectura que contienen todo lo necesario para ejecutar una aplicación. Estas imágenes incluyen:
- El sistema operativo base
- El código de la aplicación
- Bibliotecas y dependencias
- Herramientas del sistema
- Configuraciones
Las imágenes se construyen utilizando un Dockerfile y pueden almacenarse y recuperarse de registros de contenedores como Docker Hub.
Contenedores Docker
Un contenedor Docker es una instancia en ejecución de una imagen Docker. Los contenedores proporcionan:
- Aislamiento eficiente para las aplicaciones
- Portabilidad entre diferentes entornos
- Eficiencia de recursos comparado con las VMs
- Facilidad de despliegue y escalabilidad
Docker Engine
Docker Engine es la aplicación que se instala en la máquina para crear, ejecutar y gestionar los contenedores Docker. Es el motor del sistema Docker que agrupa y enlaza los distintos componentes. Se basa en una tecnología cliente-servidor utilizada para crear y ejecutar contenedores.
Dockerfile
Un Dockerfile es un archivo de texto que contiene las instrucciones para crear una imagen Docker. Especifica:
- Qué sistema operativo se utilizará como base
- Los lenguajes de programación necesarios
- Variables de entorno
- Ubicación de archivos
- Puertos de red
- Otros componentes necesarios
3. Funciones y Características de Docker
Principales características
Docker ofrece varias características clave que lo hacen único:
Portabilidad: Los contenedores Docker se pueden ejecutar en cualquier entorno que soporte Docker, eliminando problemas de compatibilidad entre diferentes sistemas operativos.
Aislamiento: Cada contenedor opera en un entorno aislado, lo que significa que los problemas en un contenedor no afectan a otros.
Eficiencia: Los contenedores son mucho más ligeros que las máquinas virtuales ya que no necesitan un sistema operativo completo.
Escalabilidad: Docker permite escalar aplicaciones rápidamente creando o eliminando contenedores según sea necesario.
Ventajas de usar Docker
Las principales ventajas de Docker incluyen:
- Estandarización y productividad: Docker garantiza consistencia a lo largo del proceso de desarrollo y despliegue
- Compatibilidad y mantenimiento más fácil: Erradica el problema de «en mi máquina funciona»
- Simplicidad: Docker simplifica las configuraciones y permite a los desarrolladores transformar su configuración en código
- Despliegue rápido: Docker reduce el despliegue a cuestión de segundos
- Pruebas continuas: Docker garantiza entornos consistentes desde desarrollo hasta producción
- Seguridad: Docker garantiza que las aplicaciones estén totalmente segregadas y aisladas
Casos de uso comunes
Docker es especialmente útil en los siguientes escenarios:
- Desarrollo de aplicaciones: Crear entornos de desarrollo consistentes
- Microservicios: Desplegar y gestionar arquitecturas de microservicios
- CI/CD: Integración y despliegue continuo
- Migración a la nube: Facilitar la migración de aplicaciones
- Scaling: Escalar aplicaciones rápidamente
4. Instalación de Docker
Requisitos del sistema
Para Windows:
- Windows 10, 11 de 64 bits (cualquier edición)
- 4 GB de RAM
- Procesador de 64 bits
- Virtualización por hardware habilitada en BIOS
- WSL 2 habilitado
Para Mac:
- 4 GB de RAM
- Una versión soportada de macOS
- Para mejor rendimiento, se recomienda instalar Rosetta 2 en Macs con chip Apple Silicon
Instalación en Windows
Paso 1: Preparar el sistema
Antes de instalar Docker Desktop, necesitas habilitar WSL 2:
- Abre PowerShell como administrador
- Ejecuta el comando:
wsl --install
- Reinicia el sistema si es necesario
Paso 2: Descargar Docker Desktop
- Ve al sitio oficial de Docker: https://www.docker.com/products/docker-desktop
- Haz clic en «Get Docker Desktop for Windows»
- Descarga el archivo
Docker Desktop Installer.exe
Paso 3: Instalar Docker Desktop
- Haz doble clic en
Docker Desktop Installer.exe
- Asegúrate de seleccionar «Use WSL 2 instead of Hyper-V» durante la instalación
- Sigue las instrucciones del asistente de instalación
- Cuando se complete la instalación, selecciona «Close»
Paso 4: Verificar la instalación
- Busca Docker Desktop en el menú de inicio
- Ejecuta Docker Desktop
- Verifica que el icono de Docker aparezca en la bandeja del sistema
Instalación en Mac
Paso 1: Verificar requisitos
Asegúrate de tener:
- Al menos 4 GB de RAM
- Una versión soportada de macOS
- Para Macs con chip Apple Silicon, instala Rosetta 2:
softwareupdate --install-rosetta
Paso 2: Descargar Docker Desktop
Paso 3: Instalar Docker Desktop
- Abre el archivo
.dmg
descargado - Arrastra el ícono de Docker a la carpeta de Aplicaciones
- Abre Docker desde la carpeta de Aplicaciones
- La primera vez que lo ejecutes, macOS te pedirá confirmación
- Docker te pedirá permisos de administrador – proporciona tu contraseña
Paso 4: Verificar la instalación
- Verifica que el ícono de Docker aparezca en la barra de menú superior
- El icono debe mostrar «Docker Desktop is running»
Verificación de la instalación
Para verificar que Docker está instalado correctamente en ambos sistemas:
- Abre una terminal (Command Prompt/PowerShell en Windows, Terminal en Mac)
- Ejecuta el comando de verificación:bash
docker --version
- Ejecuta el contenedor de prueba:bash
docker run hello-world
Si la instalación fue exitosa, verás un mensaje confirmando que Docker está funcionando correctamente.
5. Comandos Básicos de Docker
Comandos fundamentales
Docker utiliza una estructura de comandos consistente: docker [opciones] [comando] [argumentos]
. A continuación se presentan los comandos más importantes:
Verificar información del sistema:
docker --version # Mostrar versión de Docker
docker info # Información detallada del sistema
docker system df # Uso del espacio en disco
Obtener ayuda:
docker --help # Ayuda general
docker [comando] --help # Ayuda específica de un comando
Gestión de imágenes
Buscar y descargar imágenes:
docker search ubuntu # Buscar imágenes en Docker Hub
docker pull ubuntu # Descargar una imagen
docker pull ubuntu:20.04 # Descargar versión específica
Listar y gestionar imágenes:
docker images # Listar imágenes locales
docker rmi ubuntu # Eliminar una imagen
docker rmi -f ubuntu # Forzar eliminación de imagen
Construir imágenes:
docker build -t mi-app . # Construir imagen desde Dockerfile
docker build -t mi-app:v1.0 . # Con etiqueta específica
Gestión de contenedores
Ejecutar contenedores:
docker run ubuntu # Ejecutar contenedor
docker run -it ubuntu # Modo interactivo
docker run -d nginx # Ejecutar en background
docker run -p 8080:80 nginx # Mapear puertos
Listar contenedores:
docker ps # Contenedores activos
docker ps -a # Todos los contenedores
Controlar contenedores:
docker start [container_id] # Iniciar contenedor
docker stop [container_id] # Detener contenedor
docker restart [container_id] # Reiniciar contenedor
docker rm [container_id] # Eliminar contenedor
Interactuar con contenedores:
docker exec -it [container_id] bash # Entrar al contenedor
docker logs [container_id] # Ver logs
docker inspect [container_id] # Inspeccionar contenedor
Ejemplos prácticos
Ejemplo 1: Ejecutar un servidor web Nginx
# Descargar y ejecutar Nginx
docker run -d -p 8080:80 --name mi-nginx nginx
# Verificar que está funcionando
docker ps
# Acceder a http://localhost:8080 en el navegador
Ejemplo 2: Contenedor Ubuntu interactivo
# Ejecutar Ubuntu de forma interactiva
docker run -it ubuntu
# Dentro del contenedor
apt update
apt install nano
echo "Hola Docker" > archivo.txt
exit
Ejemplo 3: Limpiar el sistema
# Eliminar contenedores parados
docker container prune
# Eliminar imágenes no utilizadas
docker image prune
# Limpieza completa del sistema
docker system prune
6. Dockerfile: Creación de Imágenes Personalizadas
Estructura de un Dockerfile
Un Dockerfile es un archivo de texto que contiene un conjunto de instrucciones para la creación de una imagen Docker. El proceso de construcción se realiza con el comando docker build
.
Estructura básica:
# Comentario
FROM imagen_base
MAINTAINER autor
RUN comando1
RUN comando2
COPY archivo_origen archivo_destino
EXPOSE puerto
CMD ["comando", "argumento"]
Principales directivas
FROM: Define la imagen base
FROM ubuntu:20.04
FROM node:14
FROM python:3.9
MAINTAINER: Especifica el autor (opcional)
MAINTAINER "Tu Nombre <tu.email@ejemplo.com>"
RUN: Ejecuta comandos durante la construcción
RUN apt-get update && apt-get install -y nginx
RUN npm install
RUN pip install -r requirements.txt
COPY/ADD: Copia archivos al contenedor
COPY index.html /var/www/html/
ADD archivo.tar.gz /opt/
WORKDIR: Establece directorio de trabajo
WORKDIR /app
EXPOSE: Declara puertos que usa el contenedor
EXPOSE 80
EXPOSE 3000
ENV: Define variables de entorno
ENV NODE_ENV=production
ENV DATABASE_URL=mongodb://localhost:27017
CMD: Comando por defecto al ejecutar el contenedor
CMD ["nginx", "-g", "daemon off;"]
CMD ["node", "app.js"]
ENTRYPOINT: Comando que siempre se ejecuta
ENTRYPOINT ["python", "app.py"]
Ejemplos de Dockerfile
Ejemplo 1: Servidor web con Nginx
# Usar imagen oficial de Nginx
FROM nginx:alpine
# Copiar página web personalizada
COPY index.html /usr/share/nginx/html/
# Exponer puerto 80
EXPOSE 80
# Nginx ya está configurado para ejecutarse
Ejemplo 2: Aplicación Node.js
# Usar imagen oficial de Node.js
FROM node:14
# Crear directorio de trabajo
WORKDIR /app
# Copiar package.json
COPY package*.json ./
# Instalar dependencias
RUN npm install
# Copiar código fuente
COPY . .
# Exponer puerto 3000
EXPOSE 3000
# Comando para ejecutar la aplicación
CMD ["node", "app.js"]
Ejemplo 3: Aplicación Python con Flask
# Usar imagen oficial de Python
FROM python:3.9-slim
# Establecer directorio de trabajo
WORKDIR /app
# Copiar requirements.txt
COPY requirements.txt .
# Instalar dependencias
RUN pip install --no-cache-dir -r requirements.txt
# Copiar código fuente
COPY . .
# Exponer puerto 5000
EXPOSE 5000
# Comando para ejecutar la aplicación
CMD ["python", "app.py"]
Construir la imagen:
docker build -t mi-aplicacion .
docker build -t mi-aplicacion:v1.0 .
7. Docker Compose
¿Qué es Docker Compose?
Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker multi-contenedor. Permite describir la configuración de múltiples servicios en un archivo YAML, especificando servicios, volúmenes, redes y otras configuraciones en un lugar centralizado.
Ventajas principales:
- Gestión simplificada de múltiples contenedores
- Configuración declarativa en un solo archivo
- Fácil escalamiento de servicios
- Entornos reproducibles para desarrollo y producción
Estructura del archivo compose.yaml
La estructura básica de un archivo Docker Compose:
version: '3.8' # Versión de Compose (opcional)
services:
servicio1:
image: nginx:latest
ports:
- "8080:80"
environment:
- ENV_VAR=valor
servicio2:
build: .
ports:
- "3000:3000"
depends_on:
- servicio1
volumes:
datos:
networks:
red_personalizada:
Componentes principales:
Services: Lista de contenedores que forman la aplicación
services:
web:
image: nginx:latest
ports:
- "80:80"
database:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: password
Networks: Redes personalizadas para comunicación entre servicios
networks:
frontend:
backend:
Volumes: Volúmenes para persistencia de datos
volumes:
db_data:
app_data:
Comandos básicos
Comandos principales de Docker Compose:
# Construir y ejecutar todos los servicios
docker-compose up
# Ejecutar en background
docker-compose up -d
# Detener y eliminar contenedores
docker-compose down
# Ver estado de los servicios
docker-compose ps
# Ver logs de los servicios
docker-compose logs
# Seguir logs en tiempo real
docker-compose logs -f
# Escalar un servicio
docker-compose up --scale web=3
# Reconstruir imágenes
docker-compose build
# Ejecutar comando en un servicio
docker-compose exec web bash
Ejemplo práctico
Ejemplo completo: Aplicación web con base de datos
Estructura del proyecto:
proyecto/
├── docker-compose.yml
├── Dockerfile
├── app.py
└── requirements.txt
docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgresql://user:password@db:5432/myapp
depends_on:
- db
volumes:
- .:/app
db:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- db_data:/var/lib/postgresql/data
ports:
- "5432:5432"
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
db_data:
Dockerfile para la aplicación:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
Ejecutar la aplicación:
bash# Construir y ejecutar todos los servicios
docker-compose up -d
# Verificar que están funcionando
docker-compose ps
# Ver logs
docker-compose logs web
# Detener la aplicación
docker-compose down
8. Conclusiones y Próximos Pasos
Resumen del tutorial
En este tutorial completo hemos cubierto los aspectos fundamentales de Docker:
- Introducción: Aprendimos qué es Docker y por qué es importante en el desarrollo moderno
- Conceptos básicos: Entendimos la diferencia entre contenedores y VMs, imágenes, contenedores y Docker Engine
- Características: Exploramos las ventajas y casos de uso de Docker
- Instalación: Vimos cómo instalar Docker Desktop en Windows y Mac
- Comandos básicos: Aprendimos los comandos esenciales para trabajar con Docker
- Dockerfile: Descubrimos cómo crear imágenes personalizadas
- Docker Compose: Exploramos la gestión de aplicaciones multi-contenedor
Recursos adicionales
Para continuar aprendiendo Docker, te recomendamos:
Documentación oficial:
- Docker Documentation
- Docker Hub – Registro de imágenes
- Docker Compose Documentation
Recursos de aprendizaje:
- Cursos online especializados en Docker
- Tutoriales prácticos con proyectos reales
- Comunidades de desarrolladores Docker
- Libros especializados en contenedores
Siguientes pasos para aprender Docker
- Practica con proyectos reales: Dockeriza tus aplicaciones actuales
- Aprende Docker Swarm: Para orquestación de contenedores
- Explora Kubernetes: La plataforma líder en orquestación
- Estudia CI/CD: Integra Docker en pipelines de despliegue
- Seguridad en Docker: Aprende mejores prácticas de seguridad
- Monitoreo: Implementa herramientas de monitoreo para contenedores
Docker es una herramienta fundamental en el desarrollo moderno que facilita la creación, despliegue y gestión de aplicaciones. Con la base que has adquirido en este tutorial, estás preparado para comenzar a usar Docker en tus proyectos y continuar profundizando en esta tecnología esencial.