Docker
Introducción a docker teórica y práctica con node y python
Install / Use
/learn @Factoria-F5-madrid/DockerREADME
<kbd><img src="./img/contenedores.jpg" style="border:1px solid grey"></kbd>
Docker
Índice
- Introducción
- Conceptos Fundamentales
- Instalaciones
- Flujo de Trabajo en Docker
- Comandos Esenciales
- Recursos Adicionales
1. Introducción
<kbd><img src="https://jorgebenitezlopez.com/github/docker-facebook.png" style="border:1px solid grey"></kbd>
Docker (WEB) 🌐: Develop faster. Run anywhere. Accelerate how you build, share, and run applications
¿Qué es Docker? 👉 un conjunto de herramientas, servicios y entornos que permiten desarrollar, ejecutar o gestionar aplicaciones.
🚀 Docker permite empaquetar aplicaciones con todas sus dependencias, como librerías y versiones de lenguajes, en contenedores ligeros. Esto asegura que la aplicación funcione igual en cualquier entorno, evitando problemas de compatibilidad entre desarrollo y producción.
👨💻 El creador de Docker, Solomon Hykes, quería resolver justamente ese problema: que el código funcionara de la misma forma en desarrollo y en producción. Aunque los contenedores ya existían en Linux, Docker los hizo simples y accesibles para todos. Su popularidad creció rápidamente, pero la empresa tuvo dificultades para monetizar y en 2020 vendió parte de su negocio.
💻 Antes de Docker, las máquinas virtuales (VMs) eran la opción para aislar aplicaciones. Las VMs emulan un sistema operativo completo, lo que las hace más pesadas y lentas. Además, ocupan más espacio y consumen más recursos que Docker, lo que dificulta la escalabilidad y el rendimiento.
<kbd> <img src="./img/memedocker.png" style='width: 70%; display: block; margin: 0 auto;border:1px solid grey'"> </kbd>🚨 ¿Entendemos para qué sirve? ¿Qué puede pasar en el caso de no usar? ¿Qué se usaba antes? 🚨
2. Conceptos fundamentales
<kbd><img src="./img/conceptosdocker.png" style="border:1px solid grey"></kbd>
📖 Dockerfile: Es como una receta que especifica, paso a paso, cómo preparar un entorno en el que se ejecutará una aplicación.
🖼️ Imágenes: Una imagen es una plantilla que contiene todo lo necesario para ejecutar un contenedor: el código de la aplicación, el entorno de ejecución, las dependencias, etc. Las imágenes pueden ser compartidas a través de repositorios como Docker Hub. Las imágenes se crean a partir de un Dockerfile y se pueden ejecutar como contenedores.
[!NOTE] Una imagen de Docker no es magia, son archivos en tu disco que contienen:
- Sistema base + Dependencias y librerías + Tu código + Metadatos
📦 Contenedores: Un contenedor es una instancia en ejecución de una imagen. Es el entorno aislado en el que se ejecuta la aplicación. Cada contenedor tiene su propio sistema de archivos, procesos, redes y espacio de CPU/memoria. Piensa en el contenedor como una "caja" donde vive y se ejecuta la aplicación, separada del resto del sistema.
[!NOTE] El contenedor es la imagen en ejecución, levantada, activa.
Una imagen se convierte en contenedor cuando Docker la levanta y la hace funcionar.
📜 Docker Compose: Docker Compose es una herramienta que permite definir y ejecutar aplicaciones multicontenedor. Se utiliza un archivo docker-compose.yml para configurar los servicios de una aplicación, como bases de datos, servidores, etc., y luego se ejecutan con un solo comando.
💾 Volúmenes : Los volúmenes en Docker se utilizan para persistir datos más allá del ciclo de vida de los contenedores, los cuales son efímeros y pueden ser eliminados fácilmente. Los volúmenes permiten que los datos persistan incluso después de que el contenedor haya sido destruido. Además, también se pueden utilizar para mapear código entre el sistema anfitrión y el contenedor, lo que facilita la edición en tiempo real dentro del contenedor.
[!NOTE] Un volumen es un directorio en el sistema de archivos del host que Docker administra
¿Todavía con dudas? quizás estas métaforas te puedan ayudar...
🥣 Metáfora Cocina
Es habitual que se confundan los términos de imágen y contenedor e incluso usarse únicamente el término contenedor para hacer referencia a ambos. Pero la realidad es que nunca se puede construir un contenedor o descargar uno, ya que los contenedores solo existen durante el tiempo de ejecución. Las imágenes, por otro lado, son archivos inmutables: no puedes editar una imagen después de haberla creado.
La
imagenes un plato pre-cocinado y congelado.El
contenedores el delicioso manjar.
🧙♂️ Cápsula del tiempo
Docker es como una cápsula del tiempo que congela tu aplicación con todo lo necesario para que siempre funcione igual, aquí o en cualquier otro sitio.
- Guarda no solo tu código, sino también el sistema operativo base, librerías, runtimes y dependencias.
- Esa “foto” (la imagen) siempre se comportará igual, sin importar si pasan meses o años.
- Cuando corres el contenedor, básicamente “revives” ese mismo entorno exacto en el que funcionaba tu proyecto.
👉 La diferencia con una máquina virtual es que Docker no “congela” un ordenador entero con su kernel, sino que empaqueta solo lo necesario para tu app 💁♂️mucho más ligero y portátil.
🚨 🚨 ¿Sabemos qué es una imagen, un contenedor, un volumen y lo que hace el docker compose? 🚨 🚨
3. Instalaciones
Instalar Docker en varios sistemas operativos
-
Docker Desktop (para Windows y macOS)
-
Es una interfaz gráfica (o aplicación local) que facilita la creación, ejecución y gestión de contenedores en tu computadora.Es una plataforma todo-en-uno que incluye:
Docker Engine: El motor que permite construir y correr contenedores localmenteDocker Compose: Una herramienta para definir y correr aplicaciones multi-contenedor mediante un archivo docker-compose.ymlMáquina virtual: En macOS y Windows, Docker Desktop utiliza una VM (máquina virtual) para ejecutar Linux, ya que Docker depende del kernel de Linux
-
Entre las funciones de Docker Desktop está construir imágenes Docker desde un Dockerfile y ejecutar y gestionar contenedores localmente. <kbd><img src="https://jorgebenitezlopez.com/github/docker-container.png" style="border:1px solid grey"></kbd>
-
-
Docker CLI (para Linux)
- En Linux, Docker se instala directamente como una herramienta de línea de comandos (CLI) que se gestiona desde el terminal.
- Los comandos permiten construir imágenes, ejecutar contenedores y gestionar el ecosistema de manera directa.
- Instrucciones para instalar en:Ubuntu, CentOS, Debian <kbd><img src="./img/terminaldocker.png" style="border:1px solid grey"></kbd>
-
Docker Hub (para la nube)
- Es el repositorio oficial donde se almacenan y comparten imágenes de Docker.Los usuarios pueden descargar imágenes públicas o almacenar las suyas propias.Es un recurso clave para obtener imágenes oficiales de sistemas operativos, aplicaciones y servicios.Su función es similar a un repositorio de código como GitHub o GitLab.
- Docker Hub nos permite:
- Almacenar y compartir imágenes Docker públicamente o de manera privada (2 con la cuenta privada)
- Distribuir tus imágenes a otras personas o sistemas (en un entorno de producción, CI/CD, etc.)
- Descargar imágenes preconstruidas de aplicaciones populares (Nginx, Redis, MongoDB, Node.js, etc.), que puedes usar como base para tus propios contenedores
<kbd><img src="https://jorgebenitezlopez.com/github/dockerhub.png" style="border:1px solid grey"></kbd>
<a href="/PROBLEMAS_PROCESADORES.md" target="_blank">¿Tienes problemas con los procesadores?</a>
4. Flujo de trabajo en docker
<p> <img src="./img/flujodocker.png" style="width: 100%"> </p>Son 3 pasos:
- Disponer de un Dockerfile
- Construir la imagen a partir del dockerfile con
docker build- Levantar un contenedor de la imagen creada con
docker run
El flujo de trabajo en Docker sigue varios pasos clave que van desde la creación de una imagen hasta la ejecución de un contenedor. A continuación, te explicamos el proceso paso a paso, además de algunos conceptos relacionados con la configuración de variables y el ciclo de vida de los contenedores.
4.1. Creación del Dockerfile
Se puede hacer con docker init te detecta el code que tienes
Ejemplo básico de un Dockerfile:
FROM python:3.8-slim # Instalamos una imagen
COPY . /app # Copiamos un directorio
WORKDIR /app # Creamos un directorio
RUN pip install -r requirements.txt # Instalamos
CMD ["python", "app.py"] # Ejecutamos
4.1. Construcción de la Imagen
docker build -t mi-aplicacion:latest .
4.2 Configurar variables en el Dockerfile de forma sencilla
Durante la ejecución de un contenedor, puedes pasar variables de entorno para personalizar la configuración sin modificar el código. Puedes definir variables directamente en el Dockerfile o pasar valores al momento de ejecutar el contenedor.
# En el dockerfile
ENV API_KEY=myapikey
# O pasarla en momento de ejecución
docker run -e API_KEY=myapikey mi-aplicacion
📌 Importante diferenciar entre ARG y ENV. ARG define variables que se pasan en tiempo de construcción. ENV define variables que se usan en tiempo de ejecución dentro del contenedor.
ARG BUILD_ENV=development
ENV APP_ENV=${BUILD_ENV}
RUN echo "Building for environment: ${APP_ENV}``
4.3 Ejecutar un contenedor
docker run -d --name mi-contenedor -p 8080:80 mi-aplicacion
Este comando ejecuta el contenedor en segundo plano
Related Skills
node-connect
349.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
prose
349.7kOpenProse VM skill pack. Activate on any `prose` command, .prose files, or OpenProse mentions; orchestrates multi-agent workflows.
frontend-design
109.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
