CodeGym /Cursos /Docker SELF /Demonstração de trabalho com Docker

Demonstração de trabalho com Docker

Docker SELF
Nível 23 , Lição 0
Disponível

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:

  1. Definir os requisitos funcionais pra cada componente do app.
  2. Escolher as tecnologias e ferramentas que serão usadas.
  3. Preparar o ambiente de desenvolvimento.

1.2 Definição de requisitos funcionais

Requisitos funcionais para o aplicativo de gerenciamento de tarefas:

  1. Registro e autorização de usuários:
    • O usuário pode se registrar no sistema.
    • O usuário pode se autenticar no sistema.
  2. 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.
  3. 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:

  1. Frontend:
    • ReactJS: biblioteca para criar interfaces de usuário.
    • Axios: biblioteca para realizar requisições HTTP.
  2. 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.
  3. Database:
    • PostgreSQL: banco de dados relacional para armazenar informações sobre usuários e tarefas.
  4. 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:

  1. 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.
  2. 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.
  3. Criar estrutura do projeto:
    • Crie um diretório para o projeto e subdiretórios principais para cada serviço:
Terminal

mkdir task_management_app
cd task_management_app
mkdir frontend backend database
        
  1. Iniciar o projeto:
    • Dentro do diretório frontend, inicialize um novo projeto ReactJS:
Terminal

cd frontend
npx create-react-app .
cd ..
        

• Dentro do diretório backend, crie a estrutura para a aplicação Python/Flask:

Terminal

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):

Terminal

cd database
touch Dockerfile
cd ..
        

1.5 Exemplo de conteúdo de arquivos:

Arquivo backend/app/__init__.py:

Python

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:

Python

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:

Python

from app import app

@app.route('/')
def index():
    return "Olá, Aplicativo de Gerenciamento de Tarefas!"
    

Arquivo backend/run.py:

Python

from app import app

if __name__ == '__main__':
    app.run(host='0.0.0.0')
    

Arquivo backend/requirements.txt:

Text

Flask
Flask-SQLAlchemy
psycopg2-binary
    
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION