Introdução
Este tutorial fornece um guia abrangente para executar uma imagem Docker e gerenciar contêineres Docker. Você aprenderá os fundamentos do Docker, explorará imagens Docker e seus casos de uso, e descobrirá técnicas para puxar, gerenciar e interagir com contêineres Docker. Além disso, o tutorial aborda tópicos avançados de gerenciamento de contêineres, como volumes Docker, redes, Compose e Swarm, para ajudá-lo a implantar e gerenciar suas aplicações usando Docker de forma eficaz.
Conceitos Essenciais do Docker
O que é Docker?
Docker é uma poderosa tecnologia de contencionalização que revoluciona a implantação e o desenvolvimento de aplicações. Permite aos desenvolvedores empacotar aplicações com todas as suas dependências em unidades padronizadas chamadas contêineres, garantindo desempenho consistente em diferentes ambientes de computação.
Conceitos Principais do Docker
Tecnologia de Contencionalização
A contencionalização permite que aplicações executem em ambientes isolados, proporcionando várias vantagens-chave:
| Característica | Descrição |
|---|---|
| Isolamento | Cada contêiner executa independentemente |
| Portabilidade | Os contêineres podem executar em qualquer sistema que suporte Docker |
| Eficiência | Leve em comparação com máquinas virtuais tradicionais |
graph TD
A[Código da Aplicação] --> B[Contêiner Docker]
B --> C[Sistema Operacional do Host]
C --> D[Infraestrutura]
Arquitetura do Docker
Docker utiliza uma arquitetura cliente-servidor com componentes-chave:
- Daemon do Docker
- Cliente Docker
- Registro Docker
- Imagens Docker
- Contêineres Docker
Instalação no Ubuntu 22.04
## Atualizar o índice de pacotes
sudo apt update
## Instalar dependências
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Adicionar a chave GPG oficial do Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## Configurar o repositório estável
echo "deb [arch=$(dpkg --print-architecture)] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Instalar o Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Comandos Básicos do Docker
## Verificar a versão do Docker
docker --version
## Puxar uma imagem
docker pull ubuntu:latest
## Listar imagens
docker images
## Executar um contêiner
docker run -it ubuntu:latest /bin/bash
Benefícios Principais do Docker
- Ambientes de desenvolvimento consistentes
- Implantação mais rápida
- Eficiência de recursos
- Escalabilidade
- Gerenciamento de configuração simplificado
Trabalhando com Imagens Docker
Compreendendo Imagens Docker
Imagens Docker são modelos de leitura-somente usados para criar contêineres. Elas contêm o código da aplicação, o tempo de execução, as bibliotecas e as ferramentas de sistema necessárias para executar uma aplicação.
graph LR
A[Dockerfile] --> B[Imagem Docker]
B --> C[Contêiner Docker]
Comandos de Gerenciamento de Imagens
| Comando | Descrição |
|---|---|
| docker images | Listar imagens locais |
| docker pull | Baixar imagens do registro |
| docker rmi | Remover imagens |
| docker tag | Marcar imagens para versão |
Criando um Dockerfile
## Imagem base
FROM ubuntu:22.04
## Metadados
LABEL maintainer="seu-email@exemplo.com"
## Atualizar o sistema
RUN apt-get update && apt-get install -y \
python3 \
pip
## Definir o diretório de trabalho
WORKDIR /app
## Copiar arquivos da aplicação
COPY . /app
## Instalar dependências
RUN pip install -r requirements.txt
## Expor porta
EXPOSE 5000
## Executar a aplicação
CMD ["python3", "app.py"]
Construindo Imagens Docker
## Construir imagem
docker build -t myapp:v1 .
## Construir com tag específica
docker build -t myapp:latest .
## Construir com argumentos de construção
docker build --build-arg VERSION=1.0 -t myapp:v1 .
Camadas de Imagens Docker
graph TD
A[Imagem Base] --> B[Atualizações do Sistema]
B --> C[Instalar Dependências]
C --> D[Copiar Código da Aplicação]
D --> E[Definir Comando de Inicialização]
Armazenamento e Compartilhamento de Imagens
## Entrar no Docker Hub
docker login
## Empurrar imagem para o registro
docker push username/myapp:v1
## Puxar imagem do registro
docker pull username/myapp:v1
Boas Práticas
- Minimizar o tamanho da imagem
- Usar builds multi-stage
- Aproveitar o cache
- Evitar instalar pacotes desnecessários
Docker na Prática
Rede de Contêineres
Docker fornece vários modos de rede para comunicação entre contêineres:
| Modo de Rede | Descrição |
|---|---|
| Bridge | Modo de rede padrão |
| Host | Acesso direto à rede do host |
| None | Sem conectividade de rede |
## Criar rede personalizada
docker network create mynetwork
## Executar contêiner em rede específica
docker run --network=mynetwork ubuntu
Docker Compose
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
database:
image: postgres
environment:
POSTGRES_PASSWORD: secret
Fluxo de Trabalho de Orquestração de Contêineres
graph TD
A[Desenvolvimento] --> B[Contencionalização]
B --> C[Teste]
C --> D[Pré-produção]
D --> E[Implantação de Produção]
Escalonamento de Aplicações
## Escalonar serviços
docker-compose up -d --scale web=3
## Monitorar recursos do contêiner
docker stats
Estratégias de Implantação de Produção
## Atualização incremental
docker service update \
--image myapp:v2 \
--update-parallelism 2 \
--update-delay 10s \
myservice
Monitoramento de Contêineres
## Visualizar logs do contêiner
docker logs mycontainer
## Uso de recursos em tempo real
docker top mycontainer
Rede Avançada
## Criar rede overlay
docker network create \
-d overlay \
--subnet 10.0.0.0/24 \
my_overlay_network
Práticas de Segurança
| Prática | Descrição |
|---|---|
| Limites de Recursos | Restrição de CPU/Memória |
| Sistema de Arquivos de Leitura-Somente | Impedir modificações |
| Usuários Não-Root | Reduzir privilégios do contêiner |
Resumo
Ao final deste tutorial, você terá um sólido entendimento de como executar uma imagem Docker, gerenciar contêineres Docker e utilizar técnicas avançadas de gerenciamento de contêineres para implantar e gerenciar suas aplicações de forma mais eficiente. O conhecimento adquirido neste tutorial permitirá que você aproveite os benefícios do Docker, como consistência, escalabilidade e portabilidade, em seus processos de desenvolvimento e implantação de software.



