I contenitori hanno trasformato il modo in cui distribuiamo, scaldiamo e gestiamo le applicazioni, impacchettando codice e dipendenze in un’unità standardizzata che può funzionare in modo coerente in qualsiasi ambiente. Quando utilizzati in ambienti cloud, i contenitori offrono:
- Portabilità attraverso sviluppo, test e produzione.
- Scalabilità per adattarsi rapidamente al traffico e alla domanda.
- Efficienza con un sovraccarico ridotto rispetto alle tradizionali macchine virtuali.
In questo tutorial, passeremo attraverso una configurazione completa di un’applicazione containerizzata ospitata nel cloud, coprendo:
- Le basi dei contenitori e perché sono ideali per il cloud.
- Impostare un’applicazione Dockerizzata.
- Distribuire il contenitore a un fornitore cloud (usando Google Cloud Platform come esempio).
- Scalare e gestire il tuo contenitore nel cloud.
Basi dei Contenitori: Come i Contenitori Si Inseriscono nei Flussi di Lavoro del Cloud
I contenitori racchiudono tutte le librerie e le dipendenze necessarie per eseguire un’applicazione. A differenza delle tradizionali macchine virtuali, in cui ciascuna ha un sistema operativo, i contenitori condividono il sistema operativo host, rendendoli leggeri ed efficienti.
Perché i Contenitori per il Cloud?
- I tempi di avvio rapidi significano una scalabilità più veloce per gestire il traffico variabile.
- Coerenza tra gli ambienti garantisce che il codice si comporti allo stesso modo dai laptop degli sviluppatori alla produzione.
- Efficienza delle risorse consente una distribuzione ad alta densità sulla stessa infrastruttura.
Componenti principali della containerizzazione cloud
- Motore di contenitori: Gestisce ed esegue contenitori (ad es., Docker, containerd).
- Orchestrazione: Garantisce l’affidabilità dell’app, la scalabilità e il bilanciamento del carico (ad es., Kubernetes, ECS).
- Registro: Memorizza le immagini dei contenitori per l’accesso tra gli ambienti (ad es., Docker Hub, GCR).
Impostare un’applicazione Dockerizzata
Inizieremo containerizzando una semplice applicazione Node.js.
Passo 1: Crea l’applicazione
1. In una cartella di progetto, inizializza un progetto Node.js:
mkdir cloud-container-app && cd cloud-container-app
npm init -y
2. Crea un file server di base, 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. Aggiungi Express al progetto:
npm install express
Passo 2: Crea un Dockerfile
Questo Dockerfile specifica come impacchettare l’app in un contenitore 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: Costruisci e testa l’immagine Docker localmente
1. Costruisci l’immagine Docker:
docker build -t cloud-container-app .
2. Esegui il contenitore localmente:
docker run -p 3000:3000 cloud-container-app
3. Visita `http://localhost:3000` nel tuo browser. Dovresti vedere “Ciao, Cloud Container!” visualizzato.
Implementazione del container su Google Cloud Platform (GCP)
In questa sezione, spingeremo l’immagine del container su Google Container Registry (GCR) e la implementeremo su Google Kubernetes Engine (GKE).
Passaggio 1: Configura un Progetto GCP
1. Crea un Progetto GCP. Vai alla [Console di Google Cloud] (https://console.cloud.google.com) e crea un nuovo progetto.
2. Abilita le API di Kubernetes Engine e Container Registry per il tuo progetto.
Passaggio 2: Spingi l’Immagine su Google Container Registry
1. Etichetta l’immagine Docker per Google Cloud:
docker tag cloud-container-app gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
2. Spingi l’immagine su GCR:
docker push gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
Passaggio 3: Crea un Cluster Kubernetes
1. Inizializza un Cluster GKE:
gcloud container clusters create cloud-container-cluster --num-nodes=2
2. Configura kubectl
per connetterti al tuo nuovo cluster:
gcloud container clusters get-credentials cloud-container-cluster
Passaggio 4: Implementa l’App Containerizzata su GKE
1. Crea un file k8s-deployment.yaml
per definire la distribuzione e il servizio:
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. Implementa l’applicazione su GKE:
kubectl apply -f k8s-deployment.yaml
3. Ottieni l’IP esterno per accedere all’applicazione:
kubectl get services
Scaling e Gestione dei Container in GKE
Passaggio 1: Scala la Distribuzione
Per regolare il numero di repliche (ad es., per gestire un traffico maggiore), utilizza il seguente comando:
kubectl scale deployment cloud-container-app --replicas=5
GKE scalerà automaticamente l’app aggiungendo repliche e distribuendo il carico.
Passo 2: Monitorare e Gestire i Log
1. Usa il comando qui sotto per visualizzare i log di un pod specifico in Kubernetes:
kubectl logs <POD_NAME>
2. Abilita il dashboard di GKE per monitorare lo stato dei pod e l’uso delle risorse e gestire i deployment in modo visivo.
Conclusione: Sfruttare i Container per Deployment Cloud Scalabili
Questo tutorial ha trattato:
- La containerizzazione di un’app Node.js usando Docker.
- Il deployment su Google Kubernetes Engine (GKE) per un hosting scalabile e gestito.
- Gestire e scalare i container in modo efficace nel cloud.
Con i container nel cloud, le tue applicazioni guadagnano scalabilità, portabilità ed efficienza — assicurando che siano pronte a gestire la domanda, adattarsi rapidamente e mantenere coerenza tra gli ambienti.
Source:
https://dzone.com/articles/a-step-by-step-guide-to-deploying-containers-in-the-cloud