Docker e Kubernetes: Deploy de Aplicacoes em 2026

A containerizacao se tornou o padrao indiscutivel para deploy de aplicacoes em producao. Com Docker e Kubernetes, empresas de todos os tamanhos conseguem implantar sistemas de forma consistente, escalavel e resiliente.

Por Que Containerizar?

Um container empacota sua aplicacao com todas as suas dependencias, garantindo que ela funcione exatamente da mesma forma em qualquer ambiente.

Beneficios:

  • Consistencia: Funciona na mesma maquina e em qualquer servidor
  • Isolamento: Cada servico roda em seu proprio container
  • Escalabilidade: Containers podem ser multiplicados conforme a demanda
  • Portabilidade: Funciona em qualquer nuvem ou servidor

Criando seu Primeiro Dockerfile

FROM node:20-alpine AS builder

WORKDIR /app

COPY package*.json ./

RUN npm ci --only=production

COPY . .

RUN npm run build

FROM node:20-alpine AS production

WORKDIR /app

RUN addgroup -g 1001 -S nodejs

RUN adduser -S nextjs -u 1001

COPY --from=builder --chown=nextjs:nodejs /app/dist ./dist

COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules

USER nextjs

EXPOSE 3000

CMD ["node", "dist/index.js"]

Esse Dockerfile usa multi-stage builds para manter a imagem final pequena.

Docker Compose para Desenvolvimento

version: '3.8'

services:

app:

build: .

ports:

- "3000:3000"

environment:

- DATABASE_URL=postgresql://postgres:password@db:5432/myapp

depends_on:

- db

- redis

db:

image: postgres:16-alpine

environment:

POSTGRES_PASSWORD: password

POSTGRES_DB: myapp

volumes:

- postgres_data:/var/lib/postgresql/data

redis:

image: redis:7-alpine

volumes:

postgres_data:

Introducao ao Kubernetes

Enquanto Docker resolve a containerizacao, Kubernetes resolve a orquestracao:

apiVersion: apps/v1

kind: Deployment

metadata:

name: myapp

spec:

replicas: 3

selector:

matchLabels:

app: myapp

template:

metadata:

labels:

app: myapp

spec:

containers:

- name: myapp

image: myregistry/myapp:latest

ports:

- containerPort: 3000

resources:

requests:

memory: "256Mi"

cpu: "250m"

limits:

memory: "512Mi"

cpu: "500m"

Expondo Servicos com Ingress

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

name: myapp-ingress

spec:

rules:

- host: myapp.example.com

http:

paths:

- path: /

pathType: Prefix

backend:

service:

name: myapp-service

port:

number: 80

CI/CD com GitHub Actions

name: Deploy to Kubernetes

on:

push:

branches: [main]

jobs:

deploy:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v4

- name: Build and push Docker image

uses: docker/build-push-action@v5

with:

push: true

tags: myregistry/myapp:${{ github.sha }}

- name: Deploy to Kubernetes

uses: azure/k8s-deploy@v4

with:

manifests: k8s/

images: myregistry/myapp:${{ github.sha }}

Conclusao

Docker e Kubernetes sao ferramentas essenciais para desenvolvedores modernos. Comece com Docker Compose e migre para Kubernetes quando precisar de escalabilidade.

Este artigo foi escrito com carinho para ajudar nossos leitores a compreender melhor o tema abordado. Ao longo do texto, apresentamos informacoes relevantes, dicas praticas e orientacoes que podem ser aplicadas no dia a dia.

Agradecemos por ler este artigo e esperamos que tenha sido util. Nao esqueça de compartilhar com seus amigos e familiares que tambem podem se beneficiar dessas informacoes. Sua opiniao e muito importante para nos!

Se voce tem alguma duvida ou sugestao, deixe nos comentarios abaixo. Estamos sempre dispostos a ajudar e aprender mais sobre os assuntos que interessam ao nosso publico. Ate a proxima!

Continue acompanhando nosso blog para mais conteudos como este. Temos artigos sobre diversas categorias, sempre com informacoes atualizadas e de qualidade. Siga-nos nas redes sociais para nao perder nenhuma atualizacao!