9.1 Arquitetura de Microsserviços
Docker virou uma ferramenta essencial pra desenvolvimento moderno. Ele ajuda a criar, rodar e implementar apps em containers isolados, o que os torna práticos, estáveis e simples de trabalhar. Nessa aula, vamos ver exemplos de como o Docker facilita muito a vida de devs e admins.
Problema
Desenvolver apps monolíticos geralmente dá problema na manutenção e no escalonamento. Qualquer mudança numa parte pode impactar outras, complicando as atualizações e os testes.
Solução com Docker
O Docker possibilita usar uma arquitetura de microsserviços, empacotando cada serviço em um container separado. Isso garante independência e isolamento entre os microsserviços.
Exemplo
Suponha que você tenha um app com três microsserviços: usuários, pedidos e pagamentos. Com o Docker, dá pra criar três containers:
docker run -d --name users-service users-image
docker run -d --name orders-service orders-image
docker run -d --name payment-service payment-image
9.2 Integração e entrega contínuas (CI/CD)
Problema
Desenvolver, testar e implantar geralmente levam muito tempo, especialmente se os ambientes forem diferentes entre si.
Solução com Docker
O Docker ajuda a criar o mesmo ambiente para todas as etapas de desenvolvimento. Isso garante que o aplicativo funcione da mesma forma em todos os lugares — desde o desenvolvimento até a produção.
Exemplo
Configurar CI/CD com Docker permite automatizar a construção, os testes e a implantação:
Construção da imagem:
docker build -t my-app .
Execução de testes:
docker run my-app ./run-tests.sh
Implantação:
docker push my-app:latest
ssh user@production-server "docker pull my-app:latest && docker run -d my-app"
9.3 Portabilidade e consistência
Problema
Muitas vezes, uma aplicação funciona em uma máquina, mas se recusa a rodar em outra por causa de diferenças nas configurações ou versões de dependências.
Solução com Docker
Docker permite empacotar a aplicação com todas as suas dependências em um container, que funciona garantidamente em qualquer ambiente.
Exemplo
Com Dockerfile, você pode descrever as dependências e os comandos para rodar a aplicação:
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]
Agora a aplicação vai funcionar de forma estável tanto na sua máquina local quanto no servidor ou na nuvem.
9.4 Garantir segurança
Problema
Deploy de aplicações pode ser vulnerável, especialmente se você usar bibliotecas e ferramentas de terceiros.
Solução com Docker
Docker garante isolamento dos containers, diminuindo os riscos. Os containers trabalham de forma independente, limitando o impacto no sistema.
Exemplo
Use parâmetros para limitar os recursos e melhorar a segurança:
docker run -d --name secure-app --memory="512m" --cpus="1" --security-opt=no-new-privileges my-secure-app
9.5 Testes e automação
Problema
Fazer testes em diferentes configurações leva tempo e pode afetar o ambiente principal.
Como o Docker resolve isso
O Docker permite criar ambientes de teste isolados sem mexer no sistema principal.
Exemplo
Exemplo de iniciar um banco de dados e uma aplicação em um ambiente de teste:
docker run -d --name test-db -e POSTGRES_PASSWORD=mysecretpassword postgres
docker run -d --name test-app --link test-db:db my-app
9.6 Computação em Nuvem e Escalabilidade
Problema
Escalar aplicações na nuvem pode ser complicado e caro.
Solução com Docker
Docker facilita o escalonamento graças à integração com plataformas em nuvem como AWS, Azure e Google Cloud.
Exemplo
Usando Docker e Kubernetes, dá pra configurar o escalonamento com facilidade. Aqui está um exemplo de arquivo yaml. Pode não fazer muito sentido agora, mas com o tempo vamos entender tudo.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 80
GO TO FULL VERSION