Gerenciamento Avançado de Containers Docker
Agora que você executou com sucesso sua aplicação web em um container Docker, vamos explorar alguns recursos e técnicas adicionais para gerenciar containers Docker.
Executando Múltiplas Instâncias
Você pode executar múltiplas instâncias da sua aplicação web em diferentes portas. Isso é útil para testes ou para executar diferentes versões do seu aplicativo simultaneamente.
Primeiro, vamos parar e remover nosso container anterior:
docker rm -f my-web-container
Agora, vamos executar duas instâncias da nossa aplicação web em diferentes portas:
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 se ambos os containers estão em execução:
docker ps
Você deve ver dois containers em execução:
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
Agora você pode acessar a mesma aplicação em duas portas diferentes:
Limites de Recursos do Container
O Docker permite que você defina limites de recursos para seus containers. Isso é útil para evitar que um container consuma muitos recursos do sistema.
Vamos parar e remover nossos containers anteriores:
docker rm -f web-app-1 web-app-2
Agora, vamos executar um container com limites de memória e CPU:
docker run -d -p 5000:5000 --name limited-container --memory=512m --cpus=0.5 my-flask-app
Este comando cria um container com:
- Um máximo de 512MB de memória
- Um máximo de 0.5 núcleos de CPU
Verifique se o container está em execução:
docker ps
Variáveis de Ambiente do Container
Variáveis de ambiente são uma maneira comum de configurar aplicações em containers Docker. Vamos modificar nossa aplicação Flask para usar uma variável de ambiente:
docker rm -f limited-container
Crie uma nova versão do arquivo app.py:
cd ~/project/my-web-app
nano app_env.py
Adicione o seguinte 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)
Pressione Ctrl+O seguido por Enter para salvar o arquivo, depois Ctrl+X para sair do nano.
Crie um novo Dockerfile:
nano Dockerfile-env
Adicione o seguinte conteúdo:
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"]
Pressione Ctrl+O seguido por Enter para salvar o arquivo, depois Ctrl+X para sair do nano.
Construa uma nova imagem:
docker build -t my-flask-app-env -f Dockerfile-env .
Agora, execute o container com uma variável de ambiente:
docker run -d -p 5000:5000 --name env-container -e APP_NAME="Customized App" my-flask-app-env
Acesse a aplicação web:
curl http://localhost:5000
Você deve ver:
<h1>Hello from Customized App!</h1><p>This is a simple web application running in a Docker container.</p>
Isso demonstra como passar a configuração para suas aplicações em container usando variáveis de ambiente.