Inicio Blog Guía Completa de Docker: Desde …
Actualizado el 07 Dic, 2025

Guía Completa de Docker: Desde Imágenes hasta Contenedores y Despliegues

Una guía completa y educativa para aprender Docker desde cero: imágenes, contenedores, Dockerfile, volúmenes, redes y despliegues.

Guía Completa de Docker: Desde Imágenes hasta Contenedores y Despliegues
Guía Completa de Docker Aprende Docker desde cero de forma clara, ordenada y con ejemplos prácticos. Esta guía está diseñada para ayudarte a entender los conceptos principales y aplicarlos en proyectos reales. 1. Imágenes vs Contenedores Imagen Contenedor Incluye el sistema operativo, dependencias, archivos de la app, variables de entorno. Es una instancia en ejecución creada a partir de una imagen. Es una plantilla inmutable. Es un proceso aislado. No se modifica mientras se ejecuta. Puede iniciarse, detenerse o eliminarse. Puedes crear múltiples contenedores desde una misma imagen. Lo que hagas dentro de un contenedor no afecta a otros (a menos que la app lo requiera). 2. Comandos base Comandos principales docker images — lista imágenes instaladas. docker ps — muestra contenedores activos. docker ps -a — muestra todos los contenedores (activos y detenidos). docker container — listado de operaciones disponibles. 3. Dockerfile Para dockerizar una aplicación necesitas un archivo Dockerfile. En él defines la imagen base, comandos de instalación, archivos a copiar y el comando de ejecución final. Ejemplo base FROM node:20.5.0-alpine3.18 WORKDIR /app/ COPY package*.json . RUN npm install COPY . . CMD ["npm", "run", "dev"] Explicación rápida FROM — imagen base. WORKDIR — ruta donde se ejecutarán los comandos. COPY — copia archivos desde tu PC a la imagen. RUN — ejecuta comandos mientras se construye la imagen. CMD — ejecuta la aplicación cuando inicia el contenedor. 4. Construcción y ejecución de imágenes Construir una imagen docker build -t nombre-app . Ejecutar contenedor interactivo docker run -it nombre-app TIP Si necesitas entrar a la terminal de la imagen, usa sh o bash según esté disponible. 5. COPY y buenas prácticas COPY . /app/ COPY package.json /app/ COPY ["Hola mundo.txt", "/app/"] Recomendación profesional Primero copia las dependencias, instala y luego copia el proyecto completo. Esto mejora la cache y acelera reconstrucciones. 6. WORKDIR Configura el directorio de trabajo. WORKDIR /app/ Equivale a ejecutar internamente: cd /app/ 7. ADD vs COPY ADD permite: Descargar archivos desde URLs Descomprimir .zip Regla general: ❗ Usa COPY siempre que sea posible. ADD solo cuando necesites sus funciones extra. 8. .dockerignore Evita copiar archivos innecesarios. Ejemplo: node_modules .git env/ 9. RUN Ejecuta comandos durante la construcción. RUN apk add <paquete> RUN npm install 10. Optimización de capas Cada instrucción crea una nueva capa interna. Cambiar una capa afecta a todas las posteriores. IMPORTANTE Si cambias cualquier archivo copiado con COPY, Docker debe recalcular todas las capas siguientes. 11. Variables de entorno ENV API_URL=https://api.miweb.com Ver las variables dentro del contenedor: printenv 12. CMD vs ENTRYPOINT CMD CMD ["npm", "run", "dev"] ENTRYPOINT ENTRYPOINT ["npm", "start"] Diferencias clave CMD es fácil de sobrescribir. ENTRYPOINT es más rígido y se usa para comandos obligatorios. 13. Exponer puertos EXPOSE 5173 ❗ EXPOSE solo documenta. No expone el puerto por sí mismo. Debes mapearlo al ejecutar el contenedor. 14. Usuarios en Docker (seguridad) Por defecto todo corre como root, lo cual es inseguro. Crear usuario y grupo RUN addgroup react && adduser -S -G react react USER react Cambiar permisos de archivos COPY --chown=react:react package*.json . 15. Eliminar imágenes y contenedores docker container prune docker image prune docker rm <id> docker image rm <imagen:tag> 16. Etiquetas (Tags) Sirven para versionar imágenes: docker build -t app-react:1 . docker image tag app-react:1 app-react:2 Nunca uses latest en producción. 17. Publicar imágenes en Docker Hub docker push usuario/app:1 Requiere sesión iniciada: docker login 18. Guardar y cargar imágenes Guardar: docker image save -o app.tar app-react:1 Cargar: docker image load -i app.tar 19. Contenedores Crear docker create --name webapp app-react:1 Iniciar docker start webapp docker start -i webapp Crear y ejecutar docker run -d --name webapp app-react:1 20. Logs docker logs webapp docker logs -f webapp docker logs -n 20 webapp 21. Puertos docker run -d -p 80:5173 app-react:1 Formato: <puerto-host>:<puerto-contenedor> 22. Ejecutar comandos dentro del contenedor Ingresar con shell: docker exec -it webapp sh Ejecutar un comando puntual: docker exec webapp ls 23. Volúmenes Crear volumen docker volume create appdata Usarlo docker run -d -v appdata:/data app-react:1 Volúmenes en desarrollo docker run -d -p 80:5173 -v ./src:/app/src app-react:4 Útil en desarrollo, no recomendado en producción. 24. Copiar archivos Desde contenedor → host: docker cp contenedor:/ruta/archivo ./archivo Desde host → contenedor: docker cp archivo contenedor:/ruta 25. Docker Compose Ejemplo completo version: '3.8' services: app: build: ./frontend ports: - 80:5173 volumes: - ./frontend/src:/app/src api: build: ./backend ports: - 3000:3000 environment: DB_URL: mongodb://db/gamify volumes: - ./backend/app:/app/app db: image: mongo:5.0.19-focal ports: - 27017:27017 volumes: - gamify:/data/db volumes: gamify: Comandos principales docker compose up docker compose up --build -d docker compose logs docker compose ps docker compose down 26. Redes en Docker Tipos de redes principales: bridge (por defecto) host null overlay (Kubernetes) Listar redes: docker network ls Probar conectividad: docker exec -it contenedor sh ping api 27. depends_on Sirve para asegurar que un contenedor se construya antes que otro. depends_on: - db Advertencia: No garantiza que el servicio esté listo, solo que se ejecutó el contenedor. 28. Ejecutar tests con Docker api-tests: image: holamundo-api environment: DB_URL: mongodb://db/gamify volumes: - ./backend/app:/app/app depends_on: - db command: npm test 29. Despliegue de aplicaciones Opciones: Docker simple en VPS Docker Compose Kubernetes (K8s) Swarm (obsoleto) 30. Ambientes múltiples docker-compose.yml → desarrollo docker-compose.prod.yml → producción 31. Optimización para producción Ejemplo: eliminar pasos innecesarios como creación de usuarios u opciones para desarrollo. Conclusión Con esta guía tienes un documento completo y educativo para aprender Docker desde la base hasta conceptos avanzados como redes, volúmenes, Docker Compose y despliegues. Puedes utilizarla como referencia personal o compartirla con otros desarrolladores que quieran entender Docker sin complejidades innecesarias.

¿Te gustó este artículo?

Compártelo en tus redes sociales