Os containers transformaram a maneira como implantamos, escalamos e gerenciamos aplicativos, empacotando código e dependências em uma unidade padronizada que pode ser executada de forma consistente em qualquer ambiente. Quando usados em ambientes de nuvem, os containers oferecem:
- Portabilidade entre desenvolvimento, teste e produção.
- Escalabilidade para se adaptar rapidamente ao tráfego e à demanda.
- Eficiência com uma sobrecarga reduzida em comparação com máquinas virtuais tradicionais.
Neste tutorial, vamos passar por uma configuração completa de uma aplicação containerizada hospedada na nuvem, cobrindo:
- Os fundamentos dos containers e por que eles são ideais para a nuvem.
- Configuração de uma aplicação Dockerizada.
- Implantação do container em um provedor de nuvem (usando Google Cloud Platform como exemplo).
- Escalando e gerenciando seu container na nuvem.
Fundamentos dos Containers: Como os Containers se Encaixam nos Fluxos de Trabalho da Nuvem
Containers encapsulam todas as bibliotecas e dependências necessárias para executar uma aplicação. Ao contrário das máquinas virtuais tradicionais, nas quais cada uma possui um sistema operacional, os containers compartilham o sistema operacional do host, tornando-os leves e eficientes.
Por que Containers para a Nuvem?
- Tempos de inicialização rápidos significam escalonamento mais rápido para lidar com tráfego variável.
- Consistência em todos os ambientes garante que o código se comporte da mesma forma desde os laptops dos desenvolvedores até a produção.
- Eficiência de recursos permite implantação de alta densidade na mesma infraestrutura.
Componentes Principais da Containerização em Nuvem
- Motor de Contêiner: Gerencia e executa contêineres (por exemplo, Docker, containerd).
- Orquestração: Garante confiabilidade do aplicativo, escalabilidade e balanceamento de carga (por exemplo, Kubernetes, ECS).
- Registro: Armazena imagens de contêineres para acesso em todos os ambientes (por exemplo, Docker Hub, GCR).
Configurando uma Aplicação Dockerizada
Vamos começar containerizando uma aplicação simples Node.js.
Passo 1: Criar a Aplicação
1. Em uma pasta de projeto, inicialize um projeto Node.js:
mkdir cloud-container-app && cd cloud-container-app
npm init -y
2. Crie um arquivo de servidor básico, app.js
:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, Cloud Container!');
});
app.listen(3000, () => {
console.log('App running on port 3000');
});
3. Adicione o Express ao projeto:
npm install express
Passo 2: Criar um Dockerfile
Este Dockerfile especifica como empacotar o aplicativo em um contêiner Docker.
# Use the Node.js image as a base
FROM node:14
# Set working directory
WORKDIR /app
# Copy files and install dependencies
COPY . .
RUN npm install
# Expose the app’s port
EXPOSE 3000
# Start the application
CMD ["node", "app.js"]
Passo 3: Construir e Testar a Imagem Docker Localmente
1. Construa a imagem Docker:
docker build -t cloud-container-app .
2. Execute o contêiner localmente:
docker run -p 3000:3000 cloud-container-app
3. Visite `http://localhost:3000` em seu navegador. Você deverá ver “Olá, Cloud Container!” sendo exibido.
Implantando o Contêiner na Google Cloud Platform (GCP)
Nesta seção, iremos enviar a imagem do contêiner para o Registro de Contêineres do Google (GCR) e implantá-la no Google Kubernetes Engine (GKE).
Passo 1: Configurar um Projeto GCP
1. Crie um Projeto GCP. Acesse o [Console do Google Cloud] (https://console.cloud.google.com) e crie um novo projeto.
2. Ative as APIs do Kubernetes Engine e do Registro de Contêineres para o seu projeto.
Passo 2: Enviar a Imagem para o Registro de Contêineres do Google
1. Adicione uma tag à imagem Docker para o Google Cloud:
docker tag cloud-container-app gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
2. Envie a imagem para o GCR:
docker push gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
Passo 3: Criar um Cluster Kubernetes
1. Inicialize um Cluster GKE:
gcloud container clusters create cloud-container-cluster --num-nodes=2
2. Configure o kubectl
para se conectar ao seu novo cluster:
gcloud container clusters get-credentials cloud-container-cluster
Passo 4: Implantar o Aplicativo Contêinerizado no GKE
1. Crie um arquivo k8s-deployment.yaml
para definir o deployment e o service:
apiVersion apps/v1
kind Deployment
metadata
name cloud-container-app
spec
replicas2
selector
matchLabels
app cloud-container-app
template
metadata
labels
app cloud-container-app
spec
containers
name cloud-container-app
image gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
ports
containerPort3000
---
apiVersion v1
kind Service
metadata
name cloud-container-service
spec
type LoadBalancer
selector
app cloud-container-app
ports
protocol TCP
port80
targetPort3000
2. Implante o aplicativo no GKE:
kubectl apply -f k8s-deployment.yaml
3. Obtenha o IP externo para acessar o aplicativo:
kubectl get services
Dimensionando e Gerenciando Contêineres no GKE
Passo 1: Dimensionar o Deployment
Para ajustar o número de réplicas (por exemplo, para lidar com um tráfego maior), utilize o seguinte comando:
kubectl scale deployment cloud-container-app --replicas=5
O GKE escalará automaticamente o aplicativo adicionando réplicas e distribuindo a carga.
Passo 2: Monitorar e Gerenciar Logs
1. Use o comando abaixo para visualizar os logs de um pod específico no Kubernetes:
kubectl logs <POD_NAME>
2. Habilite o painel do GKE para monitorar o status do pod e o uso de recursos, além de gerenciar implantações visualmente.
Conclusão: Aproveitando Contêineres para Implantações em Nuvem Escaláveis
Este tutorial abordou:
- Containerização de um aplicativo Node.js usando Docker.
- Implantação no Google Kubernetes Engine (GKE) para hospedagem escalável e gerenciada.
- Gerenciamento e escalonamento eficaz de contêineres na nuvem.
Com contêineres na nuvem, suas aplicações ganham escalabilidade, portabilidade e eficiência — garantindo que estejam prontas para lidar com a demanda, se adaptar rapidamente e permanecer consistentes em diferentes ambientes.
Source:
https://dzone.com/articles/a-step-by-step-guide-to-deploying-containers-in-the-cloud