docker-compose.yml y Dockerfile
Tanto docker-compose.yml como Dockerfile se usan en Docker, pero cumplen funciones diferentes:
| Archivo | Función |
|---|---|
Dockerfile | Define cómo se construye una imagen personalizada de Docker. |
docker-compose.yml | Define cómo se ejecutan uno o más contenedores y cómo interactúan entre ellos. |
¿Cómo funciona un Dockerfile?
El Dockerfile se usa para crear una imagen personalizada de Docker. Una imagen es como una plantilla que define qué sistema operativo, aplicaciones y configuraciones tendrá el contenedor.
Ejemplo de Dockerfile
Explicación de cada instrucción
| Instrucción | Explicación |
|---|---|
FROM | Define la imagen base a partir de la cual se construirá la nueva imagen. |
USER root | Cambia al usuario root para instalar paquetes. |
RUN | Ejecuta comandos en la imagen, como instalar software adicional. |
USER postgres | Cambia de nuevo al usuario postgres. |
COPY | Copia archivos al contenedor. En este caso, un script SQL para inicializar la base de datos. |
EXPOSE | Informa que el contenedor usará el puerto 5432. |
CMD | Define el comando que se ejecutará cuando el contenedor inicie. |
(Opcional) Agregar un archivo SQL para inicializar la base de datos
Crea un archivo init.sql en la misma carpeta si quieres cargar datos al inicio.
init.sql en la misma carpeta si quieres cargar datos al inicio.init.sql
¿Cómo usar un Dockerfile?
¿Cómo funciona docker-compose.yml?
El docker-compose.yml se usa para definir y orquestar múltiples contenedores con configuraciones específicas. En lugar de ejecutar docker run manualmente, docker-compose permite levantar varios servicios con un solo comando.
Ejemplo de docker-compose.yml
Explicación de cada parte
| Sección | Explicación |
|---|---|
version | Indica la versión del esquema de docker-compose. |
services | Lista los servicios (contenedores) que se van a ejecutar. |
db | Nombre del servicio de la base de datos PostgreSQL/PostGIS. |
build | Le dice a Docker que construya la imagen usando el Dockerfile en la misma carpeta. |
container_name | Nombre personalizado del contenedor. |
deploy | Configuración de límites de memoria y CPU (se usa en Docker Swarm). |
restart | Indica que el contenedor se reiniciará siempre si se detiene. |
ports | Mapea el puerto 5432 del contenedor al 30000 en la máquina host. |
environment | Variables de entorno para PostgreSQL. |
volumes | Define almacenamiento persistente para los datos de la base de datos. |
¿Cómo usar docker-compose.yml?
¿Cómo trabajan juntos?
El Dockerfile define cómo se construye la imagen.
El docker-compose.yml define cómo se ejecutan los contenedores con esa imagen.
Cuando docker-compose.yml usa build: ., Docker busca el Dockerfile en la misma carpeta y lo usa para construir la imagen.
Resumen
| Diferencia | Dockerfile | docker-compose.yml |
|---|---|---|
| ¿Qué hace? | Define la imagen personalizada. | Define y ejecuta los contenedores. |
| ¿Cuándo usarlo? | Si necesitas modificar la imagen base. | Si necesitas varios servicios o configuraciones avanzadas. |
| ¿Cómo se ejecuta? | docker build → docker run | docker-compose up |
