Learn Docker Help

Lab 2: ExercΓ­cios PrΓ‘ticos πŸ‹οΈβ€β™€οΈ

╔═══════════════════════════════════════════════════════════╗ β•‘ EXERCISE STATUS: TREINANDO... β•‘ β•‘ DIFICULDADE: β˜…β˜…β˜…β˜†β˜† β•‘ β•‘ TEMPO ESTIMADO: 90 minutos β•‘ β•‘ WAIFU ASSISTANT: Exercise-chan β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Preparação πŸ”§

Requisitos

  • Lab 2 Setup completo

  • Docker Compose funcionando

  • Ambiente de desenvolvimento configurado

  • Editor de código pronto

Verificação Inicial

# Verifique o ambiente docker compose ps # Teste os serviΓ§os curl http://localhost:3000 curl http://localhost:5000/health

Exercício 1: Frontend Development 🎨

Objetivo

Desenvolver uma interface React com hot-reload e integração com backend.

Passos

  1. Setup do Frontend

# Entre no diretΓ³rio frontend cd frontend # Crie novo projeto React npm create vite@latest . -- --template react-ts # Instale dependΓͺncias npm install axios @mui/material @emotion/react @emotion/styled
  1. Componente de Lista

// src/components/TaskList.tsx import { useState, useEffect } from 'react'; import axios from 'axios'; interface Task { id: number; title: string; completed: boolean; } export const TaskList = () => { const [tasks, setTasks] = useState<Task[]>([]); useEffect(() => { axios.get('http://localhost:5000/tasks') .then(response => setTasks(response.data)); }, []); return ( <div> {tasks.map(task => ( <div key={task.id}> <input type="checkbox" checked={task.completed} onChange={() => {/* TODO */}} /> {task.title} </div> ))} </div> ); };

Exercício 2: Backend API πŸ”§

Objetivo

Criar uma API REST com Flask e integração com PostgreSQL.

Passos

  1. Setup do Backend

# Entre no diretΓ³rio backend cd backend # Crie o arquivo requirements.txt cat > requirements.txt << EOL flask==2.0.1 flask-sqlalchemy==2.5.1 psycopg2-binary==2.9.1 flask-cors==3.0.10 python-dotenv==0.19.0 EOL # Instale dependΓͺncias pip install -r requirements.txt
  1. API REST

# app.py from flask import Flask, request, jsonify from flask_sqlalchemy import SQLAlchemy from flask_cors import CORS import os app = Flask(__name__) CORS(app) app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL') db = SQLAlchemy(app) class Task(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) completed = db.Column(db.Boolean, default=False) @app.route('/tasks', methods=['GET']) def get_tasks(): tasks = Task.query.all() return jsonify([{ 'id': task.id, 'title': task.title, 'completed': task.completed } for task in tasks]) @app.route('/tasks', methods=['POST']) def create_task(): data = request.get_json() task = Task(title=data['title']) db.session.add(task) db.session.commit() return jsonify({ 'id': task.id, 'title': task.title, 'completed': task.completed }), 201

Exercício 3: Database Integration πŸ’Ύ

Objetivo

Configurar PostgreSQL e migrations.

Passos

  1. Schema Inicial

-- database/init.sql CREATE TABLE IF NOT EXISTS task ( id SERIAL PRIMARY KEY, title VARCHAR(100) NOT NULL, completed BOOLEAN DEFAULT FALSE ); -- Dados iniciais INSERT INTO task (title) VALUES ('Aprender Docker'), ('Dominar Docker Compose'), ('Implementar CI/CD');
  1. Migrations com Alembic

# Instale Alembic pip install alembic # Inicialize alembic init migrations # Crie primeira migration alembic revision -m "create_task_table"

Exercício 4: Integration & Testing πŸ”„

Objetivo

Integrar todos os serviços e implementar testes.

Passos

  1. Testes de Frontend

# Instale dependΓͺncias de teste npm install --save-dev vitest @testing-library/react # Crie teste npm test
  1. Testes de Backend

# Instale pytest pip install pytest # Execute testes pytest tests/

Desafios Extras 🌟

1. Cache Implementation

# docker-compose.yml services: redis: image: redis:alpine ports: - "6379:6379"

2. Logging Enhancement

# backend/logging_config.py import logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' )

3. CI Pipeline

# .github/workflows/ci.yml name: CI on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build and test run: docker compose -f docker-compose.test.yml up --exit-code-from tests

Checklist de Conclusão βœ…

Frontend

  • [ ] Componentes React implementados

  • [ ] Estilização com Material-UI

  • [ ] Integração com API

  • [ ] Testes unitários

Backend

  • [ ] API REST funcional

  • [ ] Conexão com banco de dados

  • [ ] Migrations configuradas

  • [ ] Testes de integração

Database

  • [ ] Schema inicial criado

  • [ ] Dados de exemplo inseridos

  • [ ] Backup configurado

  • [ ] Migrations aplicadas

Exercise-chan Tips πŸ’‘

Próximos Passos 🎯

  1. Docker Compose Deep Dive

  2. Development Best Practices

  3. Lab 3: Production

Recursos Adicionais πŸ“š

16 abril 2025