Pular para o conteúdo principal

10 ideias de projetos do Docker: Do iniciante ao avançado

Aprenda o Docker com essas ideias de projetos práticos para todos os níveis de habilidade, do iniciante ao avançado, com foco na criação e otimização de aplicativos de ciência de dados.
Actualizado 9 de out. de 2024  · 22 min de leitura

A experiência prática é essencial para você dominar o Docker. O Docker é uma ferramenta essencial no desenvolvimento de software moderno e na ciência de dados, permitindo que você crie, implante e gerencie aplicativos em contêineres.

Neste artigo, apresento exemplos de projetos do Docker para iniciantes, intermediários e avançados, com foco em compilações em vários estágios, otimização de imagens do Docker e aplicação do Docker na ciência de dados. Esses projetos foram criados para aprofundar seu conhecimento sobre o Docker e aprimorar suas habilidades práticas.

Introdução aos projetos do Docker

Antes de começar a trabalhar nos projetos, verifique se você tem o Docker instalado em seu computador. Dependendo do seu sistema operacional (Windows, macOS, Linux), você pode fazer o download do Docker no site oficial do Docker.

Você também precisará de um conhecimento básico de:

  • Dockerfiles (para definir o que está dentro dos seus contêineres)
  • Docker Compose (para aplicativos com vários contêineres)
  • Comandos básicos da CLI, como docker build, docker run, docker-compose up, etc.

Se você precisar aprimorar suas habilidades nos conceitos acima, confira os cursos Introdução ao Docker ou Conceitos de Containerização e Virtualização.

Vamos começar!

Projetos do Docker para iniciantes

Ao começar a usar o Docker, é importante escolher projetos que correspondam ao seu nível de habilidade e que desafiem você a aprender novos conceitos. Aqui estão algumas ideias de projetos para você começar:

Projeto 1: Configuração de um servidor da Web simples

Neste projeto, você criará um contêiner do Docker que executa um servidor Web básico usando o Nginx. O Nginx é um dos servidores da Web de código aberto mais populares para proxy reverso, balanceamento de carga e muito mais. Ao final deste projeto, você terá aprendido a criar e executar contêineres com o Docker e a expor portas para que o aplicativo possa ser acessado a partir da sua máquina local.

Nível de dificuldade: Iniciante

Tecnologias utilizadas: Docker, Nginx

Instruções passo a passo

  • Instale o Docker: Certifique-se de que o Docker esteja instalado em seu sistema.
  • Crie o diretório do projeto: Crie uma nova pasta e um arquivo index.html dentro dela que será servido pelo Nginx.
  • Escreva o Dockerfile: Um Dockerfile é um script que define o ambiente do contêiner. Ele informa ao Docker qual imagem base você deve usar, quais arquivos incluir e quais portas expor:
FROM nginx:alpine
COPY ./index.html /usr/share/nginx/html
EXPOSE 80
  • Crie a imagem do Docker: Navegue até a pasta do seu projeto e crie a imagem usando:
docker build -t my-nginx-app .
  • Execute o contêiner: Inicie o contêiner e mapeie a porta 80 do contêiner para a porta 8080 em seu computador:
docker run -d -p 8080:80 my-nginx-app
  • Acesse o servidor da Web: Abra o navegador e navegue até http://localhost:8080 para ver a página que você criou.

Projeto 2: Dockerização de um script Python

Este projeto envolve a conteinerização de um script Python simples que processa dados de um arquivo CSV usando a biblioteca pandas. O objetivo é aprender a gerenciar dependências e executar scripts Python dentro de contêineres do Docker, tornando o script portátil e executável em qualquer ambiente.

Nível de dificuldade: Iniciante

Tecnologias utilizadas: Docker, Python, pandas

Instruções passo a passo

  • Escreva o script Python: Crie um script chamado process_data.py que leia e processe um arquivo CSV. Aqui está um exemplo de script:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.describe())
  • Crie um arquivo requirements.txt: Esse arquivo lista as bibliotecas Python de que o script precisa. Nesse caso, precisamos apenas de pandas:
pandas
  • Escreva o Dockerfile: Esse arquivo definirá o ambiente para o script Python:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "process_data.py"]
  • Crie a imagem do Docker:
docker build -t python-script .
  • Execute o contêiner:
docker run -v $(pwd)/data:/app/data python-script

Projeto 3: Criação de um aplicativo simples com vários contêineres

Este projeto ajudará você a se familiarizar com o Docker Compose criando um aplicativo com vários contêineres. Você criará um aplicativo Web simples usando o Flask como front-end e o MySQL como banco de dados de back-end. O Docker Compose permite que você gerencie vários contêineres que trabalham juntos.

Nível de dificuldade: Iniciante

Tecnologias utilizadas: Docker, Docker Compose, Flask, MySQL

Instruções passo a passo

  • Escreva o aplicativo Flask: Crie um aplicativo Flask simples que se conecte a um banco de dados MySQL e exiba uma mensagem. Aqui está um exemplo:
from flask import Flask
import mysql.connector
 
app = Flask(__name__)
 
def get_db_connection():
 	connection = mysql.connector.connect(
	 host="db",
	 user="root",
	 password="example",
	 database="test_db"
 	)
 	return connection
 
@app.route('/')
def hello_world():
 	connection = get_db_connection()
 	cursor = connection.cursor()
 	cursor.execute("SELECT 'Hello, Docker!'")
 	result = cursor.fetchone()
 	connection.close()
 	return str(result[0])
 
if __name__ == "__main__":
 	app.run(host='0.0.0.0')
  • Crie o arquivo docker-compose.yml: O Docker Compose define e executa aplicativos Docker com vários contêineres. Nesse arquivo, você definirá o aplicativo Flask e os serviços do banco de dados MySQL:
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: test_db
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - db
    environment:
      FLASK_ENV: development
    volumes:
      - .:/app

volumes:
  db_data:
  • Escreva o Dockerfile para o Flask: Isso criará a imagem do Docker para o aplicativo Flask:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
  • Crie e execute os contêineres: Use o Docker Compose para exibir o aplicativo inteiro:
docker-compose up --build

Torne-se um engenheiro de dados

Torne-se um engenheiro de dados por meio do aprendizado avançado de Python
Comece a aprender de graça

Projetos do Docker de nível intermediário

Os projetos a seguir são para aqueles que têm um sólido conhecimento dos conceitos básicos do Docker. Nelas, você aprenderá conceitos mais complexos, como compilações em vários estágios e técnicas de otimização.

Projeto 4: Criação em vários estágios para um aplicativo Node.js

As compilações em vários estágios ajudam a reduzir o tamanho das imagens do Docker, separando os ambientes de compilação e de tempo de execução. Neste projeto, você colocará em contêiner um aplicativo Node.js usando compilações em vários estágios.

Nível de dificuldade: Intermediário

Tecnologias utilizadas: Docker, Node.js, Nginx

Instruções passo a passo

  • Crie um aplicativo Node.js simples: Escreva um servidor Node.js básico que retorne uma mensagem simples. Aqui está um exemplo:
const express = require('express');
const app = express();
 
app.get('/', (req, res) => res.send('Hello from Node.js'));
 
app.listen(3000, () => console.log('Server running on port 3000'));
  • Escreva o Dockerfile com compilação em vários estágios: O primeiro estágio cria o aplicativo, e o segundo estágio executa o aplicativo com uma imagem de base mais clara.
# Stage 1: Build
FROM node:14 as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
# Add the following line if there's a build step for the app
# RUN npm run build

# Stage 2: Run
FROM node:14-slim
WORKDIR /app
COPY --from=build-stage /app .
EXPOSE 3000
ENV NODE_ENV=production
CMD ["node", "server.js"]
  • Crie a imagem:
docker build -t node-multi-stage .
  • Execute o contêiner:
docker run -p 3000:3000 node-multi-stage

Projeto 5: Dockerização de um modelo de aprendizado de máquina com o TensorFlow

Este projeto envolverá a conteinerização de um modelo de aprendizado de máquina usando o TensorFlow. O objetivo é criar um ambiente portátil no qual você possa executar modelos do TensorFlow em vários sistemas sem se preocupar com a configuração subjacente.

Nível de dificuldade: Intermediário

Tecnologias utilizadas: Docker, TensorFlow, Python

Instruções passo a passo

  • Instale o TensorFlow em um script Python: Crie um script Python model.py que carregue e execute um modelo TensorFlow pré-treinado:
import tensorflow as tf
model = tf.keras.applications.MobileNetV2(weights='imagenet')
print("Model loaded successfully")
  • Escreva o Dockerfile: Defina o ambiente para o TensorFlow dentro do Docker:
FROM tensorflow/tensorflow:latest
WORKDIR /app
COPY . .
CMD ["python", "model.py"]
  • Crie a imagem:
docker build -t tensorflow-model .
  • Execute o contêiner:
docker run tensorflow-model

Projeto 6: Criando um ambiente de ciência de dados com o Jupyter e o Docker

Este projeto se concentra na criação de um ambiente de ciência de dados reproduzível usando o Docker e os notebooks Jupyter. O ambiente incluirá bibliotecas Python populares, como pandas, NumPy e scikit-learn.

Nível de dificuldade: Intermediário

Tecnologias utilizadas: Docker, Jupyter, Python, scikit-learn

Instruções passo a passo

  • Crie o arquivo docker-compose.yml: Defina o serviço do Jupyter Notebook e as bibliotecas necessárias. Aqui está um exemplo:
version: '3'
services:
  jupyter:
    	image: jupyter/scipy-notebook
    	ports:
    	- "8888:8888"
    	volumes:
    	- ./notebooks:/home/joelwembo/work
  • Inicie o Jupyter Notebook: Use o Docker Compose para iniciar o Jupyter Notebook.
docker-compose up
  • Acesse o Jupyter Notebook: Abra seu navegador e acesse http://localhost:8888.

Projetos do Docker de nível avançado

Esses projetos de nível avançado se concentrarão em aplicativos do mundo real e conceitos avançados do Docker, como pipelines de aprendizagem profunda e pipelines de dados automatizados.

Projeto 7: Reduzindo o tamanho de uma imagem do Docker para um aplicativo Python

Neste projeto, você otimizará uma imagem do Docker para um aplicativo Python usando imagens básicas mínimas, como o Alpine Linux, e implementando compilações em vários estágios para manter o tamanho da imagem o menor possível.

Nível de dificuldade: Avançado

Tecnologias utilizadas: Docker, Python, Alpine Linux

Instruções passo a passo

  • Escreva o script Python: Crie um script que analise dados usando o pandas. Aqui está um exemplo de script:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.head())
  • Otimize o Dockerfile: Use compilações em vários estágios e o Alpine Linux para criar uma imagem leve.
# Stage 1: Build stage
FROM python:3.9-alpine as build-stage
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY script.py .

# Stage 2: Run stage
FROM python:3.9-alpine
WORKDIR /app
COPY --from=build-stage /app/script.py .
CMD ["python", "script.py"]
  • Crie a imagem:
docker build -t optimized-python-app .

Projeto 8: Dockerização de um pipeline de aprendizagem profunda com o PyTorch

Este projeto envolve a conteinerização de um pipeline de aprendizagem profunda usando o PyTorch. O foco é otimizar o Dockerfile para desempenho e tamanho, facilitando a execução de modelos de aprendizagem profunda em diferentes ambientes.

Nível de dificuldade: Avançado

Tecnologias utilizadas: Docker, PyTorch, Python

Instruções passo a passo

  • Instale o PyTorch em um script Python: Crie um script que carregue um modelo PyTorch pré-treinado e realize a inferência. Aqui está um exemplo:
import torch
model = torch.hub.load('pytorch/vision', 'resnet18', pretrained=True)
print("Model loaded successfully")
  • Escreva o Dockerfile: Defina o ambiente para o PyTorch:
FROM pytorch/pytorch:1.9.0-cuda11.1-cudnn8-runtime
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY model.py .
CMD ["python", "model.py"]
  • Crie a imagem:
docker build -t pytorch-model .
  • Execute o contêiner:
docker run pytorch-model 

Projeto 9: Automatizando pipelines de dados com o Apache Airflow e o Docker

Neste projeto, você configurará e colocará em contêiner um ambiente do Apache Airflow para automatizar pipelines de dados. O Apache Airflow é uma ferramenta popular para orquestrar fluxos de trabalho complexos amplamente usados na engenharia de dados.

Nível de dificuldade: Avançado

Tecnologias utilizadas: Docker, Apache Airflow, Python, PostgreSQL

Instruções passo a passo

  • Crie o arquivo docker-compose.yml: Defina os serviços do Airflow e o banco de dados PostgreSQL:
version: '3'
services:
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_USER: airflow
      POSTGRES_PASSWORD: airflow
      POSTGRES_DB: airflow
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  webserver:
    image: apache/airflow:latest
    environment:
      AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
      AIRFLOW__CORE__EXECUTOR: LocalExecutor
    depends_on:
      - postgres
    ports:
      - "8080:8080"
    volumes:
      - ./dags:/opt/airflow/dags
    command: ["webserver"]

  scheduler:
    image: apache/airflow:latest
    environment:
      AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
      AIRFLOW__CORE__EXECUTOR: LocalExecutor
    depends_on:
      - postgres
      - webserver
    volumes:
      - ./dags:/opt/airflow/dags
    command: ["scheduler"]

volumes:
  postgres_data:
  • Inicie o ambiente Airflow: Use o Docker Compose para criar o ambiente do Airflow:
docker-compose up

Projeto 10: Implementação de uma API de ciência de dados com FastAPI e Docker

Crie e implemente uma API de ciência de dados usando FastAPI. Você colocará a API em contêineres usando o Docker e se concentrará em otimizá-la para ambientes de produção.

Nível de dificuldade: Avançado

Tecnologias utilizadas: Docker, FastAPI, Python, scikit-learn

Instruções passo a passo

  • Escreva o aplicativo FastAPI: Crie uma API simples que use um modelo de aprendizado de máquina para previsões. Aqui está um exemplo:
from fastapi import FastAPI
import pickle
 
app = FastAPI()
with open("model.pkl", "rb") as f:
   model = pickle.load(f)
 
@app.post("/predict/")
def predict(data: list):
   return {"prediction": model.predict(data)}
  • Escreva o Dockerfile: Crie um Dockerfile que defina o ambiente para o FastAPI:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
  • Crie a imagem:
docker build -t fastapi-app .
  • Execute o contêiner:
docker run -p 8000:8000 fastapi-app

Dicas para trabalhar em projetos do Docker

Enquanto você trabalha nesses projetos, tenha em mente as dicas a seguir:

  • Comece com pouco: Comece com projetos ligeiramente desafiadores e depois passe para tarefas mais complexas. É fundamental desenvolver a confiança em tarefas mais simples.
  • Documente seu progresso: Mantenha um registro detalhado de seus projetos para acompanhar seu aprendizado e usá-lo como referência para empreendimentos futuros.
  • Participe das comunidades do Docker: Participe de fóruns on-line e encontros locais para compartilhar suas experiências, fazer perguntas e aprender com outras pessoas.
  • Experimente e personalize: Não tenha medo de ajustar os projetos, tentar abordagens diferentes e explorar novos recursos do Docker.
  • Continue aprendendo: Continue a expandir seus conhecimentos sobre o Docker explorando tópicos e ferramentas avançados, como Kubernetes, Docker Swarm ou arquitetura de microsserviços.

Conclusão

Dominar o Docker envolve mais do que apenas aprender comandos e configurações. Trata-se de entender como o Docker se encaixa no desenvolvimento de aplicativos modernos, nos fluxos de trabalho de ciência de dados e no gerenciamento de infraestrutura.

Os projetos que compartilhei neste guia forneceram algumas ideias para você desenvolver as habilidades básicas e a experiência prática necessárias para se destacar em cenários do mundo real.

Nesse momento, sugiro que você solidifique seu conhecimento seguindo esses cursos:

Torne-se um engenheiro de dados

Comprove suas habilidades como engenheiro de dados pronto para o trabalho.

Perguntas frequentes

Quais são as práticas recomendadas para escrever Dockerfiles eficientes?

As práticas recomendadas para escrever Dockerfiles eficientes incluem minimizar o número de camadas combinando comandos, usar compilações em vários estágios para reduzir o tamanho da imagem, selecionar imagens de base leves, armazenar dependências em cache e evitar incluir arquivos desnecessários na imagem final.

O que é uma compilação em vários estágios no Docker?

Uma compilação em vários estágios é um método para otimizar as imagens do Docker, separando os ambientes de compilação e de tempo de execução. Isso resulta em imagens menores e mais seguras.

Como você pode reduzir o tamanho de uma imagem do Docker?

Use imagens de base mínimas, gerencie dependências de forma eficiente e empregue compilações em vários estágios para reduzir o tamanho da imagem e melhorar o desempenho.

Como faço para solucionar erros comuns ao criar imagens do Docker?

Os erros comuns ao criar imagens do Docker incluem problemas de permissão, sintaxe incorreta do Dockerfile e falha na instalação de dependências. Para solucionar problemas, verifique os logs de compilação do Docker, certifique-se de que você está usando a imagem de base correta e confirme se os caminhos ou as permissões de arquivo estão definidos corretamente. Ferramentas como docker build --no-cache podem ajudar a identificar problemas de cache.

Posso usar o Docker com o Kubernetes para esses projetos?

Sim, quando você se sentir confortável com o Docker, o Kubernetes pode ser a próxima etapa. O Kubernetes ajuda a gerenciar aplicativos em contêineres em escala. Você pode implantar seus projetos do Docker em um cluster do Kubernetes para gerenciar várias instâncias, lidar com o dimensionamento e automatizar implantações.

Quais são as práticas recomendadas para gerenciar volumes e dados persistentes do Docker?

Ao trabalhar com volumes do Docker, é importante usar volumes nomeados para garantir a persistência dos dados entre as reinicializações do contêiner. Faça backups regulares dos volumes e monitore se há gargalos de desempenho devido à E/S do disco. Evite armazenar dados confidenciais diretamente em contêineres; em vez disso, use soluções de armazenamento seguro ou bancos de dados externos.

Qual é a finalidade da diretiva ENTRYPOINT em um Dockerfile?

A diretiva ENTRYPOINT em um Dockerfile especifica o comando que sempre será executado quando um contêiner for iniciado. Ele permite que o contêiner seja tratado como um executável, no qual os argumentos podem ser passados durante o tempo de execução, aumentando a flexibilidade.

Qual é a diferença entre CMD e ENTRYPOINT em um Dockerfile?

Tanto CMD quanto ENTRYPOINT especificam comandos a serem executados quando um contêiner é iniciado. No entanto, CMD fornece argumentos padrão que podem ser substituídos, enquanto ENTRYPOINT define o comando que sempre é executado. ENTRYPOINT é útil para criar contêineres que funcionam como executáveis, enquanto CMD é mais flexível para especificar comandos padrão.

Temas

Saiba mais sobre o Docker com estes cursos!

curso

Introduction to Docker

4 hr
24.6K
Gain an introduction to Docker and discover its importance in the data professional’s toolkit. Learn about Docker containers, images, and more.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

O guia completo da certificação Docker (DCA) para 2024

Libere seu potencial no Docker e na ciência de dados com nosso guia abrangente. Explore as certificações do Docker, os caminhos de aprendizado e as dicas práticas.
Matt Crabtree's photo

Matt Crabtree

8 min

blog

Mais de 60 projetos Python para todos os níveis de conhecimento

60 ideias de projetos de ciência de dados que os cientistas de dados podem usar para criar um portfólio sólido, independentemente de sua especialização.
Bekhruz Tuychiev's photo

Bekhruz Tuychiev

16 min

Machine Learning

blog

25 projetos de aprendizado de máquina para todos os níveis

Projetos de aprendizado de máquina para iniciantes, estudantes do último ano e profissionais. A lista consiste em projetos guiados, tutoriais e exemplos de código-fonte.
Abid Ali Awan's photo

Abid Ali Awan

15 min

R Project

blog

As 8 principais ideias de projetos de R para 2023

Descubra o que é o R e todos os benefícios de usá-lo, além de dar exemplos e novas ideias para um projeto.
Elena Kosourova's photo

Elena Kosourova

16 min

blog

12 projetos de LLM para todos os níveis

Descubra 12 ideias de projetos de LLM com guias visuais e códigos-fonte fáceis de seguir, adequados para iniciantes, alunos intermediários, acadêmicos do último ano e especialistas.
Abid Ali Awan's photo

Abid Ali Awan

12 min

tutorial

Como instalar e configurar o MySQL no Docker

Saiba como instalar e configurar o banco de dados MySQL dentro de contêineres do Docker. O tutorial inclui conceitos como conexão com servidores MySQL, execução de clientes MySQL para conexão com contêineres e assim por diante.
Bex Tuychiev's photo

Bex Tuychiev

12 min

Ver maisVer mais