Bem-vindo ao nível final do curso sobre Docker!
Neste nível, vamos juntar todos os conhecimentos e habilidades que adquirimos.
Nas aulas, podem aparecer linguagens de programação ou tecnologias que você não conhece. Você vai precisar configurar portos ou adicionar nomes de métodos – tudo isso com base em um código já pronto, onde 99% do trabalho já foi feito.
Não se preocupe se algo parecer desconhecido – isso é proposital para melhorar a habilidade de: "não sei disso, mas consigo entender rápido".
1.1 Definição do problema
Bora criar um app multicontêiner pequeno e analisar passo a passo todo o processo de desenvolvimento: desde a definição do problema até a demonstração do produto pronto.
Objetivo: criar um app multicontêiner pra gerenciar tarefas, permitindo aos usuários criar, editar, apagar tarefas e atribuí-las a outros usuários. O app vai ter três componentes principais: frontend em ReactJS, backend em Python (Flask) e banco de dados PostgreSQL.
Principais tarefas:
- Definir os requisitos funcionais pra cada componente do app.
- Escolher as tecnologias e ferramentas que serão usadas.
- Preparar o ambiente de desenvolvimento.
1.2 Definição de requisitos funcionais
Requisitos funcionais para o aplicativo de gerenciamento de tarefas:
- Registro e autorização de usuários:
- O usuário pode se registrar no sistema.
- O usuário pode se autenticar no sistema.
- Gerenciamento de tarefas:
- O usuário pode criar tarefas.
- O usuário pode editar tarefas.
- O usuário pode excluir tarefas.
- O usuário pode visualizar a lista de tarefas.
- O usuário pode atribuir tarefas a outros usuários.
- Visualização e filtragem de tarefas:
- O usuário pode filtrar tarefas por status (concluídas/não concluídas).
- O usuário pode visualizar tarefas atribuídas a outros usuários.
1.3 Definição de tecnologias e ferramentas utilizadas
Para implementar este aplicativo, serão utilizadas as seguintes tecnologias e ferramentas:
- Frontend:
- ReactJS: biblioteca para criar interfaces de usuário.
- Axios: biblioteca para realizar requisições HTTP.
- Backend:
- Python: linguagem de programação para criar a parte do servidor.
- Flask: framework web para criar REST API.
- SQLAlchemy: ORM para interação com o banco de dados.
- Database:
- PostgreSQL: banco de dados relacional para armazenar informações sobre usuários e tarefas.
- Containerização e orquestração:
- Docker: plataforma para containerização de aplicativos.
- Docker Compose: ferramenta para gerenciar aplicações multi-contêiner.
1.4 Preparando o ambiente de desenvolvimento
Para completar o projeto com sucesso, é necessário configurar o ambiente de desenvolvimento e garantir que todas as ferramentas necessárias estejam instaladas.
Passos para preparar o ambiente:
- Instalar Docker:
- Se você ainda não fez isso, volte para a aula 4 do primeiro nível ou siga as instruções no site oficial do Docker.
- Instalar Docker Compose:
- Se você ainda não instalou o Docker Compose, consulte a aula 2 do nível 4 ou siga as instruções no site oficial do Docker Compose.
- Criar estrutura do projeto:
- Crie um diretório para o projeto e subdiretórios principais para cada serviço:
mkdir task_management_app
cd task_management_app
mkdir frontend backend database
- Iniciar o projeto:
- Dentro do diretório frontend, inicialize um novo projeto ReactJS:
cd frontend
npx create-react-app .
cd ..
• Dentro do diretório backend, crie a estrutura para a aplicação Python/Flask:
cd backend
mkdir app
touch app/__init__.py
touch app/models.py
touch app/routes.py
touch run.py
touch requirements.txt
cd ..
• Dentro do diretório database, crie um Dockerfile para PostgreSQL (se necessário):
cd database
touch Dockerfile
cd ..
1.5 Exemplo de conteúdo de arquivos:
Arquivo backend/app/__init__.py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://taskuser:taskpassword@database:5432/taskdb'
db = SQLAlchemy(app)
from app import routes
Arquivo backend/app/models.py:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
tasks = db.relationship('Task', backref='owner', lazy=True)
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text, nullable=True)
owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
Arquivo backend/app/routes.py:
from app import app
@app.route('/')
def index():
return "Olá, Aplicativo de Gerenciamento de Tarefas!"
Arquivo backend/run.py:
from app import app
if __name__ == '__main__':
app.run(host='0.0.0.0')
Arquivo backend/requirements.txt:
Flask
Flask-SQLAlchemy
psycopg2-binary
GO TO FULL VERSION