🐳 Docker

  • old docker antes de procesar en gpt
  • Docker Avanzado Orquestación, Infraestructura y Estrategias de Producción
  • Infraestructura Distribuida y Despliegue Multinube
  • Infraestructura Multinube paso a paso con Terraform + Kubernetes + ArgoCD
  • Integración Dev + Testing + Seguridad con Docker
  • DevSecOps + Supply Chain Security con Docker
  • Testing Distribuido y Simulación de Microservicios con Docker
  • Observabilidad Avanzada y Trazabilidad Distribuida
  • Docker Avanzado Integración, Rendimiento y Ecosistema Contemporáneo
  • Docker CLI Cheatsheet
  • Super Docker Cheat Sheet

    🔗 Temas Relacionados

  • Linux
  • microservicios
  • Backend
  • Automatizacion y Build
  • Kubernetes
  • Alternativa open source: Podman
  • Sistemas
  • Redes
  • Networking-docker
  • proxy
  • nginx
  • jenkins
  • devops
  • ciberseguridad
  • Databases
  • PHP
  • Wordpress
  • Moodle
  • DevSecOps

⚙️ Entorno y Configuración

  • 💻
  • Cloudflare Pages
  • WSL2 wsl
    • Problemas al reinstalar
    • Usar hub y pull para backup
    • Rutas en resources
    • Uninstall-docker-desktop
  • Extensiones útiles
    • Portainer
    • Docker Desktop Extensions (monitorización, UI, limpieza)

🧱 Montaje y Persistencia


🚀 Guías y Cursos


🧩 Conceptos Clave

🏗️ Arquitectura Docker

  • Host: máquina física o virtual donde corre Docker
  • Cliente: CLI o interfaz que envía comandos al daemon
  • Daemon: servicio principal que ejecuta contenedores
  • Imágenes: plantillas inmutables de contenedores
  • Contenedores: instancias ejecutables de imágenes
  • Redes y Volúmenes: aislamiento y persistencia de datos
  • Tipos de virtualización: namespaces, cgroups, overlay networks

🧾 Docker CLI Básico

🧱 Imágenes y Contenedores

docker ps -a           # Lista todos los contenedores
docker stop <id>       # Detiene un contenedor
docker image rm node   # Elimina una imagen
docker logs --follow   # Sigue logs de ejecución
docker run -d mongo    # Crea y ejecuta contenedor Mongo

`

  • Crear contenedor con nombre: docker create --name nombre imagen
  • Iniciar contenedor existente: docker start <id>
  • Referenciar contenedores por nombre o ID
  • Renombrar contenedores para facilitar mantenimiento

🔌 Networking y Puertos

🌐 Port Mapping

docker create -p27017:27017 --name ito mongo
docker run --name ito2 -p27017:27017 -d mongo
  • 27017:27017 → mapea puerto host:contenedor
  • Permite acceder a servicios desde el host
  • Ideal para peticiones externas (p.ej. conexión a Mongo desde nextjs)

🕸️ Redes Docker

docker network ls          # Listar redes
docker network create red  # Crear red
docker network rm red      # Borrar red
  • Conexión entre contenedores mediante --network
  • Usar nombre del contenedor como host en conexiones
  • Ejemplo: conexión mongoose.connect("mongodb://mongo:27017/db")

🧰 Dockerfile y Builds

📄 Crear una Imagen Personalizada

docker build -t app:1 .
  • -t asigna etiqueta (nombre:versión)
  • . define el contexto de build
  • Usar imágenes base ligeras como alpine

🧠 Variables de Entorno

docker create -p27017:27017 \
--name db \
--network redapp \
-e MONGO_INITDB_ROOT_PASSWORD=pass \
mongo
  • Mantener contraseñas fuera del Dockerfile
  • Preferir .env o env_file en docker compose

📦 Docker Compose

⚙️ Comandos Básicos

docker-compose up -d
docker-compose down
docker-compose up --build
  • docker-compose.yml define múltiples servicios
  • Links: permiten comunicación entre contenedores
  • Volúmenes:

    • Anónimos, host o nombrados
    • Ejemplo:
volumes:
	- mongo-data:/data/db

🧱 Entornos de Desarrollo

docker compose -f docker-compose-dev.yml up
  • context: . y dockerfile: Dockerfile.dev
  • Soporte para hot reload con nodemon o watcher
  • Definir ambientes separados para dev y prod

🔄 Ejemplos Prácticos

🧩 App Node.js + MongoDB

🐍 Backend Python + MariaDB

🧪 Testeo y Linting de Dockerfiles


🧹 Limpieza y Optimización

🧽 Liberar Espacio

docker image prune [OPTIONS]
  • Eliminar imágenes, contenedores o volúmenes no usados
  • Ver guía: Docker Cleanup How to Remove Images, Containers & Volumes-

💾 Reducir Tamaño en WSL2


🔐 Producción y Seguridad

🔒 Recomendaciones Generales

  • Usar env_file en lugar de env inline
  • Restringir acceso root en contenedores
  • Eliminar exposición de puertos innecesarios
  • Autenticación SSH con claves RSA
  ssh-copy-id usuario@servidor
  • Bloquear acceso SSH no autorizado con iptables
  • Configurar políticas de restart, healthcheck, y deploy.limits
  • Monitorear contenedores con herramientas devops

💡 Ejemplos y Recursos


📡 Conexión entre Servicios y Microservicios


omnivore Docker

type: list
name: "Notas con #docker en Omnivore"
order:
  - property: date_saved
    direction: desc
columns:
  - file.name
  - date_saved
filters:
  and:
    - file.inFolder("Omnivore")
    - file.hasTag("docker")
views:
  - type: table
    name: Table
    sort:
      - property: file.mtime
        direction: DESC

omnivore jenkins

type: list
name: "Notas con #docker en Omnivore"
order:
  - property: date_saved
    direction: desc
columns:
  - file.name
  - date_saved
filters:
  and:
    - file.inFolder("Omnivore")
    - file.hasTag("jenkins")
views:
  - type: table
    name: Table
    sort:
      - property: file.mtime
        direction: DESC