27 de July de 2025
Cloud & DevOps Guías Prácticas Tutoriales

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

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:

  1. Estandarización y productividad: Docker garantiza consistencia a lo largo del proceso de desarrollo y despliegue
  2. Compatibilidad y mantenimiento más fácil: Erradica el problema de «en mi máquina funciona»
  3. Simplicidad: Docker simplifica las configuraciones y permite a los desarrolladores transformar su configuración en código
  4. Despliegue rápido: Docker reduce el despliegue a cuestión de segundos
  5. Pruebas continuas: Docker garantiza entornos consistentes desde desarrollo hasta producción
  6. 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:

  1. Abre PowerShell como administrador
  2. Ejecuta el comando: wsl --install
  3. Reinicia el sistema si es necesario

Paso 2: Descargar Docker Desktop

  1. Ve al sitio oficial de Docker: https://www.docker.com/products/docker-desktop
  2. Haz clic en «Get Docker Desktop for Windows»
  3. Descarga el archivo Docker Desktop Installer.exe

Paso 3: Instalar Docker Desktop

  1. Haz doble clic en Docker Desktop Installer.exe
  2. Asegúrate de seleccionar «Use WSL 2 instead of Hyper-V» durante la instalación
  3. Sigue las instrucciones del asistente de instalación
  4. Cuando se complete la instalación, selecciona «Close»

Paso 4: Verificar la instalación

  1. Busca Docker Desktop en el menú de inicio
  2. Ejecuta Docker Desktop
  3. 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

  1. Ve a la página oficial de Docker Desktop
  2. Selecciona la versión correcta:
    • Docker Desktop para Mac con chip Apple Silicon
    • Docker Desktop para Mac con chip Intel
  3. Descarga el archivo .dmg

Paso 3: Instalar Docker Desktop

  1. Abre el archivo .dmg descargado
  2. Arrastra el ícono de Docker a la carpeta de Aplicaciones
  3. Abre Docker desde la carpeta de Aplicaciones
  4. La primera vez que lo ejecutes, macOS te pedirá confirmación
  5. Docker te pedirá permisos de administrador – proporciona tu contraseña

Paso 4: Verificar la instalación

  1. Verifica que el ícono de Docker aparezca en la barra de menú superior
  2. El icono debe mostrar «Docker Desktop is running»

Verificación de la instalación

Para verificar que Docker está instalado correctamente en ambos sistemas:

  1. Abre una terminal (Command Prompt/PowerShell en Windows, Terminal en Mac)
  2. Ejecuta el comando de verificación:bashdocker --version
  3. Ejecuta el contenedor de prueba:bashdocker 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:

  1. Introducción: Aprendimos qué es Docker y por qué es importante en el desarrollo moderno
  2. Conceptos básicos: Entendimos la diferencia entre contenedores y VMs, imágenes, contenedores y Docker Engine
  3. Características: Exploramos las ventajas y casos de uso de Docker
  4. Instalación: Vimos cómo instalar Docker Desktop en Windows y Mac
  5. Comandos básicos: Aprendimos los comandos esenciales para trabajar con Docker
  6. Dockerfile: Descubrimos cómo crear imágenes personalizadas
  7. Docker Compose: Exploramos la gestión de aplicaciones multi-contenedor

Recursos adicionales

Para continuar aprendiendo Docker, te recomendamos:

Documentación oficial:

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

  1. Practica con proyectos reales: Dockeriza tus aplicaciones actuales
  2. Aprende Docker Swarm: Para orquestación de contenedores
  3. Explora Kubernetes: La plataforma líder en orquestación
  4. Estudia CI/CD: Integra Docker en pipelines de despliegue
  5. Seguridad en Docker: Aprende mejores prácticas de seguridad
  6. 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.

About Author

Miguel Cañadas Chico

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *