POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Guía completa de Docker

## Guía definitiva de Docker

Publicado el 02/09/2025

Guía completa de Docker en español

Introducción a Docker

Docker es una plataforma de contenedores que empaqueta aplicaciones y sus dependencias en unidades ligeras y portables. Así garantizas consistencia entre entornos, aislamiento, eficiencia al compartir el kernel del sistema operativo, portabilidad y escalado sencillo.

Beneficios clave

Consistencia de ejecución en cualquier entorno. Portabilidad total donde Docker esté instalado. Arranque veloz y menor consumo que máquinas virtuales. Escalabilidad simple y segura gracias al aislamiento.

Contenedores vs máquinas virtuales

Los contenedores comparten el kernel del host, son ligeros en MB, arrancan rápido y usan recursos de forma más eficiente. Las máquinas virtuales incluyen un sistema operativo completo, pesan GB, inician más lento y tienen mayor sobrecarga.

Arquitectura de Docker

Componentes núcleo: Cliente Docker con el comando docker, Daemon dockerd que gestiona contenedores, Imágenes de solo lectura como plantillas, Contenedores como instancias de imágenes y Registro para almacenar imágenes como Docker Hub u otros.

Instalación

Linux Ubuntu o Debian

Actualizar índice: sudo apt-get update

Instalar prerequisitos: sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

Añadir clave GPG de Docker: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Agregar repositorio estable de Docker para tu versión de Ubuntu con lsb_release -cs y el archivo docker.list en sources.list.d

Instalar Docker: sudo apt-get update y luego sudo apt-get install docker-ce docker-ce-cli containerd.io

Agregar tu usuario al grupo docker: sudo usermod -aG docker USUARIO

macOS

Con Homebrew: brew install --cask docker

Windows

Instala Docker Desktop desde el sitio oficial y sigue el asistente.

Verificar instalación

docker --version y docker run hello-world

Imágenes de Docker

Las imágenes son plantillas de solo lectura construidas por capas a partir de un Dockerfile.

Comandos básicos de imágenes

Listar imágenes: docker images o docker image ls

Descargar imagen: docker pull ubuntu:20.04 o docker pull nginx:alpine

Eliminar imagen: docker rmi ubuntu:20.04 o docker image rm nginx:alpine

Construir imagen: docker build -t miapp:1.0 .

Historial: docker history ubuntu:20.04

Inspección: docker inspect ubuntu:20.04

Búsqueda: docker search nginx

Convención de nombres

registro-opcional usuario repositorio:tag por ejemplo nginx:latest, ubuntu:20.04, gcr.io proyecto mi-app:v1.0 o localhost:5000/miapp:dev

Contenedores de Docker

Los contenedores son instancias en ejecución de imágenes.

Ciclo de vida

Ejecutar contenedor: docker run ubuntu:20.04

Modo desacoplado: docker run -d nginx:alpine

Modo interactivo: docker run -it ubuntu:20.04 /bin/bash

Listar en ejecución: docker ps, listar todos: docker ps -a

Detener: docker stop id_contenedor o nombre_contenedor

Iniciar detenido: docker start id_contenedor

Reiniciar: docker restart id_contenedor

Eliminar: docker rm id_contenedor y para todos docker rm $(docker ps -aq)

Ejecutar comando dentro: docker exec -it id_contenedor /bin/bash

Opciones útiles

Mapeo de puertos: docker run -p 8080:80 nginx

Montaje de volúmenes: docker run -v ruta_host:ruta_contenedor ubuntu

Variables de entorno: docker run -e MI_VAR=valor ubuntu

Nombre personalizado: docker run --name mi_contenedor ubuntu

Límites de recursos: docker run -m 512m --cpus=1.5 ubuntu

Gestión de contenedores

Logs: docker logs id_contenedor y seguimiento con docker logs -f id_contenedor

Estadísticas: docker stats o docker stats id_contenedor

Procesos: docker top id_contenedor

Inspección: docker inspect id_contenedor

Copiar archivos: docker cp archivo.txt id_contenedor:/ruta/archivo.txt y docker cp id_contenedor:/ruta/archivo.txt ./archivo.txt

Dockerfile

Un Dockerfile es un conjunto de instrucciones para construir una imagen. Instrucciones típicas: FROM para base, RUN para ejecutar comandos, COPY para copiar, WORKDIR para definir directorio, EXPOSE para puertos, ENV para variables, USER para cambiar usuario, CMD o ENTRYPOINT para el proceso principal.

Ejemplo resumido

FROM ubuntu:20.04

WORKDIR /app

RUN apt-get update && apt-get install -y python3 python3-pip && rm -rf /var/lib/apt/lists/*

COPY . .

RUN pip3 install -r requirements.txt

EXPOSE 8000

USER appuser

CMD python3 app.py

Compilaciones multi etapa

Usa una imagen pesada para construir dependencias y otra mínima para producción. Copia solo lo necesario desde la fase builder para reducir tamaño y superficie de ataque.

Construcción de imágenes

Build estándar: docker build -t miapp:1.0 .

Especificar Dockerfile: docker build -f Dockerfile.prod -t miapp:prod .

Argumentos de build: docker build --build-arg VERSION=1.0 -t miapp .

Sin caché: docker build --no-cache -t miapp .

Volúmenes de Docker

Persisten datos más allá del ciclo del contenedor.

Tipos: volúmenes con nombre gestionados por Docker, bind mounts al sistema de archivos del host y tmpfs en memoria.

Comandos de volúmenes

Crear: docker volume create mi_volumen

Listar: docker volume ls

Inspeccionar: docker volume inspect mi_volumen

Eliminar: docker volume rm mi_volumen

Limpiar no usados: docker volume prune

Uso

Con nombre: docker run -v mi_volumen:/data ubuntu

Bind mount: docker run -v ruta_host:ruta_contenedor ubuntu

Solo lectura: docker run -v ruta_host:ruta_contenedor:ro ubuntu

tmpfs: docker run --tmpfs /tmp ubuntu

Redes de Docker

Tipos: bridge por defecto, host usa la red del host, none sin red y overlay para múltiples hosts en Swarm.

Comandos de red

Listar: docker network ls

Crear: docker network create mi_red o docker network create --driver bridge mi_bridge

Inspeccionar: docker network inspect mi_red

Conectar contenedor: docker network connect mi_red mi_contenedor

Desconectar: docker network disconnect mi_red mi_contenedor

Eliminar: docker network rm mi_red

Ejemplo

docker network create --driver bridge red_app

docker run -d --name db --network red_app -e POSTGRES_PASSWORD=clave postgres:13

docker run -d --name web --network red_app -p 8080:80 mi_web_app

Docker Compose

Orquesta aplicaciones multicontenedor con un archivo YAML declarativo. Instalación en Linux con binario de GitHub o via pip, y verificación con docker-compose --version. Comandos frecuentes: docker-compose up para iniciar, -d para modo desacoplado, docker-compose down para detener y limpiar, build para construir, logs para ver registros, exec para entrar en un servicio, ps para listar y restart para reiniciar. También puedes escalar servicios con docker-compose up -d --scale web=3.

Registro de Docker

Docker Hub

Iniciar sesión: docker login

Etiquetar: docker tag miapp:latest usuario/miapp:latest

Subir: docker push usuario/miapp:latest

Descargar: docker pull usuario/miapp:latest

Registro privado

Levantar local: docker run -d -p 5000:5000 --name registry registry:2

Etiquetar local: docker tag miapp:latest localhost:5000/miapp:latest

Push y pull: docker push localhost:5000/miapp:latest y docker pull localhost:5000/miapp:latest

Autenticación

docker login mi-registro.com o pasar credenciales con password-stdin

Mejores prácticas

Usa imágenes base oficiales y minimalistas como alpine. Minimiza capas uniendo comandos RUN y limpia cachés apt. Incluye .dockerignore para excluir node_modules, archivos de logs y repositorios. Evita ejecutar como root creando un usuario no privilegiado. Aprovecha compilaciones multi etapa para reducir el tamaño final.

Seguridad

Escanea imágenes con docker scan. Mantén imágenes actualizadas con docker pull. No incluyas secretos en Dockerfile ni en imágenes, emplea variables de entorno seguras, secretos de Swarm o gestores externos. Usa imágenes base reducidas para disminuir superficie de ataque.

Rendimiento

Optimiza la caché copiando primero archivos de dependencias y luego el código. Elimina archivos innecesarios tras la instalación de paquetes. Revisa el tamaño de imágenes con docker images --format table y reduce donde sea posible.

Resolución de problemas

Si un contenedor no inicia, revisa docker logs id_contenedor y docker inspect id_contenedor. Si un puerto está en uso, identifica el proceso y mapea otro puerto con -p 8081:80. Permiso denegado en Linux se corrige agregando tu usuario al grupo docker y reiniciando la sesión. Si falta espacio, limpia con docker container prune, docker image prune, docker volume prune o docker system prune -a.

Diagnóstico

Información del sistema con docker system info y uso de disco con docker system df. Depura contenedores con docker exec -it, logs -f y docker stats. Para redes, lista e inspecciona con docker network ls y docker network inspect bridge.

Temas avanzados

Docker Swarm

Inicializa con docker swarm init, une nodos con docker swarm join, despliega con docker stack deploy -c archivo.yml pila, lista servicios con docker service ls y escala con docker service scale servicio=5.

Healthchecks

Define HEALTHCHECK con intervalos, tiempos de espera y un comando que verifique la salud de la app, por ejemplo curl -f a una ruta de salud.

Build multi plataforma

Con buildx crea un builder y compila para linux amd64 y arm64 con docker buildx build --platform linux/amd64,linux/arm64 -t miapp:latest --push .

Secretos en Swarm

Crea un secreto con echo secreto | docker secret create nombre - y asócialo con docker service create --secret nombre imagen.

Límites de recursos

Con docker run usa -m 512m y --cpus=1.5. En compose define límites dentro de deploy resources limits.

BuildKit

Habilita características avanzadas como caché de compilación por directorios y montajes temporales para acelerar builds y reducir capas.

Comandos útiles de limpieza y monitoreo

Eliminar contenedores detenidos con docker container prune, imágenes sin usar con docker image prune -a, volúmenes con docker volume prune, redes con docker network prune y todo con docker system prune -a --volumes. Monitorear con docker system info, docker system df, docker stats, docker top servicio y docker events.

Backup y restore

Exporta contenedores con docker export contenedor > backup.tar e impórtalos con docker import backup.tar miapp:backup. Guarda imágenes con docker save miapp:latest > miapp.tar y cárgalas con docker load < miapp.tar.

Q2BSTUDIO y Docker para tu negocio

En Q2BSTUDIO integramos Docker en flujos DevOps modernos para acelerar entregas, mejorar la fiabilidad y optimizar costes. Diseñamos aplicaciones a medida y software a medida listos para contenedores, llevamos tus despliegues a nubes líderes y reforzamos la seguridad desde la base de las imágenes hasta la operación. Descubre cómo nuestros servicios cloud AWS y Azure impulsan la portabilidad, escalabilidad y automatización de tus plataformas, y cómo combinamos contenedores con pipelines CI CD y observabilidad.

Si buscas construir o modernizar soluciones nativas en la nube, nuestros equipos de arquitectura y desarrollo crean microservicios orquestados y entornos de pruebas aislados, alineando tus objetivos de negocio con la eficiencia del runtime de contenedores. También te acompañamos a diseñar y contenedorizAR tus aplicaciones a medida para acelerar la entrega continua.

Palabras clave y capacidades

Aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi, automatización y orquestación con contenedores, infraestructura como código, CI CD, seguridad de la cadena de suministro de software y observabilidad integral.

Consejo final

Empieza por contenerizar un servicio simple, practica con volúmenes y redes, orquesta con Compose, y luego avanza a build multi etapa, seguridad y despliegues en la nube. Con práctica y buenas prácticas, Docker se convierte en un pilar para la agilidad y la confiabilidad de tus plataformas.

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio