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 |