Pular para o conteúdo principal

Docker para data science: uma introdução

Neste tutorial de Docker, descubra a instalação, os comandos mais usados, como dockerizar aplicações de machine learning e as melhores práticas do mercado.
Atualizado 17 de set. de 2026  · 15 min lido

Explorar com IA

ChatGPTClaudePerplexity

Docker bot

Imagine que você trabalhou em um problema de machine learning de ponta a ponta e chegou à melhor solução com os melhores modelos. Porém, quando você envia seu código para o time de engenharia, o que funcionava no seu computador não roda nos servidores deles, que podem ter outro sistema operacional e versões diferentes de bibliotecas.

Mesmo com todo o seu cuidado e esforço, isso pode acontecer e é bem frustrante. A maioria dos desenvolvedores passa por isso pelo menos uma vez. Qual é a solução? É aí que entra o Docker. Com o Docker, você define um ambiente preciso e consistente para o seu projeto, garantindo que o código rode sem dor de cabeça, independentemente do sistema ou da configuração por trás.

Este tutorial apresenta o Docker e seus conceitos relacionados, explicando por que ele é importante para cientistas de dados. Além disso, vamos ajudar você a instalar a ferramenta e a usá-la no seu próximo projeto com exemplos. Por fim, você vai conhecer as melhores práticas do mercado ao usar Docker e tirar todas as suas dúvidas.

O que são Docker, containers e imagens?

Docker é uma plataforma para criar, executar e distribuir aplicações. 

Containers são pacotes leves, independentes e executáveis que trazem tudo o que a aplicação precisa para rodar: código, runtime, bibliotecas, variáveis de ambiente e arquivos de configuração.

Uma imagem Docker é um arquivo somente leitura que contém todas as instruções necessárias para criar um container. As imagens são usadas para criar e iniciar novos containers em tempo de execução.

O Docker ajuda desenvolvedores a empacotar suas aplicações junto com as dependências em um container, que pode rodar em qualquer máquina com Docker instalado. 

De certa forma, é como se você ganhasse uma máquina nova para um projeto. Você instalaria os pacotes necessários, copiaria os arquivos e executaria os scripts. E ainda poderia enviar essa “máquina” para outro lugar. É um exemplo simplificado, mas dá para entender a ideia. 

Como containers Docker se diferenciam de máquinas virtuais?

Assim que definimos containers, surge a dúvida: qual a diferença em relação às máquinas virtuais, já que ambas permitem rodar múltiplos ambientes isolados na mesma máquina física? 

Dê uma olhada na diferença de arquitetura na imagem abaixo e veja se você identifica.

Virtual Machine vs Container

Imagem do autor

Cada máquina virtual é um ambiente isolado que pode rodar sistemas operacionais e configurações diferentes. Isso também significa que cada VM precisa de uma cópia completa do sistema operacional, consumindo muitos recursos. Já aplicações em containers rodam em um ambiente isolado sem exigir uma cópia completa do sistema operacional, o que as torna mais leves e eficientes.

Embora as máquinas virtuais sejam úteis, containers geralmente são suficientes e ideais para distribuir aplicações.

Por que Docker para cientistas de dados?

Você talvez esteja se perguntando por que aprender Docker sendo cientista de dados. Não é papel do time de DevOps cuidar da infraestrutura?

Boa pergunta — mas o Docker é extremamente importante para cientistas de dados, mesmo quando há um time de DevOps. Vamos entender por que ele é tão útil.

Integração com o time de DevOps 

Ter um time de DevOps não anula os benefícios do Docker; pelo contrário, ele ajuda a aproximar desenvolvimento e operações. Cientistas de dados podem empacotar seu código em Docker e repassar para o DevOps cuidar do deploy e do scale. Em times de data science mais estruturados, isso é comum.

Ambiente consistente e reprodutibilidade

Cientistas de dados lidam com dependências e configurações complexas que precisam ser instaladas e mantidas. O ambiente deve permanecer idêntico para obter resultados semelhantes. O Docker permite criar e compartilhar um ambiente consistente com todas as dependências e configurações pré-instaladas, fácil de replicar por outras pessoas.

Portabilidade

Containers Docker rodam em qualquer ambiente com Docker instalado: laptops, servidores e plataformas em nuvem. Isso facilita mover seu trabalho entre ambientes diferentes. 

Isolamento de recursos

O Docker permite rodar vários containers na mesma máquina, cada um com recursos isolados. Isso ajuda a gerenciar recursos com mais eficiência e evita conflitos com outras aplicações. Quando você tem vários projetos de ML, esse recurso pode salvar o dia.

Colaboração facilitada

Com o Docker, cientistas de dados podem compartilhar seu trabalho com qualquer pessoa, inclusive times remotos, em forma de containers. Colaboração é parte essencial do trabalho em equipe, e o Docker reduz a fricção nesse processo.

Muitos profissionais experientes concordam: com o Docker, cientistas de dados focam no que importa sem se preocupar com a infraestrutura por trás. 

Tutorial de Docker: usando Docker no seu próximo projeto

Como já vimos a necessidade do Docker para cientistas de dados, vamos direto ao ponto para ganhar velocidade. Primeiro, precisamos instalar o Docker na máquina e nos familiarizar com os comandos mais usados.

Instalando o Docker na sua máquina ou servidor local

O Docker está disponível para os principais sistemas operacionais: Linux, Windows e Mac. A instalação é simples e melhor detalhada na documentação oficial.

  • Instruções para instalar o Docker no Linux.
  • Instruções para instalar o Docker no Windows.
  • Instruções para instalar o Docker no Mac.

Se você quiser criar suas próprias imagens e enviá-las para o Docker Hub (como mostrado em alguns comandos abaixo), crie uma conta no Docker Hub. Pense no Docker Hub como um repositório central onde desenvolvedores armazenam e compartilham suas imagens Docker.

Conhecendo os comandos mais comuns do Docker

Depois de configurar o Docker na sua máquina (ou servidor), o próximo passo é se familiarizar com alguns comandos. Aqui está a lista de comandos de referência na documentação oficial do Docker. 

Para ajudar você a começar, destacamos os dez comandos mais usados que você certamente vai encontrar.

  1. docker run: executa um container a partir de uma imagem. A flag -p mapeia uma porta da máquina host para uma porta do container. Por exemplo, o comando abaixo executa um container a partir da imagem "nginx" e mapeia a porta 80 do host para a porta 80 do container.
    • docker run -p 80:80 nginx
  2. docker ps: lista todos os containers em execução. Útil quando temos vários containers isolados rodando na mesma máquina.
    • docker ps
  3. docker stop: interrompe um container em execução.
    • docker stop <container_id>
  4. docker rm: remove um container parado. 
    • docker rm <container_id>
  5. docker images: lista todas as imagens na máquina host. Útil para ver as imagens locais disponíveis antes de criar um container a partir delas.
    • docker images
  6. docker rmi: remove uma imagem.
    • docker rmi <image_id>
  7. docker build: cria uma imagem a partir de um Dockerfile. A flag -t define o nome da imagem e o . no final indica o contexto de build, que é o diretório atual.
    • docker build -t my_image .
  8. docker exec: executa um comando dentro de um container em execução.
    • docker exec -it <container_id> /bin/bash
  9. docker pull: baixa uma imagem de um registry, como o Docker Hub. 
    • docker pull <image_name>
  10. docker push: envia uma imagem para um registry.
    • docker push <image_name>

Agora que aprendemos a configurar o Docker e os comandos mais comuns, o próximo objetivo é dockerizar uma aplicação de machine learning.

Quer tirar uma certificação Docker? Confira nosso guia para conquistar uma Docker certification!

Dockerizando uma aplicação simples de machine learning

Dockerizar qualquer aplicação de machine learning é mais fácil do que você imagina se seguir uma abordagem em três passos.

Dockerizing a machine learning application

Imagem do autor.

Vamos usar um script de machine learning para iniciantes, mantendo tudo simples, já que o objetivo é demonstrar como dockerizar um script. O exemplo constrói um modelo simples de regressão logística no conjunto de dados iris.

# Load the libraries

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import accuracy_score


# Load the iris dataset

iris = load_iris()

X = iris.data

y = iris.target


# Split the data

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)


# Train a logistic regression model

clf = LogisticRegression()

clf.fit(X_train, y_train)


# Make predictions

y_pred = clf.predict(X_test)


# Print the accuracy of the model

accuracy_score = accuracy_score(y_test, y_pred)

print(f'Accuracy: {accuracy_score}')

1. Definindo o ambiente

Você precisa conhecer exatamente o ambiente atual para conseguir replicá-lo em outro lugar. A forma mais simples (e comum) é criar um arquivo requirements.txt listando todas as bibliotecas usadas no projeto, com suas versões.

Veja como fica o conteúdo do arquivo:

scikit-learn==1.2.0

Observação: aplicações de machine learning mais complexas usam mais bibliotecas, como NumPy, pandas, matplotlib e outras. Por isso, criar um arquivo requirements.txt faz muito mais sentido do que simplesmente instalar bibliotecas soltas (voltaremos a isso nas melhores práticas).

2. Escreva um Dockerfile

O próximo passo é criar um arquivo chamado Dockerfile que crie o ambiente e execute a aplicação nele. Em outras palavras, é o nosso manual de instruções para o Docker, indicando qual deve ser o ambiente, seu conteúdo e os passos de execução.

FROM python:3.9

WORKDIR /src

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python","iris_classification.py"]

Esse Dockerfile usa a imagem oficial do Python como base, define o diretório de trabalho, copia o arquivo requirements.txt e instala as dependências, copia o código da aplicação e executa o comando python iris_classification.py para iniciar a aplicação.

3. Faça o build da imagem

O passo final para criar um ambiente reprodutível é gerar uma imagem (um “molde”) que pode ser usada para criar quantos containers forem necessários com a mesma configuração.

Você pode construir a imagem executando o comando docker build -t <image-name> . no mesmo diretório onde está o Dockerfile.

Depois de dockerizar a aplicação simples que vimos, você pode usar o docker run, criar containers e pará-los quando precisar. Já cobrimos alguns comandos comuns acima.

Agora, vamos evoluir do básico para o que o mercado espera.

Melhores práticas de mercado ao usar Docker

Entender o básico é suficiente para começar, mas no dia a dia profissional é essencial seguir as melhores práticas. 

Manter o número de camadas baixo

Cada instrução no Dockerfile gera uma nova camada. Camadas demais deixam a imagem grande e lenta para transferir. 

Dê uma olhada no exemplo abaixo:

# Use the official Python image as the build image

FROM python:3.9


# Install the dependencies

RUN pip install pandas

RUN pip install matplotlib

RUN pip install seaborn


# Copy neccesary files

COPY my_script.py .

COPY data/ .


# Run the script

CMD ["python","my_script.py"]

Qual é o problema aqui? O uso de vários comandos run e copy foi desnecessário. Veja como corrigir:

# Use the official Python image as the build image

FROM python:3.9


# Install the dependencies using requirements.txt

COPY my_script.py requirements.txt data/ .

RUN pip install --no-cache-dir -r requirements.txt


# Run the script

CMD ["python","my_script.py"]

Embora isso fique claro num arquivo pequeno, você vai se surpreender como frequentemente escrevemos Dockerfiles maiores do que precisamos. Agrupar comandos com funções semelhantes ou que alteram os mesmos arquivos é um jeito fácil de reduzir camadas.

Usar imagens oficiais

Imagens oficiais são mantidas e suportadas pelo publicador. Em geral, são mais estáveis e seguras do que imagens não oficiais. 

Na pressa de entregar algo, às vezes usamos imagens não oficiais sem avaliar. Sempre que possível, use imagens oficiais como base para suas próprias imagens.

Builds multiestágio para otimizar performance

Um build multiestágio no Docker permite usar múltiplas instruções FROM em um único Dockerfile. 

Podemos usar uma imagem maior como “build image” para compilar/treinar a aplicação e depois copiar apenas os arquivos necessários para uma imagem menor de runtime. Ao não incluir arquivos desnecessários, reduzimos o tamanho da imagem final, melhorando a performance e aumentando a segurança. 

Veja um exemplo, muito usado na prática:

# Use the official Python image as the build image

FROM python:3.9 AS build

# Set the working directory

WORKDIR /app

# Copy the requirements.txt file

COPY requirements.txt ./

# Install the dependencies

RUN pip install --no-cache-dir -r requirements.txt

# Copy the application files

COPY . .

# Train the model

RUN python train.py

# Use the official Alpine Linux image as the runtime image

FROM alpine:3

# Set the working directory

WORKDIR /app

# Copy the model files from the build image

COPY --from=build /app/models /app/models

# Copy the requirements.txt file

COPY --from=build /app/requirements.txt /app

# Install the dependencies

RUN pip install --no-cache-dir -r requirements.txt

# Run the application

CMD ["python","predict.py"]

Dissecando o exemplo: usamos a imagem oficial do Python como imagem de build e instalamos as dependências nesse estágio. 

Depois de rodar o train.py, copiamos os arquivos de modelo gerados e o requirements.txt para uma imagem menor (Alpine Linux) de runtime, que usaremos para executar a aplicação. Ao usar build multiestágio e não incluir dependências de build e o interpretador Python na imagem final, reduzimos bastante o tamanho final.

Usar volumes para persistir dados

Os dados dentro de um container não ficam disponíveis após ele ser parado e removido, mas às vezes você precisa guardar os resultados dos experimentos para consulta futura. Também pode ser necessário compartilhar dados entre vários containers.

Com volumes, você garante que os dados persistam fora do container. Veja um exemplo:

# Use the official Python image as the base image

FROM python:3.9

# Set the working directory

WORKDIR /app

# Copy the requirements.txt file

COPY requirements.txt ./

# Install the dependencies

RUN pip install --no-cache-dir -r requirements.txt

# Copy the rest of the application files

COPY . .

# Create a directory for storing data

RUN mkdir /app/data



# Define a volume for the data directory

VOLUME /app/data

# Run the application

CMD ["python","main.py"]

Organização e versionamento de imagens Docker

Quando você começa a trabalhar com várias imagens Docker, tudo pode ficar bagunçado e surge a necessidade de organizar. Embora as práticas variem entre organizações, seguem algumas diretrizes comuns:

  1. Adote uma convenção de nomes consistente para cada imagem. Por exemplo, <registry>/<organization>/<image>:<version>. Isso ajuda a identificar imagens e versões no registry.
  2. Siga práticas de versionamento para permitir rollback quando necessário. Como vimos, a versão entra no nome e pode seguir o padrão versão maior>.<versão menor>.<patch>.
  3. Use tags significativas, como latest, staging, production, para organizar e gerenciar imagens. Assim você identifica rapidamente o que é de cada ambiente e estágio do pipeline de deploy.

É recomendável alinhar com a sua organização; toda a equipe deve seguir a mesma convenção.

Conclusão

Este artigo mostrou a importância de criar códigos e aplicações reprodutíveis com ferramentas como o Docker para cientistas de dados. Passamos pela relevância do Docker, instruções de instalação e comandos mais usados. Depois, vimos como dockerizar aplicações de machine learning com exemplos e as melhores práticas de mercado para usar Docker.

Para continuar aprendendo, faça nosso curso Introduction to Docker, que cobre muitos fundamentos. Se você atua na área, vale considerar buscar uma Docker certification

Muitos cientistas de dados focam em habilidades centrais como estatística, matemática, machine learning, deep learning e programação, mas acabam deixando de lado as melhores práticas de engenharia de software esperadas no mercado.

Se você quer consolidar seus conhecimentos em ciência de dados, confira a trilha Data Scientist with Python, com aprendizado guiado por projetos. Ou, se precisa reforçar suas habilidades de engenharia de software, veja o curso software engineering for data scientists with Python, que aborda modularidade, documentação e testes automatizados.

Docker para cientistas de dados: FAQs

Cientistas de dados devem aprender Docker?

Aprender Docker é útil para cientistas de dados porque facilita o gerenciamento de dependências e ambientes, garantindo que o código rode de forma consistente em sistemas diferentes. Isso também reduz a dependência exclusiva do time de DevOps.

Como usar Jupyter Notebook em um container Docker?

Para usar Jupyter Notebook em um container Docker, como no tutorial acima, você pode criar um novo Dockerfile e usar o comando RUN para instalar o Jupyter. Depois, use o CMD para iniciar o servidor do Jupyter Notebook. Como alternativa, você pode usar imagens pré‑construídas do Docker Hub com Jupyter instalado. Aqui está um guia detalhado sobre como usar o Jupyter Notebook, inclusive com Docker.

Como posso compartilhar meus projetos de data science usando Docker?

Você pode compartilhar seus projetos de data science com Docker enviando sua imagem para um registry, como o Docker Hub. Depois disso, outras pessoas podem fazer o pull da imagem e executar o projeto no ambiente delas.

Tópicos
Ciência de dados
Aprendizado de máquina

Principais cursos

Curso

Princípios de Engenharia de Software em Python

4 h
69.8K
Aprenda sobre modularidade, documentação e testes automatizados para resolver problemas de ciência de dados de forma mais rápida e confiável.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

blog

O Guia Completo para a Certificação Docker (DCA) em 2026

Descubra todo o seu potencial no Docker e na ciência de dados com o nosso guia completo. Dá uma olhada nas certificações, trilhas de aprendizagem e dicas práticas do Docker.
Matt Crabtree's photo

Matt Crabtree

8 min

blog

Jupyter e R Markdown: Notebooks com R

Saiba como instalar, executar e usar o R com o Jupyter Notebook e o R Notebook do RStudio, incluindo dicas e alternativas
Karlijn Willems's photo

Karlijn Willems

15 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.
A jupyter lab

Tutorial

Tutorial de introdução ao JupyterLab

Neste artigo, apresentaremos a você o JupyterLab, um dos IDEs mais populares para ciência de dados.
Javier Canales Luna's photo

Javier Canales Luna

7 min

Clustering k-means

Tutorial

Introdução ao k-Means Clustering com o scikit-learn em Python

Neste tutorial, saiba como aplicar o k-Means Clustering com o scikit-learn em Python

Kevin Babitz

8 min

Tutorial

Tutorial de Markdown no Jupyter Notebook

Neste tutorial, você vai aprender a usar e escrever com diferentes tags de marcação usando o Jupyter Notebook.

Olivia Smith

9 min

Ver MaisVer Mais