Preparar un proyecto simple de Docker Compose con un contexto de compilación
En este paso, prepararemos un proyecto simple de Docker Compose que incluya un contexto de compilación (build context). Un contexto de compilación es el conjunto de archivos en una ubicación especificada (PATH o URL) que se envían al daemon de Docker para construir una imagen de Docker. Esto es importante porque el Dockerfile y cualquier archivo que necesite (como el código de la aplicación) deben estar dentro del contexto de compilación.
Primero, creemos un directorio para nuestro proyecto. Lo llamaremos my-watch-app
.
mkdir ~/project/my-watch-app
cd ~/project/my-watch-app
Ahora, necesitamos crear un archivo de aplicación simple. Usaremos un script básico de Python que imprime un mensaje.
nano app.py
Agrega el siguiente contenido a app.py
:
print("Hello from the Docker container!")
Guarda y cierra el archivo (Ctrl+X, Y, Enter).
A continuación, necesitamos crear un Dockerfile que construirá una imagen para nuestra aplicación. El Dockerfile copiará nuestro script de Python en la imagen y luego lo ejecutará.
nano Dockerfile
Agrega el siguiente contenido al Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY app.py .
CMD ["python", "app.py"]
Este Dockerfile utiliza una imagen ligera de Python 3.9 como base, establece el directorio de trabajo en /app
, copia app.py
en el directorio /app
y finalmente establece el comando para ejecutar el script de Python cuando el contenedor se inicie.
Finalmente, necesitamos crear un archivo docker-compose.yaml
para definir nuestro servicio. Este archivo le indicará a Docker Compose cómo construir y ejecutar nuestra aplicación.
nano docker-compose.yaml
Agrega el siguiente contenido a docker-compose.yaml
:
version: "3.8"
services:
myapp:
build: .
volumes:
- .:/app
Este archivo docker-compose.yaml
define un servicio llamado myapp
. La instrucción build: .
le indica a Docker Compose que construya la imagen usando el Dockerfile en el directorio actual (que es nuestro contexto de compilación). La línea volumes: - .:/app
monta el directorio actual (.
) en la máquina host en el directorio /app
dentro del contenedor. Esto es crucial para docker compose watch
, ya que permite que los cambios en el host se reflejen en el contenedor.
Ahora, construyamos y ejecutemos nuestro servicio usando Docker Compose para asegurarnos de que todo esté configurado correctamente. Como Docker Compose no está preinstalado, primero debemos instalarlo.
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Ahora podemos usar docker-compose
.
docker-compose up --build
Deberías ver una salida que indica que la imagen se está construyendo y el contenedor se está ejecutando, mostrando "Hello from the Docker container!". Presiona Ctrl+C
para detener el contenedor.