Términos comunes
Utilizando un sistema operativo (SO) como referencia para comprender algunos conceptos de Docker.
Dockerfile → Código fuente del SO
- Comparación: Un Dockerfile es como el código fuente de un sistema operativo. Contiene todas las instrucciones necesarias para construir ese SO, como seleccionar el kernel, añadir bibliotecas, configurar servicios, etc.
- En Docker: El Dockerfile es un archivo de texto que contiene las instrucciones para construir una imagen Docker, especificando el sistema operativo base, dependencias, configuraciones, etc.
- Ejemplo: un Dockerfile para construir la imagen del backend, otro para el frontend, y otro para la base de datos (aunque muchas veces se usan imágenes preexistentes para la base de datos).
- Se usa Dockerfile para definir cómo construir cada parte de la aplicación, y Docker Compose para juntar esas partes y ejecutarlas como un sistema cohesionado.
Docker Image → ISO del SO
- Comparación: Una Docker Image es similar a un archivo ISO del SO. Es un paquete inmutable que contiene todos los componentes necesarios para instalar o ejecutar el sistema operativo.
- En Docker: La imagen Docker es un archivo inmutable que incluye todo lo necesario para ejecutar una aplicación, desde el SO base hasta las configuraciones y aplicaciones. Se crea a partir del Dockerfile. Las imágenes son reutilizables.
Docker Container → SO instalado y en ejecución
- Comparación: Un Docker Container es como un sistema operativo que ya ha sido instalado y está en ejecución. Es el entorno en vivo donde se ejecutan las aplicaciones.
- En Docker: Un contenedor es una instancia en ejecución de una imagen Docker, proporcionando un entorno aislado para ejecutar aplicaciones.
- Es posible tener múltiples contenedores basados en la misma imagen.
- Cada contenedor tiene su propio estado y almacenamiento, independiente de otros contenedores.
- Si uno de los contenedores se detiene o se elimina, la imagen sigue estando disponible.
Docker Compose → VirtualBox/VMware
- Comparación: Docker Compose es como VirtualBox o VMware, en el sentido de que permite gestionar y orquestar múltiples sistemas operativos en un entorno virtual.
- En Docker: Docker Compose facilita la gestión de múltiples contenedores que trabajan juntos como parte de una aplicación. Define y ejecuta esos contenedores en conjunto, similar a cómo VirtualBox o VMware gestiona múltiples máquinas virtuales.
- Usa un archivo YAML para configurar los servicios de tu aplicación.
- Para orquestar varios contenedores (backend, base de datos, frontend, etc), asegurando que se inicien en el orden correcto, que se conecten a la misma red, y que cada uno pueda acceder a los recursos necesarios.
- Se usa Dockerfile para definir cómo construir cada parte de la aplicación, y Docker Compose para juntar esas partes y ejecutarlas como un sistema cohesionado.
- Docker Compose es como un "Kubernetes simplificado", ideal para entornos de desarrollo o despliegues pequeños y medianos.
Otros términos
Kubernetes
Es una solución mucho más robusta y compleja, diseñada para manejar aplicaciones a gran escala en producción, con todas las características avanzadas necesarias para orquestar contenedores en un entorno distribuido.
Docker Hub
Repositorio público de imágenes de Docker.
Docker Swarm
Herramienta de orquestación nativa de Docker para clusters de contenedores.
Docker Volume
Almacenamiento persistente que puede ser compartido entre contenedores.
Docker Network
Permite la comunicación entre contenedores Docker y con el mundo exterior.
Tags en Docker Hub
Los tags en Docker Hub pueden incluir información como:
- Versión principal (
17,16) → Indica una versión mayor. - Versión específica (
17.4,16.8) → Es una versión más precisa dentro de una versión mayor. - Distribución base (
bookworm,bullseye) → Indica sobre qué versión de Debian se construyó la imagen. latest→ Usualmente apunta a la última versión estable (pero puede cambiar con el tiempo).
Ejemplo con PostgreSQL
latest→ Última versión estable (actualmente PostgreSQL 17.x).17.4→ PostgreSQL 17, versión específica 17.4.16.8→ PostgreSQL 16, versión específica 16.8.bookworm→ Última versión de PostgreSQL sobre Debian Bookworm.17.4-bookworm→ PostgreSQL 17.4 basado en Debian 12 Bookworm.16.8-bullseye→ PostgreSQL 16.8 basado en Debian 11 Bullseye.
Notas
latestsiempre apuntará a lo más reciente, pero puede romper compatibilidad en actualizaciones futuras.- Para tener estabilidad usar una versión específica (
17.4,16.8) para evitar cambios inesperados en actualizaciones. - Algunos proyectos o entornos de trabajo requieren imágenes basadas en una versión específica de algún sistema, ej. si la infraestructura usa Debian Bookworm
Cuando se usa una imagen de Docker con un tag que no incluye el nombre de la distribución, como:
docker pull postgres:17.4
docker pull postgres:16.8
- Estas imágenes están basadas en Debian, pero la versión de Debian puede cambiar con el tiempo.
- Es decir, hoy
postgres:17.4podría estar basado en Debian 12 (Bookworm), pero en el futuro podría actualizarse a Debian 13 (Trixie) sin previo aviso. - Esto significa que, aunque
postgres:17.4sigue siendo PostgreSQL 17.4, el sistema operativo debajo de PostgreSQL podría cambiar sin que se note. - Si se necesita asegurar de que la base del sistema operativo no cambie, entonces elegir una imagen con el nombre de la distribución:
docker pull postgres:17.4-bookworm # Siempre será Debian 12
docker pull postgres:16.8-bullseye # Siempre será Debian 11