Tanquem la Part IV amb un dels temes més importants de la informàtica moderna: els contenidors. Abans de veure com AWS els gestiona (ECR, ECS, EKS als següents subcapítols), necessites entendre què és Docker i els contenidors. Si ja els coneixes, aquest serà un repàs ràpid; si no, aquí tens l’essencial.

El problema: «a la meva màquina funciona»

Segur que has sentit (o viscut) aquesta frase clàssica: un programa funciona perfectament a l’ordinador del desenvolupador, però en portar-lo al servidor... falla. Per què? Perquè el servidor té una versió diferent del llenguatge, li falta una llibreria, el sistema operatiu és diferent, una configuració no coincideix... Les diferències d’entorn trenquen les aplicacions.

Ordinador del desenvolupador          Servidor de producció
  Python 3.11                          Python 3.8        ← diferent!
  Llibreria X versió 2                 Llibreria X versió 1  ← diferent!
  Funciona ✓                           Falla ✗

La solució: els contenidors

Un contenidor empaqueta la teva aplicació juntament amb tot el que necessita per funcionar: el codi, les llibreries, les dependències, la configuració... tot en un únic paquet. Aquest paquet funciona igual a qualsevol lloc: al teu portàtil, al servidor, al núvol. S’ha acabat el «a la meva màquina funciona».

   ┌─── Contenidor ───┐
   │  La teva aplicació │
   │  + les seves llibreries  │   ← tot junt, autocontingut
   │  + dependències   │
   │  + configuració   │
   └───────────────────┘
   Funciona igual a QUALSEVOL lloc

Analogia: un contenidor és com un contenidor de mercaderies (d’aquells dels vaixells i camions). Tant és el que porti dins (roba, electrònica, menjar): el contenidor té una mida i forma estàndard, així que qualsevol vaixell, grua o camió del món pot transportar-lo sense saber què hi ha dins. Igual amb el programari: el contenidor és estàndard, i qualsevol sistema que «sàpiga» de contenidors pot executar-lo.

Què és Docker

Docker és la tecnologia més popular per crear i executar contenidors. S’ha convertit en un estàndard de la indústria. Gestiona tres conceptes clau que has de distingir bé:

  1. Imatge (image)

Una imatge és la plantilla del contenidor: el paquet «congelat» amb la teva aplicació i tot el necessari. És com una recepta o un motlle. No s’executa per si mateixa; és la definició del que hi haurà dins.

  1. Contenidor (container)

Un contenidor és una imatge en execució: una instància viva de la imatge, funcionant. D’una mateixa imatge pots arrencar molts contenidors idèntics.

Imatge (plantilla)  ──arrencar──►  Contenidor 1 (en execució)
                    ──arrencar──►  Contenidor 2 (en execució)
                    ──arrencar──►  Contenidor 3 (en execució)

Analogia: la imatge és com el motlle d’una galeta (o un plànol); el contenidor és cada galeta que surt del motlle. Un motlle, moltes galetes idèntiques.

  1. Dockerfile

Un Dockerfile és un fitxer de text amb les instruccions per construir la imatge. Descriu pas a pas què porta: de quin sistema base parteix, què s’instal·la, quin codi es copia, com s’arrenca. És la recepta escrita.

# Exemple simplificat de Dockerfile
FROM python:3.11              # parteix d’una imatge base amb Python
COPY . /app                  # copia el teu codi
RUN pip install -r requirements.txt   # instal·la dependències
CMD ["python", "app.py"]     # com arrencar l’aplicació

A partir d’aquest Dockerfile, Docker construeix la imatge, que després pots executar com a contenidors on vulguis.

El flux complet de Docker

Ajuntant els tres conceptes, el cicle és:

1. Escrius un Dockerfile  (la recepta)
        │ docker build
        ▼
2. Construeixes una Imatge   (el paquet llest)
        │ docker run
        ▼
3. Arrenques Contenidors   (l’aplicació en marxa)

Contenidors vs màquines virtuals

Et pot sorgir el dubte: en què es diferencia un contenidor d’una instància EC2 (màquina virtual)? La clau és que els contenidors són més lleugers:

Màquina virtual (EC2) Contenidor
Inclou Un sistema operatiu complet Només l’app i les seves dependències
Mida Gran (GB) Lleuger (MB normalment)
Arrencada Lenta (minuts) Ràpida (segons)
Densitat Poques per servidor Molts per servidor

Els contenidors comparteixen el sistema operatiu del servidor amfitrió, en comptes de portar-ne un de sencer cadascun. Per això són tan lleugers i ràpids: pots executar molts contenidors en una mateixa màquina.

Per què importa això a AWS: els contenidors són ideals per al núvol. Arrenquen ràpid (genial per escalar, Capítol 13), són portables i aprofiten bé els recursos. Per això AWS té serveis dedicats a executar-los, que veurem als següents subcapítols: ECR (per guardar imatges), ECS i EKS (per executar contenidors).

El que has de recordar

  • Un contenidor empaqueta la teva aplicació amb tot el que necessita (codi, llibreries, dependències, configuració), i funciona igual a qualsevol lloc. Acaba amb el «a la meva màquina funciona». Com un contenidor de mercaderies estàndard.
  • Docker és la tecnologia estàndard de contenidors, amb tres conceptes: imatge (la plantilla/motlle), contenidor (la imatge en execució/la galeta) i Dockerfile (la recepta escrita per construir la imatge).
  • El flux: DockerfilebuildImatgerunContenidors.
  • Davant de les màquines virtuals, els contenidors són més lleugers i ràpids perquè comparteixen el sistema operatiu de l’amfitrió; hi caben molts per servidor.
  • AWS ofereix serveis dedicats a contenidors: ECR, ECS i EKS (següents subcapítols).

Al següent subcapítol veurem on guardar les teves imatges de manera privada i segura: el registre ECR.

Cloud, AWS & Terraform — De zero a expert

Capítol 1 · Què és el cloud computing

Capítol 2 · El mercat cloud i els grans proveïdors

Capítol 3 · Regions, zones de disponibilitat i edge

Capítol 4 · Càlcul: EC2

Capítol 5 · Emmagatzematge: S3

Capítol 6 · Xarxes: VPC

Capítol 7 · Identitat i accés: IAM

Capítol 8 · Bases de dades gestionades

Capítol 9 · Per què Infraestructura com a Codi

Capítol 10 · HCL: el llenguatge de Terraform

Capítol 11 · Providers i estat

Capítol 12 · La teva primera infraestructura real amb Terraform

Capítol 13 · Balanceig de càrrega i autoescalat

Capítol 14 · Serverless amb Lambda

Capítol 15 · Missatgeria i esdeveniments

Capítol 16 · Lliurament de contingut i DNS

Capítol 17 · Contenidors a AWS

Capítol 18 · Mòduls: reutilització i composició

Capítol 19 · Workspaces i gestió d'entorns

Capítol 20 · Backends remots i locking

Capítol 21 · Testing d'infraestructura

Capítol 22 · Terraform en CI/CD

Capítol 23 · Seguretat en profunditat

Capítol 24 · Observabilitat: logs, mètriques i traces

Capítol 25 · Optimització de costos

Capítol 26 · Alta disponibilitat i disaster recovery

Capítol 27 · Well-Architected Framework d'AWS

Capítol 28 · Arquitectures serverless a escala

Capítol 29 · Plataformes de dades a AWS

Capítol 30 · Multi-compte i landing zones

Capítol 31 · Platform Engineering i Internal Developer Platform

Capítol 32 · Certificacions AWS rellevants

Capítol 33 · Projectes per consolidar el que s'ha après

Capítol 34 · Recursos i comunitat

© Copyright 2024. Tots els drets reservats