- Data Hackers Newsletter
- Posts
- Docker: Primeiros passos mão na massa com containers e orquestrações
Docker: Primeiros passos mão na massa com containers e orquestrações
Aprenda como usar a ferramenta que permite automatizar a implantação, o escalonamento e a gestão de aplicações no desenvolvimento de software
Docker se consolidou como uma das ferramentas mais revolucionárias no desenvolvimento de software moderno. Se você está começando sua jornada com containers ou quer aprofundar seus conhecimentos práticos, este guia completo vai te ajudar a dominar os conceitos fundamentais e colocar a mão na massa.
O que é Docker e por que você deveria usar
Docker é uma plataforma open-source que permite aos desenvolvedores automatizar a implantação, o escalonamento e a gestão de aplicações através do uso de containers. Containers empacotam uma aplicação junto com todas as suas dependências, garantindo uniformidade em diferentes ambientes.
Principais vantagens do Docker
Benefício | Descrição |
|---|---|
Portabilidade | Execute aplicações em qualquer lugar: local, cloud ou on-premise |
Eficiência | Utiliza menos recursos comparado a máquinas virtuais tradicionais |
Escalabilidade | Escale aplicações facilmente para cima ou para baixo |
Deploy rápido | Containers iniciam em milissegundos |
Ambiente consistente | Garante que aplicações funcionem da mesma forma em desenvolvimento, testes e produção |
Instalando Docker no seu sistema operacional
A instalação do Docker varia conforme o sistema operacional. Vamos cobrir as principais plataformas:
Instalação no Windows
Baixe o Docker Desktop do site oficial do Docker
Instale o Docker Desktop e habilite o backend WSL 2 quando solicitado
Inicie o Docker Desktop e verifique se está rodando
Abra o Command Prompt (cmd) ou PowerShell e verifique a instalação:
docker --version
Instalação no MacOS
Baixe o Docker Desktop para Mac do site oficial
Instale e inicie o Docker Desktop
Verifique a instalação:
docker --version
Instalação no Linux (Ubuntu)
Para usuários Linux, o processo é um pouco mais detalhado:
Atualize os pacotes existentes:
sudo apt update
sudo apt install -y ca-certificates curl gnupg
Adicione a chave GPG do Docker:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc
Configure o repositório:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Instale o Docker:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Inicie o Docker e verifique:
sudo systemctl start docker
sudo systemctl enable docker
docker --version
Comandos essenciais do Docker
Dominar os comandos básicos do Docker é fundamental para trabalhar com containers de forma eficiente. Aqui estão os comandos mais importantes:
Verificando a instalação
docker --version
docker info
Trabalhando com imagens
Listar imagens disponíveis:
docker images
Baixar uma nova imagem:
docker pull <nome_da_imagem>
# Exemplo:
docker pull nginx
Remover uma imagem:
docker rmi <image_id>
Gerenciando containers
Executar um container:
docker run <nome_da_imagem>
# Exemplo:
docker run nginx
Listar containers em execução:
docker ps
Listar todos os containers (incluindo parados):
docker ps -a
Parar um container:
docker stop <container_id>
Remover um container:
docker rm <container_id>
Containerizando sua primeira aplicação
Vamos colocar a mão na massa e containerizar uma aplicação real. Para este exemplo, usaremos uma aplicação de lista de tarefas (to-do list).
Obtendo o código fonte
Clone o repositório da aplicação de exemplo:
git clone https://github.com/docker/getting-started-app.git
Navegue até o diretório e explore o conteúdo. Você encontrará os seguintes arquivos e subdiretórios essenciais para a aplicação.
Construindo a imagem da aplicação
Para construir a imagem, você precisa criar um Dockerfile. Um Dockerfile é simplesmente um arquivo de texto sem extensão que contém um script de instruções. Docker usa este script para construir uma imagem de container.
No diretório getting-started-app, no mesmo local do arquivo package.json, crie um arquivo chamado Dockerfile com o seguinte conteúdo:
FROM node:lts-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
Este Dockerfile começa com uma imagem base node:lts-alpine, uma imagem Linux leve que já vem com Node.js e o gerenciador de pacotes Yarn pré-instalados. Ele copia todo o código fonte para a imagem, instala as dependências necessárias e inicia a aplicação.
Construindo e executando
No terminal, certifique-se de estar no diretório
getting-started-app:
cd /path/to/getting-started-app
Construa a imagem:
docker build -t getting-started .
O comando docker build usa o Dockerfile para construir uma nova imagem. Durante o processo, o Docker baixa as "layers" necessárias, copia seu código e instala as dependências usando yarn.
A flag -t adiciona uma tag à sua imagem, funcionando como um nome legível. O . no final indica que o Docker deve procurar o Dockerfile no diretório atual.
Execute o container:
docker run -d -p 127.0.0.1:3000:3000 getting-started
Entendendo as flags:
-d(detach): executa o container em background-p(publish): cria um mapeamento de porta entre o host e o container (HOST:CONTAINER)
Abra seu navegador em
http://localhost:3000para ver a aplicação funcionando.
Atualizando a aplicação containerizada
Vamos fazer uma modificação simples na aplicação para entender o processo de atualização.
Modificando o código fonte
No arquivo src/static/js/app.js, altere a linha 56 para usar um novo texto quando não houver itens na lista:
- <p className="text-center">No items yet! Add one above!</p>
+ <p className="text-center">You have no todo items yet! Add one above!</p>
Reconstruindo e implantando
Construa a versão atualizada da imagem:
docker build -t getting-started .
Tente iniciar um novo container:
docker run -dp 127.0.0.1:3000:3000 getting-started
Você provavelmente verá um erro indicando que a porta 3000 já está em uso. Isso acontece porque o container antigo ainda está rodando.
Removendo o container antigo
Obtenha o ID do container:
docker ps
Pare o container:
docker stop <container_id>
Remova o container:
docker rm <container_id>
Agora inicie o container atualizado:
docker run -dp 127.0.0.1:3000:3000 getting-started
Atualize o navegador em
http://localhost:3000para ver as mudanças.
Compartilhando sua aplicação
Para compartilhar imagens Docker, você precisa usar um registry. O registry padrão é o Docker Hub, de onde vêm todas as imagens que você usou até agora.
Fazendo push da imagem
Faça login no Docker Hub:
docker login -u YOUR-USER-NAME
Use o comando
docker tagpara dar um novo nome à imagem:
docker tag getting-started YOUR-USER-NAME/getting-started
Faça o push da imagem:
docker push YOUR-USER-NAME/getting-started
Agora sua imagem está disponível publicamente no Docker Hub e pode ser usada por qualquer pessoa com acesso ao registry.
Criando aplicações multi-container com Docker Compose
Docker Compose permite definir todos os seus containers e configurações em um único arquivo YAML. Isso simplifica drasticamente o gerenciamento de aplicações complexas com múltiplos serviços.
Dockerfile vs Compose file
É importante entender a diferença:
Dockerfile: fornece instruções para construir uma imagem de container
Compose file: define seus containers em execução e como eles interagem
Frequentemente, um arquivo Compose referencia um Dockerfile para construir uma imagem para um serviço específico.
Exemplo prático: aplicação com banco de dados
Clone a aplicação de exemplo:
git clone https://github.com/dockersamples/todo-list-app
Navigate até o diretório:
cd todo-list-app
Dentro deste diretório, você encontrará um arquivo chamado compose.yaml. Este arquivo YAML define todos os serviços que compõem sua aplicação, incluindo:
Configurações de imagens
Portas expostas
Volumes para persistência de dados
Redes para comunicação entre containers
Variáveis de ambiente
Inicie a aplicação com um único comando:
docker compose up -d --build
Este comando irá:
Baixar as imagens necessárias (Node.js e MySQL)
Criar uma rede para sua aplicação
Criar volumes para persistir os arquivos do banco de dados
Iniciar todos os containers com suas configurações
Acesse
http://localhost:3000no navegador para ver a aplicação funcionando.
Vantagens do Docker Compose
Vantagem | Benefício |
|---|---|
Simplicidade | Gerencia múltiplos containers com um único comando |
Reprodutibilidade | Ambiente consistente entre desenvolvimento e produção |
Versionamento | Arquivo YAML pode ser versionado junto com o código |
Escalabilidade | Facilita o escalonamento de serviços individuais |
Perguntas frequentes sobre Docker
Qual a diferença entre Docker e máquinas virtuais?
Docker containers compartilham o kernel do sistema operacional host, tornando-os muito mais leves e rápidos que VMs. Máquinas virtuais incluem um sistema operacional completo, consumindo mais recursos.
Docker é gratuito?
Docker oferece uma versão gratuita (Docker Community Edition) e versões pagas com recursos adicionais para empresas (Docker Enterprise).
Posso usar Docker em produção?
Sim! Docker é amplamente usado em ambientes de produção por empresas de todos os tamanhos. Para orquestração em larga escala, muitas organizações usam Kubernetes junto com Docker.
Como faço backup de dados em containers?
Use volumes do Docker para persistir dados importantes. Volumes são armazenados fora do ciclo de vida do container e podem ser facilmente copiados para backup.
Resumindo: sua jornada com Docker
Este guia forneceu uma introdução abrangente ao Docker, cobrindo desde conceitos básicos até implementações práticas:
✅ Fundamentos do Docker: Entendemos o que é Docker e suas principais vantagens
✅ Instalação: Configuramos Docker em diferentes sistemas operacionais
✅ Comandos básicos: Dominamos os comandos essenciais para gerenciar containers e imagens
✅ Containerização: Criamos nossa primeira aplicação containerizada
✅ Atualizações: Aprendemos a atualizar e versionar containers
✅ Compartilhamento: Publicamos imagens no Docker Hub
✅ Docker Compose: Gerenciamos aplicações multi-container de forma eficiente
Docker simplifica o desenvolvimento, garante consistência entre ambientes e serve como base sólida para deployments em cloud. Com os conhecimentos deste guia, você está pronto para começar a containerizar suas próprias aplicações e explorar conceitos mais avançados como orquestração com Kubernetes.
Continue praticando, experimente com diferentes tipos de aplicações e explore a vasta documentação oficial do Docker. A comunidade é ativa e há sempre algo novo para aprender no universo dos containers!