Cómo Crear y Configurar Contenedores Docker

DockerBeginner
Practicar Ahora

Introducción

Este completo tutorial de Docker proporciona a los desarrolladores y profesionales de TI una guía práctica para comprender e implementar la tecnología de contenedores. Al explorar los conceptos centrales de Docker, los procesos de instalación y los comandos fundamentales, los participantes adquirirán habilidades esenciales para entornos de desarrollo y despliegue de software modernos.

Conceptos Básicos de Docker

¿Qué es Docker?

Docker es una potente tecnología de contenedores que revoluciona el despliegue y desarrollo de software. Permite a los desarrolladores empaquetar aplicaciones con todas sus dependencias en unidades estandarizadas llamadas contenedores, garantizando un rendimiento consistente en diferentes entornos informáticos.

Conceptos Fundamentales de Docker

Tecnología de Contenedores

La tecnología de contenedores permite que las aplicaciones se ejecuten en entornos aislados, proporcionando varias ventajas clave:

Característica Descripción
Aislamiento Los contenedores se ejecutan de forma independiente sin interferir entre sí
Portabilidad Las aplicaciones se pueden mover entre diferentes sistemas sin problemas
Eficiencia Más ligero y rápido que las máquinas virtuales tradicionales
graph TD A[Código de la Aplicación] --> B[Contenedor Docker] B --> C[Despliegue Consistente] B --> D[Eficiencia de Recursos]

Instalación de Docker en Ubuntu 22.04

Para instalar Docker en Ubuntu, utiliza los siguientes comandos:

## Actualizar el índice de paquetes
sudo apt-get update

## Instalar dependencias
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

## Añadir la clave GPG oficial de Docker
curl -fsSL | sudo apt-key add -

## Configurar el repositorio de Docker
sudo add-apt-repository "deb [arch=amd64]  $(lsb_release -cs) stable"

## Instalar Docker CE
sudo apt-get update
sudo apt-get install docker-ce

Primer Ejemplo de Contenedor Docker

Crea y ejecuta un contenedor nginx simple:

## Extraer la imagen nginx
sudo docker pull nginx

## Ejecutar el contenedor nginx
sudo docker run -d -p 80:80 nginx

Este comando descarga la imagen nginx y ejecuta un contenedor, mapeando el puerto 80 del contenedor al puerto 80 del sistema host.

Componentes Clave de Docker

  • Docker Engine: Entorno de tiempo de ejecución principal
  • Imágenes Docker: Plantillas de solo lectura para contenedores
  • Contenedores Docker: Instancias ejecutables de imágenes
  • Dockerfile: Script para construir imágenes personalizadas

Variables de Entorno

Entendiendo las Variables de Entorno en Docker

Las variables de entorno son pares clave-valor que proporcionan información de configuración e información de tiempo de ejecución para los contenedores Docker. Permiten la configuración dinámica de la aplicación sin modificar el código fuente del contenedor.

Tipos de Configuración de Variables de Entorno

Método de Configuración Descripción Caso de Uso
Dockerfile ENV Define variables de entorno estáticas durante la creación de la imagen Establecer configuraciones predeterminadas
Comando Docker Run Pasa variables específicas de tiempo de ejecución Sobrescribir configuraciones predeterminadas
Docker Compose Define variables de entorno en archivos de configuración Configuraciones complejas de varios contenedores
graph TD A[Fuentes de Variables de Entorno] --> B[Dockerfile] A --> C[Comando Docker Run] A --> D[Docker Compose]

Ejemplo de Variable de Entorno en Dockerfile

Crea un Dockerfile simple con variables de entorno:

## Imagen base
FROM ubuntu:22.04

## Establecer variables de entorno
ENV APP_HOME=/opt/myapp
ENV DATABASE_URL=localhost
ENV LOG_LEVEL=info

## Crear el directorio de la aplicación
RUN mkdir -p $APP_HOME

## Establecer el directorio de trabajo
WORKDIR $APP_HOME

Inyección de Variables de Entorno en Tiempo de Ejecución

Pasa variables de entorno durante la ejecución del contenedor:

## Ejecutar el contenedor con variables de entorno personalizadas
docker run -e DATABASE_URL=postgresql://user:pass@db.example.com \
  -e LOG_LEVEL=debug \
  myapp:latest

Configuración de Entorno con Docker Compose

Ejemplo de docker-compose.yml con variables de entorno:

version: "3"
services:
  web:
    image: myapp
    environment:
      - DATABASE_URL=postgresql://user:pass@db
      - LOG_LEVEL=info

Buenas Prácticas para las Variables de Entorno

  • Usa variables de entorno para información confidencial
  • Evita la codificación de credenciales
  • Aprovecha archivos .env para desarrollo local
  • Implementa estrategias de gestión de variables seguras

Mejores Prácticas de Docker

Optimización de Imágenes de Contenedor

Las imágenes Docker eficientes son cruciales para el rendimiento y la seguridad. Implementa compilaciones en varias etapas para reducir el tamaño e la complejidad de la imagen:

## Ejemplo de compilación en varias etapas
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin/
EXPOSE 8080
CMD ["myapp"]

Consideraciones de Seguridad

Práctica de Seguridad Descripción Implementación
Imágenes Base Mínimas Usar imágenes base ligeras Alpine Linux
Usuarios No Raíz Ejecutar contenedores como no raíz Directiva USER
Escaneo de Imágenes Detectar vulnerabilidades Trivy, Docker Scout
graph TD A[Seguridad de Docker] --> B[Imágenes Mínimas] A --> C[Ejecución sin privilegios de raíz] A --> D[Escaneo Regular]

Gestión de Recursos del Contenedor

Implementa restricciones de recursos para evitar la sobrecarga del contenedor:

## Limitar el uso de CPU y memoria
docker run -d \
  --cpus="0.5" \
  --memory="512m" \
  --memory-reservation="256m" \
  myapp:latest

Técnicas de Optimización de Dockerfile

Reduce las capas de la imagen y optimiza el proceso de compilación:

## Combinar comandos para minimizar capas
RUN apt-get update \
 && apt-get install -y python3 \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*

Principios de Orquestación de Contenedores

Aprovecha Docker Compose para despliegues complejos:

version: "3"
services:
  web:
    image: myapp
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    ports:
      - "8080:80"

Estrategias de Registro y Monitoreo

Configura el registro y monitoreo centralizados:

## Registro en archivos JSON con límites de tamaño
docker run --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myapp:latest

Resumen

Docker representa un enfoque revolucionario para el despliegue de software, ofreciendo a los desarrolladores herramientas potentes para crear, gestionar y escalar aplicaciones en diferentes entornos informáticos. Al dominar las técnicas de contenedorización, los desarrolladores pueden lograr mayor consistencia, portabilidad y eficiencia en sus flujos de trabajo de desarrollo y despliegue de software.