Introdução
Este tutorial abrangente sobre Docker fornece aos desenvolvedores e profissionais de TI uma compreensão fundamental da tecnologia de contêineres. Explorando os conceitos centrais, a arquitetura e a implementação prática do Docker, os aprendizes adquirirão habilidades essenciais em estratégias modernas de implantação de software e desenvolvimento de aplicativos.
Fundamentos do Docker
Introdução à Contenção Docker
Docker é uma poderosa tecnologia de contêineres que revoluciona a implantação de software e o desenvolvimento de aplicativos. Permite que desenvolvedores empacotem aplicativos com todas as suas dependências em unidades padronizadas chamadas contêineres, garantindo desempenho consistente em diferentes ambientes de computação.
Conceitos Centrais da Tecnologia de Contêineres
Docker fornece uma alternativa leve às máquinas virtuais tradicionais, permitindo que o software execute em ambientes isolados com sobrecarga mínima. Os componentes-chave do Docker incluem:
| Componente | Descrição |
|---|---|
| Docker Engine | Ambiente de tempo de execução principal para criar e gerenciar contêineres |
| Contêiner | Pacote executável leve contendo o aplicativo e suas dependências |
| Imagem Docker | Modelo somente leitura usado para criar contêineres |
| Registro Docker | Plataforma de armazenamento e distribuição de imagens Docker |
Arquitetura Docker
graph TD
A[Cliente Docker] --> B[Demônio Docker]
B --> C[Tempo de Execução de Contêiner]
B --> D[Gerenciamento de Imagem]
B --> E[Gerenciamento de Rede]
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
## Baixar uma imagem do Docker Hub
docker pull ubuntu:latest
## Listar imagens disponíveis
docker images
## Executar um contêiner
docker run -it ubuntu:latest /bin/bash
Casos de Uso Práticos para Contenção Docker
Docker permite implantação eficiente de software em vários cenários:
- Arquitetura de microserviços
- Integração Contínua/Entrega Contínua (CI/CD)
- Desenvolvimento de aplicativos nativos de nuvem
- Ambientes de desenvolvimento e produção consistentes
Desempenho e Gerenciamento de Recursos
Os contêineres Docker oferecem vantagens significativas na utilização de recursos:
- Sobrecarga mínima em comparação com a virtualização tradicional
- Tempos de inicialização e desligamento rápidos
- Alocação eficiente de recursos
- Gerenciamento de infraestrutura escalável
Domínio do Dockerfile
Compreendendo a sintaxe do Dockerfile
Um Dockerfile é um documento de texto que contém instruções para a construção de uma imagem Docker. Ele define o ambiente, as dependências e a configuração necessárias para executar um aplicativo dentro de um contêiner.
Conjunto de Instruções do Dockerfile
| Instrução | Finalidade | Exemplo |
|---|---|---|
| FROM | Especifica a imagem base | FROM ubuntu:22.04 |
| RUN | Executa comandos | RUN apt-get update |
| COPY | Copia arquivos para a imagem | COPY ./app /application |
| WORKDIR | Define o diretório de trabalho | WORKDIR /application |
| ENV | Define variáveis de ambiente | ENV PORT=8080 |
| EXPOSE | Declara portas de contêiner | EXPOSE 8080 |
| CMD | Define o comando padrão | CMD ["python", "app.py"] |
Processo de Construção do Dockerfile
graph LR
A[Dockerfile] --> B[Docker Build]
B --> C[Criação de Camadas]
C --> D[Geração de Imagem]
D --> E[Implantação de Contêiner]
Dockerfile de Exemplo para Aplicação Python
## Seleção da imagem base
FROM python:3.9-slim
## Define o diretório de trabalho
WORKDIR /app
## Instala dependências do sistema
RUN apt-get update && apt-get install -y \
build-essential \
&& rm -rf /var/lib/apt/lists/*
## Copia arquivos do aplicativo
COPY . /app
## Instala dependências Python
RUN pip install --no-cache-dir -r requirements.txt
## Exposição da porta do aplicativo
EXPOSE 5000
## Define o comando de inicialização
CMD ["python", "app.py"]
Construindo a Imagem Docker
## Construir imagem com tag
docker build -t myapp:v1 .
## Listar imagens criadas
docker images
## Verificar detalhes da imagem
docker inspect myapp:v1
Técnicas Avançadas de Dockerfile
Construções Multi-Fase
## Fase de construção
FROM maven:3.8.1-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package
## Fase de tempo de execução
FROM openjdk:11-jre-slim
COPY --from=build /app/target/app.jar /application.jar
ENTRYPOINT ["java", "-jar", "/application.jar"]
Boas Práticas
- Minimizar camadas de imagem
- Usar tags de imagem específicas
- Aproveitar o cache de construção
- Remover dependências desnecessárias
- Implementar varredura de segurança
Container Lifecycle
Container States and Management
Docker containers transition through multiple states during their operational lifecycle, providing flexible management and deployment capabilities.
Container State Diagram
stateDiagram-v2
[*] --> Created
Created --> Running
Running --> Paused
Paused --> Running
Running --> Stopped
Stopped --> Removed
Removed --> [*]
Container Lifecycle Commands
| Command | Action | Description |
|---|---|---|
| docker create | Initialize | Creates container without starting |
| docker start | Launch | Starts stopped container |
| docker run | Instantiate | Creates and immediately starts container |
| docker stop | Terminate | Gracefully stops running container |
| docker pause | Suspend | Freezes container processes |
| docker unpause | Resume | Resumes paused container |
| docker rm | Remove | Deletes container permanently |
Container Management Examples
## Create nginx container
docker create --name web-server nginx:latest
## Start container
docker start web-server
## Run interactive container
docker run -it ubuntu:22.04 /bin/bash
## Stop running container
docker stop web-server
## Remove stopped container
docker rm web-server
Container Scaling Strategies
## Create multiple container instances
docker run -d --name web1 nginx:latest
docker run -d --name web2 nginx:latest
docker run -d --name web3 nginx:latest
## List running containers
docker ps
## Inspect container details
docker inspect web1
Resource Management
## Limit container resources
docker run -d \
--name limited-container \
--cpus="0.5" \
--memory="512m" \
nginx:latest
## Monitor container performance
docker stats limited-container
Deployment Optimization Techniques
## Use docker-compose for multi-container management
version: '3'
services:
web:
image: nginx:latest
deploy:
replicas: 3
restart_policy:
condition: on-failure
Container Networking
## Create custom network
docker network create mynetwork
## Run container in specific network
docker run -d --name app --network mynetwork nginx:latest
Ciclo de Vida de Contêineres
Estados e Gerenciamento de Contêineres
Contêineres Docker passam por vários estados durante seu ciclo de vida operacional, proporcionando capacidades flexíveis de gerenciamento e implantação.
Diagrama de Estado do Contêiner
stateDiagram-v2
[*] --> Created
Created --> Running
Running --> Paused
Paused --> Running
Running --> Stopped
Stopped --> Removed
Removed --> [*]
Comandos do Ciclo de Vida do Contêiner
| Comando | Ação | Descrição |
|---|---|---|
| docker create | Inicializar | Cria um contêiner sem iniciar |
| docker start | Iniciar | Inicia um contêiner parado |
| docker run | Instanciar | Cria e inicia imediatamente um contêiner |
| docker stop | Terminar | Para um contêiner em execução graciosamente |
| docker pause | Suspender | Congela os processos do contêiner |
| docker unpause | Retomar | Retoma um contêiner suspenso |
| docker rm | Remover | Exclui permanentemente um contêiner |
Exemplos de Gerenciamento de Contêineres
## Criar contêiner nginx
docker create --name web-server nginx:latest
## Iniciar contêiner
docker start web-server
## Executar contêiner interativo
docker run -it ubuntu:22.04 /bin/bash
## Parar contêiner em execução
docker stop web-server
## Remover contêiner parado
docker rm web-server
Estratégias de Escalonamento de Contêineres
## Criar várias instâncias de contêiner
docker run -d --name web1 nginx:latest
docker run -d --name web2 nginx:latest
docker run -d --name web3 nginx:latest
## Listar contêineres em execução
docker ps
## Inspecionar detalhes do contêiner
docker inspect web1
Gerenciamento de Recursos
## Limitar recursos do contêiner
docker run -d \
--name limited-container \
--cpus="0.5" \
--memory="512m" \
nginx:latest
## Monitorar o desempenho do contêiner
docker stats limited-container
Técnicas de Otimização de Implantação
## Usar docker-compose para gerenciamento de contêineres múltiplos
version: '3'
services:
web:
image: nginx:latest
deploy:
replicas: 3
restart_policy:
condition: on-failure
Rede de Contêineres
## Criar rede personalizada
docker network create mynetwork
## Executar contêiner em rede específica
docker run -d --name app --network mynetwork nginx:latest



