Cómo Crear Contenedores Docker desde Cero

DockerBeginner
Practicar Ahora

Introducción

Este tutorial proporciona una guía completa sobre el trabajo con Docker Compose, centrándose en la solución del error "docker: 'compose' no es un comando de docker". Aprenderás a instalar y configurar Docker Compose, a construir y gestionar tus aplicaciones multicontenedor, y a explorar las mejores prácticas para un uso eficaz de Docker Compose.

Fundamentos de Docker

Introducción a la Contención con Docker

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

Conceptos Fundamentales de Docker

¿Qué es Docker?

Docker es una plataforma de código abierto para la contención que permite a los desarrolladores automatizar el despliegue, el escalado y la gestión de aplicaciones. Ofrece una alternativa ligera a las máquinas virtuales tradicionales creando entornos aislados llamados contenedores.

Componentes Clave de Docker

Componente Descripción
Docker Engine Entorno de ejecución principal para crear y ejecutar contenedores
Imagen Docker Plantilla de solo lectura que contiene el código de la aplicación y sus dependencias
Contenedor Docker Instancia ejecutable de una imagen Docker
Dockerfile Archivo de texto que define las instrucciones de construcción del contenedor

Arquitectura de Docker

graph TD
    A[Cliente Docker] --> B[Daemon de Docker]
    B --> C[Runtime de Contenedores]
    B --> D[Registro de Imágenes]
    D --> E[Docker Hub]

Comandos y Ejemplos Básicos de Docker

Instalación de Docker en Ubuntu 22.04

## Actualizar paquetes del sistema
sudo apt update

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

## Añadir la clave GPG oficial de Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Configurar el repositorio de Docker
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Instalar Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Operaciones Básicas de Docker

## Extraer una imagen de Docker Hub

## Listar imágenes disponibles

## Ejecutar un contenedor

## Listar contenedores en ejecución

## Detener un contenedor

Beneficios de la Tecnología de Contenedores

La contención con Docker ofrece varias ventajas:

  • Entornos de aplicación consistentes
  • Despliegue y escalado más rápidos
  • Menor consumo de recursos
  • Flujo de trabajo de desarrollo mejorado
  • Independencia de la plataforma

Casos de Uso de Contenedores Docker

Docker se utiliza ampliamente en:

  • Arquitectura de microservicios
  • Integración Continua/Entrega Continua (CI/CD)
  • Desarrollo de aplicaciones nativas de la nube
  • Entornos de desarrollo y pruebas

Flujo de Trabajo de Docker Compose

Entendiendo Docker Compose

Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker multicontenedor. Permite a los desarrolladores utilizar un archivo YAML para configurar los servicios de la aplicación, las redes y los volúmenes, simplificando el proceso de gestión de entornos contenedorizados complejos.

Arquitectura de Docker Compose

graph TD
    A[Docker Compose] --> B[docker-compose.yml]
    B --> C[Servicio 1]
    B --> D[Servicio 2]
    B --> E[Servicio 3]
    C --> F[Red]
    D --> F
    E --> F

Configuración de Docker Compose

Estructura del archivo YAML

Clave Descripción
version Versión del formato del archivo Compose
services Define los contenedores individuales
networks Configura la red de los contenedores
volumes Gestiona el almacenamiento de datos persistentes

Ejemplo Práctico: Despliegue de una Aplicación Web

docker-compose.yml de ejemplo

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./website:/usr/share/nginx/html
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

Comandos de Docker Compose

## Instalar Docker Compose en Ubuntu 22.04
sudo apt update
sudo apt install docker-compose

## Validar el archivo compose
docker-compose config

## Iniciar la aplicación multicontenedor
docker-compose up -d

## Ver los contenedores en ejecución
docker-compose ps

## Detener y eliminar los contenedores
docker-compose down

Técnicas de Orquestación de Servicios

Docker Compose permite una orquestación avanzada de servicios:

  • Definición de dependencias entre contenedores
  • Gestión de variables de entorno
  • Configuración de conexiones de red
  • Control del orden de inicio de los contenedores

Escalabilidad y Flexibilidad

Las aplicaciones multicontenedor se benefician de:

  • Arquitectura modular
  • Fácil escalado horizontal
  • Gestión de configuración simplificada
  • Entornos de desarrollo consistentes

Técnicas Avanzadas de Docker

Configuración de Redes Docker

Tipos de Redes

Modo de Red Descripción
Puente Modo de red predeterminado
Anfitrión Usar directamente la red del anfitrión
Superpuesta Comunicación multianfitrión
Macvlan Asignar dirección MAC
graph TD
    A[Red Docker] --> B[Red de Puente]
    A --> C[Red de Anfitrión]
    A --> D[Red Superpuesta]
    A --> E[Red Macvlan]

Creación de Redes Personalizadas

## Crear una red de puente personalizada
docker network create --driver bridge custom_network

## Listar redes
docker network ls

## Inspeccionar detalles de la red
docker network inspect custom_network

Gestión de Recursos de Contenedores

Restricciones de Recursos

services:
  webapp:
    image: nginx
    deploy:
      resources:
        limits:
          cpus: "0.50"
          memory: 512M
        reservations:
          cpus: "0.25"
          memory: 256M

Gestión de Volúmenes Docker

## Crear un volumen con nombre
docker volume create app_data

## Montar el volumen en el contenedor
docker run -v app_data:/app/data nginx

## Listar volúmenes
docker volume ls

## Eliminar volúmenes no utilizados
docker volume prune

Optimización de Dockerfile

## 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
ENTRYPOINT ["myapp"]

Solución de Problemas Avanzados

## Inspección de registros de contenedores

## Monitoreo de recursos en tiempo real

## Detalles del proceso del contenedor

Mejoras de Seguridad

Opciones de Seguridad en Tiempo de Ejecución

## Ejecutar un contenedor con un sistema de archivos de solo lectura
docker run --read-only nginx

## Limitar las capacidades del contenedor
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

Monitoreo de Rendimiento

## Información general de Docker en el sistema
docker system info

## Análisis del uso del disco
docker system df

## Eliminar recursos no utilizados
docker system prune -a

Resumen

Al finalizar este tutorial, comprenderás a fondo Docker Compose y cómo solucionar el error "docker: 'compose' no es un comando de docker". Podrás configurar, gestionar y escalar tus aplicaciones Docker Compose con confianza, siguiendo las mejores prácticas del sector para un rendimiento y una mantenibilidad óptimos.