DevForge

Docker

Plataforma de containerização que permite empacotar aplicações e dependências em contêineres isolados, garantindo portabilidade e consistência em qualquer ambiente.

🐳 Docker Engine 📦 Docker Compose 📤 Docker Hub 🔒 Docker Scout 📊 Docker Stats

⚡ Instalação do Docker

Linux (Ubuntu/Debian)
curl -fsSL https://rafaelferreira2312.github.io/devforge/scripts/docker/install-docker.sh | bash
Windows (Docker Desktop)
winget install Docker.DockerDesktop
macOS (Docker Desktop)
brew install --cask docker

Após instalação, execute docker --version para verificar.

🐳 Comandos Essenciais Docker

📦 Gerenciamento de Containers

docker run -d -p 80:80 --name nginx nginx:alpine
docker ps -a
docker stop nginx
docker start nginx
docker rm -f nginx

📦 Imagens e Logs

docker images
docker pull ubuntu:22.04
docker logs -f nginx
docker exec -it nginx /bin/bash
docker rmi nginx:alpine

Dockerfile - Exemplos

🐍 Python App

FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python", "app.py"]

🟢 Node.js App

FROM node:20-alpine WORKDIR /app COPY package*.json . RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["node", "server.js"]

🐘 PHP + Nginx

FROM php:8.3-fpm-alpine RUN docker-php-ext-install pdo pdo_mysql mysqli COPY --from=composer:latest /usr/bin/composer /usr/bin/composer WORKDIR /var/www/html COPY . . CMD ["php-fpm"]

Docker Compose

Exemplo: WordPress + MySQL + phpMyAdmin

version: '3.8' services: db: image: mysql:8.0 restart: always environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: wordpress MYSQL_USER: wpuser MYSQL_PASSWORD: wppass volumes: - db_data:/var/lib/mysql wordpress: depends_on: - db image: wordpress:latest ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wpuser WORDPRESS_DB_PASSWORD: wppass WORDPRESS_DB_NAME: wordpress volumes: - wp_data:/var/www/html phpmyadmin: image: phpmyadmin/phpmyadmin ports: - "8081:80" environment: PMA_HOST: db PMA_PORT: 3306 volumes: db_data: wp_data:
docker-compose up -d
docker-compose down -v
docker-compose logs -f
docker-compose ps

🚀 Comandos Avançados

docker build -t minha-app:latest .
docker tag minha-app:latest meuuser/minha-app:v1
docker push meuuser/minha-app:v1
docker network create minha-rede
docker volume create meu-volume
docker system prune -a -f

Boas Práticas Docker

Use imagens oficiais e específicas (ex: python:3.11-slim)
Multi-stage builds para reduzir tamanho
Não rode containers como root
Use .dockerignore para excluir arquivos desnecessários
Mantenha uma camada por instrução (combine RUN commands)
Use healthcheck para monitorar containers
Varíe versões de imagens com variáveis ARG
Use Docker Scout para vulnerabilidades

🔧 Troubleshooting Docker

❌ Erro: "docker: permission denied"

Causa: Usuário não está no grupo docker.
Solução: sudo usermod -aG docker $USER && newgrp docker

⚠️ Erro: "port is already allocated"

Causa: Porta já em uso por outro container ou processo.
Solução: docker ps para listar containers e docker stop ou mapeie porta diferente.

🐘 Erro: "No space left on device"

Causa: Docker consumiu todo espaço em disco.
Solução: docker system prune -a -f && docker volume prune -f

Diagnóstico automático Docker:

docker --version && docker-compose --version && docker info && docker ps && echo "---" && docker system df

Este comando verifica versão do Docker, Docker Compose, informações do sistema, containers rodando e uso de disco.

⚠️ IMPORTANTE - Como executar os scripts corretamente

Os scripts abaixo funcionam em Windows, Linux e macOS. Siga as instruções específicas do seu sistema:

WINDOWS (PowerShell)
# ERRO COMUM: "arquivo não assinado" ou "execução de scripts desabilitada" # SOLUÇÃO 1: Executar com bypass (recomendado) powershell -ExecutionPolicy Bypass -File "C:\caminho\script.ps1" # SOLUÇÃO 2: Baixar e executar direto (pode ter erro de codificação) powershell -ExecutionPolicy Bypass -Command "iex (irm https://.../script.ps1)" # SOLUÇÃO 3: Habilitar execução permanentemente (como Administrador) Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # Se houver erros de acentuação (caracteres estranhos): O script ainda funciona, apenas a saída visual pode ficar distorcida
LINUX / WSL (Bash)
# ERRO COMUM: "permission denied" ou "comando não encontrado" # SOLUÇÃO 1: Dar permissão de execução (obrigatório) chmod +x script.sh # SOLUÇÃO 2: Executar o script ./script.sh # SOLUÇÃO 3: Executar via curl (baixar e executar direto) curl -fsSL https://.../script.sh | bash # SOLUÇÃO 4: Se der erro de permissão, use sudo (cuidado!) sudo chmod +x script.sh && sudo ./script.sh # Se houver erros de permissão: Execute 'ls -la script.sh' para verificar permissões atuais
macOS (Terminal / Zsh)
# ERRO COMUM: "permission denied" ou "operation not permitted" # SOLUÇÃO 1: Dar permissão de execução chmod +x script.sh # SOLUÇÃO 2: Executar o script ./script.sh # SOLUÇÃO 3: Se der erro de "quarentena" (arquivo baixado da internet) xattr -d com.apple.quarantine script.sh # SOLUÇÃO 4: Executar via curl curl -fsSL https://.../script.sh | bash # Se erro persistir: Vá em Preferências do Sistema → Segurança e Privacidade → Permitir execução

Dicas importantes:
Windows: Se aparecerem caracteres estranhos (ex: "�" ou "ção"), ignore - o script funciona normalmente. Para evitar, baixe o script localmente e execute.
Linux/macOS: Sempre use chmod +x antes de executar scripts baixados.
WSL (Windows): Siga as instruções do Linux, mas certifique-se de que o script está dentro do sistema de arquivos do Linux (não no /mnt/c/).

📜 Scripts prontos

Scripts verificados no Ubuntu 22.04/24.04, Debian 12, macOS 13+ e Windows 10/11.

❓ Perguntas frequentes - Docker

Diferença entre Docker e Virtual Machine?

Docker compartilha o kernel do host, é mais leve e rápido. VMs tem kernel próprio, mais isoladas mas pesadas.

Como persistir dados em containers?

Use volumes (docker volume create) ou bind mounts (-v /host/path:/container/path).

Como reduzir tamanho da imagem Docker?

Use imagens alpine/slim, multi-stage builds, combine RUN commands e use .dockerignore.

Como monitorar containers em produção?

Use docker stats, Prometheus + cAdvisor, ou ferramentas como Portainer e Docker Scout.