Gestión Avanzada de Contenedores Docker
Ahora que ha ejecutado con éxito su aplicación web en un contenedor Docker, exploremos algunas características y técnicas adicionales para administrar contenedores Docker.
Ejecutando Múltiples Instancias
Puede ejecutar múltiples instancias de su aplicación web en diferentes puertos. Esto es útil para realizar pruebas o ejecutar diferentes versiones de su aplicación simultáneamente.
Primero, detengamos y eliminemos nuestro contenedor anterior:
docker rm -f my-web-container
Ahora, ejecutemos dos instancias de nuestra aplicación web en diferentes puertos:
docker run -d -p 5000:5000 --name web-app-1 my-flask-app
docker run -d -p 5001:5000 --name web-app-2 my-flask-app
Verifique que ambos contenedores se estén ejecutando:
docker ps
Debería ver dos contenedores en ejecución:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
xxxxxxxxxxxx my-flask-app "python app.py" xx seconds ago Up xx seconds 0.0.0.0:5001->5000/tcp web-app-2
xxxxxxxxxxxx my-flask-app "python app.py" xx seconds ago Up xx seconds 0.0.0.0:5000->5000/tcp web-app-1
Ahora puede acceder a la misma aplicación en dos puertos diferentes:
Límites de Recursos del Contenedor
Docker le permite establecer límites de recursos para sus contenedores. Esto es útil para evitar que un contenedor consuma demasiados recursos del sistema.
Detengamos y eliminemos nuestros contenedores anteriores:
docker rm -f web-app-1 web-app-2
Ahora, ejecutemos un contenedor con límites de memoria y CPU:
docker run -d -p 5000:5000 --name limited-container --memory=512m --cpus=0.5 my-flask-app
Este comando crea un contenedor con:
- Un máximo de 512MB de memoria
- Un máximo de 0.5 núcleos de CPU
Verifique que el contenedor se esté ejecutando:
docker ps
Variables de Entorno del Contenedor
Las variables de entorno son una forma común de configurar aplicaciones en contenedores Docker. Modifiquemos nuestra aplicación Flask para usar una variable de entorno:
docker rm -f limited-container
Cree una nueva versión del archivo app.py:
cd ~/project/my-web-app
nano app_env.py
Agregue el siguiente código:
import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
app_name = os.environ.get('APP_NAME', 'Default App')
return f"<h1>Hello from {app_name}!</h1><p>This is a simple web application running in a Docker container.</p>"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Presione Ctrl+O seguido de Enter para guardar el archivo, luego Ctrl+X para salir de nano.
Cree un nuevo Dockerfile:
nano Dockerfile-env
Agregue el siguiente contenido:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app_env.py ./app.py
EXPOSE 5000
CMD ["python", "app.py"]
Presione Ctrl+O seguido de Enter para guardar el archivo, luego Ctrl+X para salir de nano.
Construya una nueva imagen:
docker build -t my-flask-app-env -f Dockerfile-env .
Ahora, ejecute el contenedor con una variable de entorno:
docker run -d -p 5000:5000 --name env-container -e APP_NAME="Customized App" my-flask-app-env
Acceda a la aplicación web:
curl http://localhost:5000
Debería ver:
<h1>Hello from Customized App!</h1><p>This is a simple web application running in a Docker container.</p>
Esto demuestra cómo pasar la configuración a sus aplicaciones en contenedores utilizando variables de entorno.