The Hitchhiker's Guide to Docker Deployment: Da EC2 a ECS Fargate

Don't Panic - Il Momento Magico: Quando il Tuo Container Docker Vive su Internet

Come Douglas Adams insegnava, l'universo è un posto vasto e complicato. E se pensi che il deploy di un'applicazione sia confuso, aspetta di vedere cosa succede quando una balena piena di container decide di "cadere" dal tuo localhost direttamente su AWS.

Spoiler: Non è doloroso come sembra, e alla fine tutto ha senso.

Quello che ho imparato oggi seguendo "Docker & Kubernetes: The Practical Guide" di Maximilian Schwarzmüller su Udemy

L'Inizio del Viaggio: Da Localhost al Mondo

C'è un momento particolare nello studio di Docker in cui tutto cambia. Non è quando capisci cos'è un container, o quando fai il tuo primo `docker run`. È quando realizzi che il tuo container può vivere da qualche altra parte nel mondo e tu puoi controllarlo dal tuo terminale.

Il Case Study: Una Semplice App Node.js

Per questo viaggio ho usato una piccola applicazione Node.js - niente di complesso, giusto un server Express che serve una pagina HTML. Il tipo di progetto perfetto per imparare i deployment senza complicazioni eccessive.

Sviluppare in locale con bind mounts e hot reload è una cosa. Ma il deploy in produzione? Quello è un altro mondo completamente diverso.

Deploy Manuale su AWS EC2 con Docker: L'Approccio Fai-da-Te

SSH: La Chiave del Regno

Il primo approccio che ho sperimentato è quello "fai-da-te" con AWS EC2. Creare un'istanza, generare le chiavi SSH, e poi... il momento magico:

chmod 400 "nome-chiave.pem"

ssh -i "nome-chiave.pem" ec2-user@your-instance-ipCode language: CSS (css)

E improvvisamente il terminale non agisce più sulla tua macchina locale, ma su quella remota. Che figata! È proprio questa l'emozione che provi quando realizzi di controllare una macchina dall'altra parte del mondo.

Diventare Sysadmin per un Giorno

Una volta dentro, ti senti un vero sistemista. Aggiorniamo il sistema:

sudo yum update -y

Installiamo Docker:

sudo yum -y install docker

sudo service docker start

sudo usermod -a -G docker ec2-user

Ogni comando ha il suo peso. `yum` è il package manager di Amazon Linux, `-y` significa "sì a tutto", e improvvisamente stai configurando un server vero.

Gotcha Alert: Il Problema delle Architetture Multiple

⚠️ Attenzione Mac Users!

Se hai un Mac con processore M1/M2, ti imbatterai in questo problema: il tuo Mac crea immagini ARM64, ma i server AWS EC2 girano spesso su architettura x86_64. Risultato? La tua immagine Docker non parte sul server!

La soluzione è il build multi-architettura con `buildx`:

docker buildx create --use --name multiarch

docker buildx build --platform linux/amd64,linux/arm64 \

-t pandagandocker/node-example-1 \

--push .Code language: PHP (php)

E per verificare che tutto sia ok:

docker manifest inspect pandagandocker/node-example-1

Il Momento della Verità

Sul server remoto:

docker run -d --rm -p 80:80 pandagandocker/node-example-1

Ma aspetta... l'app non è raggiungibile!

💡 Security Groups AWS

Come comportamento default AWS blocca tutto il traffico tranne SSH (porta 22). Devi andare in Reti e sicurezza > Gruppi di sicurezza e aggiungere manualmente una regola in entrata per HTTP (porta 80). La sicurezza è tight by default - meglio così!

E quando finalmente inserisci l'indirizzo IPv4 pubblico nel browser e vedi la tua semplice app Node.js che risponde... quello è IL momento. La tua applicazione sta girando da qualche parte nel cloud Amazon, e tu la stai controllando dal tuo salotto.

Gli Update: La Realtà del Mondo Reale

Cambi qualcosa nel codice? Ecco la routine:

# Build e push locale

docker buildx build --platform linux/amd64,linux/arm64 \

-t pandagandocker/node-example-1 \

--push .

# Sul server remoto

docker stop "nome-container"

docker pull pandagandocker/node-example-1

docker run -d --rm -p 80:80 pandagandocker/node-example-1Code language: PHP (php)

Funziona, ma... è tutto molto manuale. E sei responsabile di tutto: sicurezza, aggiornamenti, monitoring.

Deploy Gestito con AWS ECS Fargate: L'Evoluzione Serverless

Il Grande Trade-off: Controllo vs Semplicità

Dopo aver sperimentato l'approccio "fai-da-te", arriva la rivelazione: non sempre serve controllare tutto. A volte è meglio delegare.

Confronto: EC2 Manuale vs ECS Fargate

AspettoEC2 ManualeECS Fargate
Setup inizialeSSH, installazione Docker, config serverInterfaccia web, pochi click
ManutenzioneAggiornamenti SO, patch sicurezzaGestita automaticamente da AWS
ScalingManuale, devi monitorare e agireAuto-scaling automatico
CostiIstanza sempre accesa (anche se inutilizzata)Pay-per-use effettivo
ControlloTotale sull'ambienteLimitato alle configurazioni container
ComplessitàAlta, serve conoscenza Linux/DevOpsBassa, focus sul codice

AWS ECS con Fargate rappresenta l'opposto filosofico dell'EC2 manuale:

  • Serverless: Il server esiste ma non lo vedi né lo gestisci
  • Pay-per-use: Paghi solo CPU/RAM effettivamente consumati
  • Auto-scaling: Si adatta al traffico senza intervento manuale
  • Zero manutenzione: AWS gestisce tutto l'underlying infrastructure

ECS: Quando Simple is Better

Creare un servizio ECS è un'esperienza completamente diversa. Dalla console AWS:

  1. ECS > Definizioni di processo > Crea nuova
  2. Scegli AWS Fargate
  3. Configura il container (immagine Docker Hub, porte, risorse)
  4. Crea un cluster e assegna il servizio

Niente SSH, niente installazioni manuali. Solo configurazione tramite interfaccia web.

Gli Update Diventano Civili

Quando modifichi il codice:

  1. Push su Docker Hub (come sempre)
  2. ECS > Definizioni processo > Crea nuova revisione
  3. ECS > Cluster > Servizio > Aggiorna

ECS si occupa di:

  • Fermare i vecchi container
  • Avviare quelli nuovi
  • Gestire il rolling update
  • Mantenere l'app sempre disponibile

Le Mie Riflessioni

Quando Scegliere Cosa

Deploy Manuale (EC2) quando:

  • Hai bisogno di controllo totale
  • Applicazioni con esigenze molto specifiche
  • Budget limitato per workload costanti
  • Ti piace sporcarti le mani con Linux

Deploy Gestito (ECS/Fargate) quando:

  • Applicazioni web standard
  • Team piccoli senza dedicati DevOps
  • Vuoi concentrarti sul codice, non sull'infrastruttura
  • Hai carichi variabili

Cosa Mi Ha Colpito di Più

  1. La magia di SSH: Controllare una macchina dall'altra parte del mondo
  2. I gruppi di sicurezza: La sicurezza non è automatica
  3. Il trade-off controllo/semplicità: Non sempre serve fare tutto a mano

Il Viaggio Continua: Prossime Tappe

Questo studio mi ha fatto capire quanto sia ricco l'ecosistema Docker e quanto sia importante capire le opzioni disponibili. Ogni approccio ha il suo posto nella vita di un developer.

Conoscere entrambi - deploy manuale e gestito - ti dà quella flessibilità che serve nel mondo reale. A volte hai bisogno di controllo totale, altre volte vuoi solo che funzioni.

Cosa Viene Dopo

La prossima tappa del mio percorso sarà esplorare:

  • Container multipli: come gestire app più complesse con database e microservizi
  • Docker Compose in produzione: orchestrazione semplice
  • Kubernetes: il mondo dell'orchestrazione enterprise

Ma questa è un'altra avventura che merita il suo post dedicato.

E Tu? Raccontami la Tua Prima Volta

Qual è stato il tuo primo deploy Docker? Hai provato l'approccio manuale o sei andato diretto sui managed services?

Sei Curioso del Mondo AWS? Leggi i Miei Altri Articoli

Se questo viaggio nel deployment Docker ti ha incuriosito sull'ecosistema AWS, ho esplorato anche altre tecnologie affascinanti:

Ogni tecnologia ha la sua personalità e i suoi "momenti magici" - AWS è un universo che vale la pena esplorare!
Don’t Panic. Ogni deploy è solo un altro passo verso l’infinito cloud e oltre. 🚀


Gli screenshot e i dettagli tecnici sono tratti dai miei appunti del corso "Docker & Kubernetes: The Practical Guide" di Maximilian Schwarzmüller su Udemy - un corso che consiglio vivamente a chiunque voglia andare oltre i tutorial base di Docker e capire davvero come funziona in scenari reali.

Related Post

Maggio 1, 2025
NutriCHOice: Un Sistema AI Avanzato per la Generazione di Ricette Personalizzate

Sono lieta di presentare NutriCHOice, un progetto innovativo sviluppato come culmine del percorso formativo del Bootcamp AI di Edgemony. Questo assistente culinario intelligente utilizza l'approccio "Generate then Fix" per creare ricette personalizzate che rispettano obiettivi nutrizionali specifici, con particolare attenzione ai carboidrati (CHO). Un ringraziamento speciale Questo progetto è stato reso possibile grazie al supporto […]

Maggio 14, 2025
Il mio viaggio con AWS SageMaker

Sono entusiasta di condividere che ho recentemente completato l'AI Engineering Bootcamp: Build, Train and Deploy Models with AWS SageMaker della scuola Zero To Mastery tenuto da Patrik Szepesi! Dopo giornate di apprendimento intensivo e progetti pratici, ho acquisito competenze cruciali che mi hanno fatto progredire nel mio percorso come ingegnere AI. Cos'è AWS SageMaker? Per […]

veronicaschembri
Copyright © Veronica Schembri

Privacy Policy
Cookie Policy
💬