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.



