Introdução
Este tutorial abrangente do Docker fornece aos desenvolvedores e profissionais de TI conhecimento essencial sobre a tecnologia de contêineres. Aprenda a configurar o Docker no Ubuntu, compreenda os conceitos centrais e utilize a contencionalização para a implantação consistente de aplicações em diferentes ambientes de computação.
Fundamentos do Docker
Introdução à Tecnologia Docker
Docker é uma plataforma poderosa para tecnologia de contêineres que revoluciona a implantação e a virtualização de software. Como ferramenta de código aberto, o Docker permite que desenvolvedores empacotem, distribuam e executem aplicações de forma consistente em diferentes ambientes de computação.
Conceitos Centrais do Docker
O que é Docker?
Docker é uma tecnologia de virtualização leve que permite aos desenvolvedores criar, implantar e executar aplicações usando contêineres. Ao contrário das máquinas virtuais tradicionais, os contêineres compartilham o kernel do sistema host, tornando-os mais eficientes e rápidos para iniciar.
Arquitetura de Contêineres
graph TD
A[Docker Engine] --> B[Container Runtime]
A --> C[Imagens Docker]
B --> D[Contêiner de Aplicação]
C --> D
Componentes Principais do Docker
| Componente | Descrição | Finalidade |
|---|---|---|
| Docker Engine | Ambiente de execução central | Gerencia o ciclo de vida do contêiner |
| Imagem Docker | Modelo somente leitura | Define a configuração do contêiner |
| Contêiner Docker | Instância executável | Executa a aplicação |
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=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(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
## Verificar a instalação do Docker
docker run hello-world
## Listar contêineres em execução
docker ps
## Listar todos os contêineres
docker ps -a
Vantagens do Docker
O Docker oferece benefícios significativos para o desenvolvimento de software moderno:
- Ambiente consistente entre desenvolvimento e produção
- Implantação de aplicações mais rápida
- Melhor utilização de recursos
- Gerenciamento de dependências simplificado
- Escalabilidade e portabilidade aprimoradas
Criando Imagens Docker
Compreendendo Imagens Docker
Imagens Docker são modelos somente leitura usados para criar contêineres. Elas contêm o código da aplicação, o tempo de execução, as bibliotecas, as variáveis de ambiente e os arquivos de configuração necessários para executar uma aplicação.
Fundamentos do Dockerfile
Um Dockerfile é um documento de texto que contém instruções para construir uma imagem Docker. Cada instrução cria uma nova camada na imagem.
Estrutura do Dockerfile
graph TD
A[Imagem Base] --> B[Instalar Dependências]
B --> C[Copiar Código da Aplicação]
C --> D[Definir Variáveis de Ambiente]
D --> E[Definir Comando de Inicialização]
Instruções Comuns do Dockerfile
| Instrução | Finalidade | Exemplo |
|---|---|---|
| FROM | Especificar a imagem base | FROM ubuntu:22.04 |
| RUN | Executar comandos | RUN apt-get update |
| COPY | Copiar arquivos para a imagem | COPY ./app /application |
| WORKDIR | Definir diretório de trabalho | WORKDIR /application |
| CMD | Definir comando padrão | CMD ["python", "app.py"] |
Criando uma Imagem Simples de Aplicação Web Python
Dockerfile de Exemplo
## Usar a imagem de tempo de execução Python oficial como imagem base
FROM python:3.9-slim
## Definir o diretório de trabalho
WORKDIR /app
## Copiar o arquivo requirements
COPY requirements.txt .
## Instalar dependências
RUN pip install --no-cache-dir -r requirements.txt
## Copiar o código da aplicação
COPY . .
## Expor porta
EXPOSE 5000
## Definir o comando de inicialização
CMD ["python", "app.py"]
Construindo a Imagem Docker
## Construir a imagem com tag
docker build -t hello-world-app .
## Listar imagens locais
docker images
## Executar a imagem criada
docker run -p 5000:5000 hello-world-app
Comandos de Gerenciamento de Imagens
## Remover imagem específica
docker rmi hello-world-app
## Remover todas as imagens não utilizadas
docker image prune
## Baixar imagem do Docker Hub
docker pull ubuntu:22.04
Boas Práticas
- Utilize imagens base mínimas
- Minimize o número de camadas
- Evite instalar pacotes desnecessários
- Utilize builds multi-stage para imagens menores
- Utilize o cache de build eficientemente
Gerenciamento de Contêineres
Visão Geral do Ciclo de Vida de Contêineres
Contêineres Docker possuem um ciclo de vida definido com vários estados, desde a criação até a terminação. Compreender esses estados é crucial para um gerenciamento eficaz de contêineres.
stateDiagram-v2
[*] --> Criado
Criado --> Em Execução
Em Execução --> Pausado
Pausado --> Em Execução
Em Execução --> Parado
Parado --> Removido
Removido --> [*]
Operações Básicas de Contêineres
Comandos de Gerenciamento de Contêineres
| Comando | Função | Exemplo |
|---|---|---|
| docker create | Criar um contêiner | docker create nginx |
| docker start | Iniciar um contêiner | docker start container_id |
| docker stop | Parar um contêiner em execução | docker stop container_id |
| docker restart | Reiniciar um contêiner | docker restart container_id |
| docker rm | Remover um contêiner | docker rm container_id |
Executando Contêineres
## Executar contêiner em primeiro plano
docker run nginx
## Executar contêiner em segundo plano
docker run -d nginx
## Executar contêiner com mapeamento de porta
docker run -p 8080:80 nginx
## Executar contêiner com nome personalizado
docker run --name web-server nginx
Inspeção e Monitoramento de Contêineres
## Listar contêineres em execução
docker ps
## Listar todos os contêineres
docker ps -a
## Visualizar logs do contêiner
docker logs container_id
## Inspecionar detalhes do contêiner
docker inspect container_id
## Monitorar o uso de recursos do contêiner
docker stats
Rede de Contêineres
## Listar redes docker
docker network ls
## Criar rede personalizada
docker network create mynetwork
## Conectar contêiner à rede
docker network connect mynetwork container_id
Gerenciamento Avançado de Contêineres
Limites de Recursos de Contêineres
## Limitar CPU e memória
docker run -d \
--cpus="1.5" \
--memory="512m" \
nginx
Escalonamento de Contêineres
## Criar várias instâncias de contêiner
docker run -d -p 8001:80 nginx
docker run -d -p 8002:80 nginx
docker run -d -p 8003:80 nginx
Estratégias de Implantação de Contêineres
Gerenciamento de Dados Persistentes
## Criar volume
docker volume create myvolume
## Montar volume no contêiner
docker run -v myvolume:/app/data nginx
Configuração de Ambiente
## Definir variáveis de ambiente
docker run -e DATABASE_URL=localhost nginx
Resumo
O Docker revoluciona o desenvolvimento de software, permitindo contêineres leves e portáteis que simplificam a implantação de aplicativos. Ao dominar os componentes principais do Docker, o processo de instalação e os comandos básicos, os desenvolvedores podem criar ambientes de software mais eficientes, escaláveis e reproduzíveis com sobrecarga mínima e máxima flexibilidade.



