Docker | Guía Completa para Desarrolladores Web

Docker es una herramienta esencial para desarrolladores modernos, permitiendo construir, compartir y ejecutar aplicaciones en entornos aislados llamados contenedores. Esta guía te enseñará los fundamentos y las mejores prácticas para integrar Docker en tu flujo de trabajo como desarrollador web profesional.


1. ¿Qué es Docker?

Docker es una plataforma de contenedores que permite empaquetar aplicaciones y sus dependencias en un contenedor. Los contenedores son ligeros, portátiles y consistentes, lo que facilita la creación de entornos reproducibles, independientemente del sistema operativo.

Ventajas de usar Docker:

  • Portabilidad: Corre el mismo contenedor en desarrollo, pruebas y producción.
  • Aislamiento: Cada contenedor opera de forma independiente, evitando conflictos de dependencias.
  • Escalabilidad: Fácil despliegue y escalado de aplicaciones.
  • Eficiencia: Consume menos recursos que las máquinas virtuales.

2. Conceptos Básicos de Docker

Antes de comenzar a usar Docker, es importante familiarizarse con algunos conceptos clave:

Imagen (Image)

Una imagen es una plantilla inmutable que define el entorno y las dependencias necesarias para ejecutar una aplicación. Por ejemplo, una imagen puede contener un servidor Apache y PHP configurado.

Contenedor (Container)

Un contenedor es una instancia ejecutable de una imagen. Puedes tener múltiples contenedores basados en la misma imagen.

Dockerfile

Es un archivo de texto que define las instrucciones para crear una imagen. Es el corazón de Docker y permite automatizar la creación de entornos.

Registro (Registry)

Es un repositorio para almacenar y compartir imágenes Docker. El más conocido es Docker Hub.


3. Instalación de Docker

En Windows y macOS:

  1. Descarga Docker Desktop desde docker.com.
  2. Instálalo y asegúrate de habilitar la virtualización en tu sistema.
  3. Inicia Docker Desktop.

En Linux:

  1. Ejecuta los siguientes comandos: sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
  2. Verifica la instalación: docker --version

4. Comandos Básicos de Docker

Verificar instalación:

docker --version

Ejecutar un contenedor:

docker run -d -p 80:80 nginx
  • -d: Ejecuta en segundo plano.
  • -p: Mapea el puerto local (80) al puerto del contenedor (80).

Listar contenedores activos:

docker ps

Detener un contenedor:

docker stop <ID_CONTENEDOR>

Eliminar un contenedor:

docker rm <ID_CONTENEDOR>

Construir una imagen desde un Dockerfile:

docker build -t mi-aplicacion .
  • -t: Asigna un nombre a la imagen.
  • .: Especifica el contexto de construcción (la carpeta actual).

5. Estructura de un Dockerfile

Un Dockerfile define cómo se debe construir una imagen. Aquí tienes un ejemplo para una aplicación Node.js:

# Usar una imagen base oficial
FROM node:14

# Establecer el directorio de trabajo dentro del contenedor
WORKDIR /app

# Copiar los archivos necesarios
COPY package.json ./
COPY package-lock.json ./

# Instalar dependencias
RUN npm install

# Copiar el código fuente
COPY . .

# Exponer el puerto para la aplicación
EXPOSE 3000

# Comando para ejecutar la aplicación
CMD ["npm", "start"]

Pasos en el Dockerfile:

  1. FROM: Define la imagen base.
  2. WORKDIR: Establece el directorio de trabajo.
  3. COPY: Copia archivos al contenedor.
  4. RUN: Ejecuta comandos durante la construcción.
  5. EXPOSE: Especifica los puertos expuestos.
  6. CMD: Define el comando predeterminado al ejecutar el contenedor.

6. Volúmenes en Docker

Los volúmenes se usan para persistir datos entre reinicios de contenedores.

Crear un volumen:

docker volume create mi-volumen

Montar un volumen en un contenedor:

docker run -d -p 80:80 -v mi-volumen:/data nginx

7. Redes en Docker

Docker proporciona redes para conectar contenedores:

Tipos de redes:

  • Bridge: Predeterminado, conecta contenedores en el mismo host.
  • Host: Usa directamente la red del host.
  • Overlay: Para redes distribuidas.

Ejemplo:

Crear una red personalizada y conectar contenedores:

docker network create mi-red
docker run -d --name web --network mi-red nginx
docker run -d --name db --network mi-red mysql

8. Docker Compose

Docker Compose facilita la gestión de múltiples contenedores. Define tus servicios en un archivo docker-compose.yml.

Ejemplo de archivo docker-compose.yml:

version: "3.9"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  app:
    build:
      context: .
    volumes:
      - ".:/app"
    ports:
      - "3000:3000"
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: password

Comandos comunes:

  • Levantar servicios: docker-compose up -d
  • Detener servicios: docker-compose down

9. Mejores Prácticas con Docker

  1. Mantén imágenes ligeras:
    • Usa imágenes base mínimas como alpine.
  2. Evita copiar archivos innecesarios:
    • Usa .dockerignore para excluir archivos.
  3. Etiqueta tus imágenes:
    • Usa versiones para gestionar actualizaciones (mi-app:1.0).
  4. Usa volúmenes para datos persistentes:
    • Nunca almacenes datos críticos dentro del contenedor.

10. Herramientas Complementarias

  • Portainer: Interfaz gráfica para gestionar contenedores.
  • Docker Swarm: Orquestación para entornos Docker.
  • Kubernetes: Gestión avanzada de contenedores en producción.

11. Casos de Uso Comunes para Desarrolladores Web

  1. Ambientes locales reproducibles:
    • Configura tu servidor web, base de datos y backend con Docker.
  2. Pruebas automáticas:
    • Usa contenedores para ejecutar pruebas en entornos aislados.
  3. Despliegue continuo:
    • Integra Docker en pipelines CI/CD.

12. Conclusión

Docker transforma la forma en que los desarrolladores web gestionan y despliegan aplicaciones. Con los fundamentos y herramientas descritas en esta guía, estarás preparado para aprovechar Docker al máximo y llevar tus proyectos al siguiente nivel.

¿Listo para comenzar? ¡Crea tu primer contenedor y experimenta con Docker hoy mismo!

Rate this post

Deja un comentario

Web Devs