Criando Ambientes de Desenvolvimento com Docker
Criando um Dockerfile
Um Dockerfile é um arquivo de texto que contém todos os comandos necessários para construir uma imagem Docker. Aqui está um exemplo de Dockerfile para uma aplicação web Python simples:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Este Dockerfile:
- Inicia a partir da imagem base
python:3.9-slim.
- Define o diretório de trabalho para
/app.
- Copia o arquivo
requirements.txt para o diretório de trabalho.
- Instala as dependências Python listadas em
requirements.txt.
- Copia o código da aplicação para o diretório de trabalho.
- Especifica o comando para executar a aplicação (
python app.py).
Construindo uma Imagem Docker
Para construir uma imagem Docker a partir do Dockerfile, execute o seguinte comando no mesmo diretório do Dockerfile:
docker build -t my-python-app .
Isso construirá uma imagem Docker com a tag my-python-app.
Executando um Contêiner Docker
Para executar um contêiner Docker a partir da imagem my-python-app, use o seguinte comando:
docker run -p 8080:8080 my-python-app
Isso iniciará um novo contêiner e mapeará a porta 8080 no host para a porta 8080 no contêiner.
Desenvolvimento com Docker Compose
Docker Compose é uma ferramenta para definir e executar aplicações Docker multi-contêiner. Aqui está um exemplo de arquivo docker-compose.yml para uma aplicação web simples com um banco de dados:
version: "3"
services:
web:
build: .
ports:
- 8080:8080
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_USER: myapp
POSTGRES_PASSWORD: secret
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Este arquivo docker-compose.yml define dois serviços: web e db. O serviço web constrói uma imagem Docker a partir do diretório atual e mapeia a porta 8080 no host para a porta 8080 no contêiner. O serviço db utiliza a imagem oficial do PostgreSQL e configura um banco de dados para a aplicação.
Para iniciar a aplicação, execute:
docker-compose up -d
Isso iniciará os contêineres web e db em segundo plano.