Docker Cheatsheet

Aprenda Docker com Laboratórios Práticos

Aprenda a conteinerização Docker através de laboratórios práticos e cenários do mundo real. O LabEx oferece cursos abrangentes de Docker cobrindo gerenciamento essencial de contêineres, construção de imagens, Docker Compose, rede, volumes e implantação. Domine a orquestração de contêineres e técnicas modernas de implantação de aplicações.

Instalação e Configuração

Instalação no Linux

Instale o Docker em sistemas Ubuntu/Debian.

# Atualizar gerenciador de pacotes
sudo apt update
# Instalar pré-requisitos
sudo apt install apt-transport-https ca-certificates curl
software-properties-common
# Adicionar a chave GPG oficial do Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg
| sudo apt-key add -
# Adicionar repositório Docker
sudo add-apt-repository "deb [arch=amd64]
https://download.docker.com/linux/ubuntu bionic stable"
# Instalar Docker
sudo apt update && sudo apt install docker-ce
# Iniciar serviço Docker
sudo systemctl start docker
sudo systemctl enable docker

Windows e macOS

Instale o Docker Desktop para gerenciamento baseado em GUI.

# Windows: Baixar Docker Desktop em docker.com
# macOS: Usar Homebrew ou baixar de docker.com
brew install --cask docker
# Ou baixar diretamente de:
# https://www.docker.com/products/docker-desktop

Configuração Pós-Instalação

Configure o Docker para uso não-root e verifique a instalação.

# Adicionar usuário ao grupo docker (Linux)
sudo usermod -aG docker $USER
# Sair e fazer login novamente para que as alterações de grupo tenham efeito
# Verificar instalação do Docker
docker --version
docker run hello-world

Instalação do Docker Compose

Instale o Docker Compose para aplicações multi-contêineres.

# Linux: Instalar via curl
sudo curl -L
"https://github.com/docker/compose/releases/download
/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o
/usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Verificar instalação
docker-compose --version
# Nota: Docker Desktop inclui o Compose

Comandos Básicos do Docker

Informações do Sistema: docker version / docker system info

Verifique os detalhes da instalação e do ambiente Docker.

# Exibir informações de versão do Docker
docker version
# Mostrar informações do sistema Docker
information
docker system info
# Exibir ajuda para comandos Docker
docker help
docker <comando> --help

Executando Contêineres: docker run

Crie e inicie um contêiner a partir de uma imagem.

# Executar um contêiner interativamente
docker run -it ubuntu:latest bash
# Executar contêiner em segundo plano
(detached)
docker run -d --name meu-container
nginx
# Executar com mapeamento de porta
docker run -p 8080:80 nginx
# Executar com remoção automática após a saída
docker run --rm hello-world
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

O que docker run -d faz?
Executa o contêiner em modo de depuração
Exclui o contêiner após ele parar
Executa o contêiner em modo desanexado (background)
Executa o contêiner com configurações padrão

Listar Contêineres: docker ps

Visualize contêineres em execução e parados.

# Listar contêineres em execução
docker ps
# Listar todos os contêineres (incluindo
parados)
docker ps -a
# Listar apenas IDs de contêineres
docker ps -q
# Mostrar o contêiner criado mais recentemente
docker ps -l

Gerenciamento de Contêineres

Ciclo de Vida do Contêiner: start / stop / restart

Controle o estado de execução do contêiner.

# Parar um contêiner em execução
docker stop nome_do_container
# Iniciar um contêiner parado
docker start nome_do_container
# Reiniciar um contêiner
docker restart nome_do_container
# Pausar/despausar processos do contêiner
docker pause nome_do_container
docker unpause nome_do_container

Executar Comandos: docker exec

Execute comandos dentro de contêineres em execução.

# Executar shell bash interativo
docker exec -it nome_do_container bash
# Executar um único comando
docker exec nome_do_container ls -la
# Executar como usuário diferente
docker exec -u root nome_do_container whoami
# Executar em um diretório específico
docker exec -w /app nome_do_container pwd

Remoção de Contêineres: docker rm

Remova contêineres do sistema.

# Remover um contêiner parado
docker rm nome_do_container
# Remover forçadamente um contêiner em execução
docker rm -f nome_do_container
# Remover múltiplos contêineres
docker rm container1 container2
# Remover todos os contêineres parados
docker container prune

Logs do Contêiner: docker logs

Visualize a saída do contêiner e depure problemas.

# Visualizar logs do contêiner
docker logs nome_do_container
# Seguir logs em tempo real
docker logs -f nome_do_container
# Mostrar apenas logs recentes
docker logs --tail 50 nome_do_container
# Mostrar logs com carimbos de data/hora
docker logs -t nome_do_container

Gerenciamento de Imagens

Construção de Imagens: docker build

Crie imagens Docker a partir de Dockerfiles.

# Construir imagem a partir do diretório atual
docker build .
# Construir e taguear uma imagem
docker build -t minhaapp:latest .
# Construir com argumentos de construção
docker build --build-arg VERSION=1.0 -t minhaapp .
# Construir sem usar cache
docker build --no-cache -t minhaapp .
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

O que docker build -t minhaapp:latest . faz?
Constrói uma imagem Docker com a tag "minhaapp:latest" a partir do diretório atual
Executa um contêiner chamado "minhaapp"
Puxa a imagem "minhaapp:latest" do Docker Hub
Exclui a imagem "minhaapp:latest"

Inspeção de Imagens: docker images / docker inspect

Liste e examine imagens Docker.

# Listar todas as imagens locais
docker images
# Listar imagens com filtros específicos
docker images nginx
# Mostrar detalhes da imagem
docker inspect nome_da_imagem
# Ver histórico de construção da imagem
docker history nome_da_imagem

Operações de Registro: docker pull / docker push

Baixar e enviar imagens para registros.

# Puxar imagem do Docker Hub
docker pull nginx:latest
# Puxar versão específica
docker pull ubuntu:20.04
# Enviar imagem para o registro
docker push meuusuario/minhaapp:latest
# Taguear imagem antes de enviar
docker tag minhaapp:latest meuusuario/minhaapp:v1.0

Limpeza de Imagens: docker rmi / docker image prune

Remova imagens não utilizadas para liberar espaço em disco.

# Remover uma imagem específica
docker rmi nome_da_imagem
# Remover imagens não utilizadas
docker image prune
# Remover todas as imagens não utilizadas (não apenas pendentes)
docker image prune -a
# Remover imagem forçadamente
docker rmi -f nome_da_imagem

Fundamentos do Dockerfile

Instruções Essenciais

Comandos centrais do Dockerfile para construir imagens.

# Imagem base
FROM ubuntu:20.04
# Definir informação do mantenedor
LABEL maintainer="user@example.com"
# Instalar pacotes
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*
# Copiar arquivos do host para o contêiner
COPY app.py /app/
# Definir diretório de trabalho
WORKDIR /app
# Expor porta
EXPOSE 8000
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

Qual é o propósito da instrução FROM em um Dockerfile?
Copia arquivos do host para o contêiner
Especifica a imagem base sobre a qual construir
Define variáveis de ambiente
Define o comando a ser executado quando o contêiner inicia

Configuração de Execução

Configure como o contêiner será executado.

# Definir variáveis de ambiente
ENV PYTHON_ENV=production
ENV PORT=8000
# Criar usuário para segurança
RUN groupadd -r appuser && useradd -r -g appuser
appuser
USER appuser
# Definir comando de inicialização
CMD ["python3", "app.py"]
# Ou usar ENTRYPOINT para comandos fixos
ENTRYPOINT ["python3"]
CMD ["app.py"]
# Definir verificação de saúde
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:8000/ || exit 1

Docker Compose

Comandos Básicos do Compose: docker-compose up / docker-compose down

Iniciar e parar aplicações multi-contêineres.

# Iniciar serviços em primeiro plano
docker-compose up
# Iniciar serviços em segundo plano
docker-compose up -d
# Construir e iniciar serviços
docker-compose up --build
# Parar e remover serviços
docker-compose down
# Parar e remover com volumes
docker-compose down -v
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

O que docker-compose up -d faz?
Para todos os contêineres em execução
Constrói imagens sem iniciar contêineres
Mostra logs de todos os serviços
Inicia todos os serviços definidos em docker-compose.yml em modo desanexado

Gerenciamento de Serviços

Controle serviços individuais dentro de aplicações Compose.

# Listar serviços em execução
docker-compose ps
# Visualizar logs de serviço
docker-compose logs nome_do_servico
# Seguir logs para todos os serviços
docker-compose logs -f
# Reiniciar um serviço específico
docker-compose restart nome_do_servico

Exemplo de docker-compose.yml

Exemplo de configuração de aplicação multi-serviço.

version: '3.8'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      -
DATABASE_URL=postgresql://user:pass@db:5432/myapp
    depends_on:
      - db
    volumes:
      - .:/app

  db:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - db_data:/var/lib/postgresql/data
volumes:
  db_data:

Rede e Volumes

Rede de Contêineres

Conecte contêineres e exponha serviços.

# Listar redes
docker network ls
# Criar uma rede personalizada
docker network create mynetwork
# Executar contêiner em rede específica
docker run --network mynetwork nginx
# Conectar contêiner em execução à rede
docker network connect mynetwork nome_do_container
# Inspecionar detalhes da rede
docker network inspect mynetwork

Mapeamento de Portas

Exponha portas de contêineres para o sistema host.

# Mapear porta única
docker run -p 8080:80 nginx
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

Em docker run -p 8080:80 nginx, o que os números das portas significam?
8080 é a porta do host, 80 é a porta do contêiner
80 é a porta do host, 8080 é a porta do contêiner
Ambas as portas são portas de contêiner
Ambas as portas são portas do host
# Mapear múltiplas portas
docker run -p 8080:80 -p 8443:443 nginx
# Mapear para interface host específica
docker run -p 127.0.0.1:8080:80 nginx
# Expor todas as portas definidas na imagem
docker run -P nginx

Volumes de Dados: docker volume

Persistir e compartilhar dados entre contêineres.

# Criar um volume nomeado
docker volume create myvolume
# Listar todos os volumes
docker volume ls
# Inspecionar detalhes do volume
docker volume inspect myvolume
# Remover volume
docker volume rm myvolume
# Remover volumes não utilizados
docker volume prune

Montagem de Volumes

Montar volumes nomeados e diretórios do host em contêineres.

# Montar volume nomeado
docker run -v myvolume:/data nginx
# Montar diretório do host (bind mount)
docker run -v /caminho/no/host:/caminho/no/container nginx
# Montar diretório atual
docker run -v $(pwd):/app nginx
# Montagem somente leitura
docker run -v /caminho/no/host:/caminho/no/container:ro nginx

Inspeção e Depuração de Contêineres

Detalhes do Contêiner: docker inspect

Obter informações detalhadas sobre contêineres e imagens.

# Inspecionar configuração do contêiner
docker inspect nome_do_container
# Obter informação específica usando formatação
docker inspect --format='{{.State.Status}}'
nome_do_container
# Obter endereço IP
docker inspect --format='{{.NetworkSettings.IPAddress}}'
nome_do_container
# Obter volumes montados
docker inspect --format='{{.Mounts}}' nome_do_container

Monitoramento de Recursos

Monitorar o uso de recursos e o desempenho do contêiner.

# Mostrar processos em execução no contêiner
docker top nome_do_container
# Exibir estatísticas de uso de recursos ao vivo
docker stats
# Mostrar estatísticas para contêiner específico
docker stats nome_do_container
# Monitorar eventos em tempo real
docker events

Operações de Arquivo: docker cp

Copiar arquivos entre contêineres e o sistema host.

# Copiar arquivo do contêiner para o host
docker cp nome_do_container:/caminho/do/arquivo ./
# Copiar arquivo do host para o contêiner
docker cp ./arquivo nome_do_container:/caminho/do/destino
# Copiar diretório
docker cp ./diretorio
nome_do_container:/caminho/do/destino/
# Copiar com modo de arquivo para preservar permissões
docker cp -a ./diretorio nome_do_container:/caminho/

Solução de Problemas

Depurar problemas de contêiner e conectividade.

# Verificar código de saída do contêiner
docker inspect --format='{{.State.ExitCode}}'
nome_do_container
# Visualizar processos do contêiner
docker exec nome_do_container ps aux
# Testar conectividade de rede
docker exec nome_do_container ping google.com
# Verificar uso de disco
docker exec nome_do_container df -h

Registro e Autenticação

Autenticar e interagir com o Docker Hub.

# Fazer login no Docker Hub
docker login
# Fazer login em registro específico
docker login registry.example.com
# Procurar por imagens no Docker Hub
docker search nginx
# Procurar com filtro
docker search --filter stars=100 nginx

Marcação e Publicação de Imagens

Preparar e publicar imagens em registros.

# Taguear imagem para o registro
docker tag minhaapp:latest usuario/minhaapp:v1.0
docker tag minhaapp:latest
registry.example.com/minhaapp:latest
# Enviar para o Docker Hub
docker push usuario/minhaapp:v1.0
# Enviar para registro privado
docker push registry.example.com/minhaapp:latest

Registro Privado

Trabalhar com registros Docker privados.

# Puxar de registro privado
docker pull registry.company.com/minhaapp:latest
# Executar registro local
docker run -d -p 5000:5000 --name registry registry:2
# Enviar para registro local
docker tag minhaapp localhost:5000/minhaapp
docker push localhost:5000/minhaapp

Segurança de Imagens

Verificar integridade e segurança das imagens.

# Habilitar Docker Content Trust
export DOCKER_CONTENT_TRUST=1
# Assinar e enviar imagem
docker push usuario/minhaapp:signed
# Inspecionar assinaturas de imagem
docker trust inspect usuario/minhaapp:signed
# Escanear imagens em busca de vulnerabilidades
docker scan minhaapp:latest

Limpeza e Manutenção do Sistema

Limpeza do Sistema: docker system prune

Remover recursos Docker não utilizados para liberar espaço em disco.

# Remover contêineres, redes, imagens não utilizados
docker system prune
# Incluir volumes não utilizados na limpeza
docker system prune -a --volumes
# Remover tudo (use com cautela)
docker system prune -a -f
# Mostrar uso de espaço
docker system df

Limpeza Direcionada

Remover tipos específicos de recursos não utilizados.

# Remover contêineres parados
docker container prune
# Remover imagens não utilizadas
docker image prune -a
# Remover volumes não utilizados
docker volume prune
# Remover redes não utilizadas
docker network prune

Operações em Massa

Executar operações em múltiplos contêineres/imagens.

# Parar todos os contêineres em execução
docker stop $(docker ps -q)
# Remover todos os contêineres
docker rm $(docker ps -aq)
# Remover todas as imagens
docker rmi $(docker images -q)
# Remover apenas imagens pendentes (dangling)
docker rmi $(docker images -f "dangling=true" -q)

Limites de Recursos

Controlar o consumo de recursos dos contêineres.

# Limitar uso de memória
docker run --memory=512m nginx
# Limitar uso de CPU
docker run --cpus="1.5" nginx
# Limitar CPU e memória
docker run --memory=1g --cpus="2.0" nginx
# Definir política de reinicialização
docker run --restart=always nginx

Configuração e Configurações do Docker

Configuração do Daemon

Configurar o daemon Docker para uso em produção.

# Editar configuração do daemon
sudo nano
/etc/docker/daemon.json
# Exemplo de configuração:
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
# Reiniciar serviço Docker
sudo systemctl restart docker

Variáveis de Ambiente

Configurar o comportamento do cliente Docker com variáveis de ambiente.

# Definir host Docker
export
DOCKER_HOST=tcp://remote-
docker:2376
# Habilitar verificação TLS
export DOCKER_TLS_VERIFY=1
export
DOCKER_CERT_PATH=/caminho/para/cert
s
# Definir registro padrão
export
DOCKER_REGISTRY=registry.co
mpany.com
# Saída de depuração
export DOCKER_BUILDKIT=1

Ajuste de Desempenho

Otimizar o Docker para melhor desempenho.

# Habilitar recursos experimentais
echo '{"experimental": true}' |
sudo tee
/etc/docker/daemon.json
# Opções de driver de armazenamento
{
  "storage-driver": "overlay2",
  "storage-opts": [

"overlay2.override_kernel_check
=true"
  ]
}
# Configurar logging
{
  "log-driver": "syslog",
  "log-opts": {"syslog-address":
"udp://logs.company.com:514"}
}

Melhores Práticas

Melhores Práticas de Segurança

Mantenha seus contêineres seguros e prontos para produção.

# Executar como usuário não-root no Dockerfile
RUN groupadd -r appuser && useradd -r -g appuser
appuser
USER appuser
# Usar tags de imagem específicas, não 'latest'
FROM node:16.20.0-alpine
# Usar sistemas de arquivos somente leitura quando possível
docker run --read-only nginx

Otimização de Desempenho

Otimize contêineres para velocidade e eficiência de recursos.

# Usar builds multi-stage para reduzir o tamanho da imagem
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:16-alpine
WORKDIR /app
COPY --from=builder /app/node_modules
./node_modules
COPY . .
CMD ["node", "server.js"]