Dockerfile Examples: Exemplos do Mundo Real π
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DOCKERFILE EXAMPLES COLLECTION β
β β
β Web Apps β APIs β Databases β CLI Tools β Microservices β
β β
β Development β Production β Multi-stage β Optimized β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Web Applications π
Node.js Application
# Development
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
# Production
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package*.json ./
RUN npm ci --only=production
EXPOSE 3000
CMD ["npm", "start"]
React + Nginx
# Build stage
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Production stage
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Backend Services π§
Go API Server
# Build stage
FROM golang:1.19-alpine AS builder
WORKDIR /app
COPY go.* ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o api
# Production stage
FROM alpine:3.18
RUN apk add --no-cache ca-certificates
COPY --from=builder /app/api /usr/local/bin/
COPY --from=builder /app/configs /configs
EXPOSE 8080
CMD ["api", "--config", "/configs/prod.yaml"]
Python FastAPI
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
ENV PORT=8000
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Databases πΎ
PostgreSQL Custom
FROM postgres:15-alpine
# ConfiguraΓ§Γ΅es customizadas
COPY postgresql.conf /etc/postgresql/postgresql.conf
COPY init.sql /docker-entrypoint-initdb.d/
# Timezone
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Volumes
VOLUME ["/var/lib/postgresql/data"]
EXPOSE 5432
Redis with Custom Config
FROM redis:7-alpine
# Copiar configuraΓ§Γ£o customizada
COPY redis.conf /usr/local/etc/redis/redis.conf
# PersistΓͺncia
VOLUME ["/data"]
EXPOSE 6379
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
CLI Tools π οΈ
AWS CLI Tool
FROM alpine:3.18
RUN apk add --no-cache \
python3 \
py3-pip \
groff \
less \
&& pip3 install --no-cache-dir awscli
WORKDIR /aws
ENTRYPOINT ["aws"]
Custom DevOps Tool
FROM ubuntu:22.04
# Ferramentas essenciais
RUN apt-get update && apt-get install -y \
curl \
wget \
git \
jq \
vim \
&& rm -rf /var/lib/apt/lists/*
# Scripts customizados
COPY scripts/ /usr/local/bin/
RUN chmod +x /usr/local/bin/*
WORKDIR /workspace
ENTRYPOINT ["/bin/bash"]
Microservices π
Java Spring Boot
# Build stage
FROM eclipse-temurin:17-jdk-alpine AS builder
WORKDIR /app
COPY . .
RUN ./gradlew bootJar
# Production stage
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY --from=builder /app/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
Rust Microservice
# Build stage
FROM rust:1.70 AS builder
WORKDIR /usr/src/app
COPY . .
RUN cargo build --release
# Production stage
FROM debian:bullseye-slim
RUN apt-get update && apt-get install -y \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/src/app/target/release/myapp /usr/local/bin/
CMD ["myapp"]
Development Environments π§
PHP Development
FROM php:8.2-apache
# ExtensΓ΅es PHP
RUN docker-php-ext-install \
pdo_mysql \
mysqli
# Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Apache config
COPY apache.conf /etc/apache2/sites-available/000-default.conf
RUN a2enmod rewrite
# App
WORKDIR /var/www/html
COPY . .
RUN composer install
EXPOSE 80
Vue.js Development
FROM node:18-alpine
WORKDIR /app
# Dependencies
COPY package*.json ./
RUN npm install
# Hot reload config
COPY . .
ENV HOST=0.0.0.0
EXPOSE 5173
CMD ["npm", "run", "dev"]
Production Patterns π
Secure Python App
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN python -m compileall -b .
FROM python:3.11-slim
WORKDIR /app
# UsuΓ‘rio nΓ£o-root
RUN useradd -m -r appuser && \
chown appuser:appuser /app
# Apenas arquivos compilados
COPY --from=builder /app/*.pyc .
COPY --from=builder /app/configs ./configs
USER appuser
CMD ["python", "main.pyc"]
Optimized Node.js
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
# Apenas dependΓͺncias de produΓ§Γ£o
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package*.json ./
RUN npm ci --only=production
# ConfiguraΓ§Γ΅es de seguranΓ§a
ENV NODE_ENV=production
USER node
EXPOSE 3000
CMD ["node", "dist/main.js"]
Waifu Example Tips π‘
Checkpoint β
Você agora tem exemplos de:
[x] Aplicações Web modernas
[x] Backends e APIs
[x] Bancos de dados customizados
[x] Ferramentas CLI
[x] Microserviços
[x] Ambientes de desenvolvimento
[x] Configurações de produção
Próximos Passos π―
Advanced Patterns
Production Deployment
Recursos Adicionais π
16 abril 2025