9.1 Architettura a Microservizi
Docker è diventato uno strumento essenziale per lo sviluppo moderno. Aiuta a creare, eseguire e distribuire applicazioni in container isolati, rendendole comode, stabili e facili da usare. In questa lezione vedremo esempi in cui Docker semplifica notevolmente la vita degli sviluppatori e degli amministratori.
Problema
Lo sviluppo di applicazioni monolitiche spesso causa difficoltà nella manutenzione e scalabilità. Qualsiasi modifica in una parte può influenzare le altre, complicando l'aggiornamento e il testing.
Soluzione con Docker
Docker consente di implementare un'architettura a microservizi, impacchettando ogni servizio in un container separato. Questo garantisce indipendenza e isolamento dei microservizi.
Esempio
Supponiamo che tu abbia un'applicazione con tre microservizi: utenti, ordini e pagamenti. Con Docker puoi creare tre container:
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 Integrazione e consegna continua (CI/CD)
Problema
Lo sviluppo, il testing e il deployment spesso richiedono molto tempo, soprattutto se gli ambienti differiscono tra loro.
Soluzione con Docker
Docker aiuta a creare un ambiente uniforme per tutte le fasi dello sviluppo. Questo garantisce che l'applicazione funzioni allo stesso modo ovunque — dallo sviluppo alla produzione.
Esempio
Configurare CI/CD con Docker permette di automatizzare la build, il test e il deployment:
Creazione dell'immagine:
docker build -t my-app .
Esecuzione dei test:
docker run my-app ./run-tests.sh
Deployment:
docker push my-app:latest
ssh user@production-server "docker pull my-app:latest && docker run -d my-app"
9.3 Portabilità e consistenza
Problema
Spesso un'applicazione funziona su una macchina, ma si rifiuta di avviarsi su un'altra a causa di differenze nelle configurazioni o versioni delle dipendenze.
Soluzione con Docker
Docker permette di impacchettare l'applicazione con tutte le sue dipendenze in un container, che funziona garantito in qualsiasi ambiente.
Esempio
Con un Dockerfile si possono descrivere le dipendenze e i comandi per avviare l'applicazione:
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]
Ora l'applicazione funzionerà stabilmente sia sulla macchina locale, sia sul server o nel cloud.
9.4 Garantire la sicurezza
Problema
Il deployment delle applicazioni può essere vulnerabile, soprattutto se si utilizzano librerie e strumenti di terze parti.
Soluzione con Docker
Docker fornisce l'isolamento dei container, riducendo i rischi. I container funzionano in modo indipendente, limitando l'impatto sul sistema.
Esempio
Usa i parametri per limitare le risorse e migliorare la sicurezza:
docker run -d --name secure-app --memory="512m" --cpus="1" --security-opt=no-new-privileges my-secure-app
9.5 Testing e automazione
Problema
Il testing in diverse configurazioni richiede tempo e può influenzare l'ambiente principale.
Soluzione con Docker
Docker permette di creare ambienti di test isolati, senza influire sul sistema principale.
Esempio
Esempio di avvio di un database e di un'applicazione in un ambiente di test:
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 Cloud computing e scalabilità
Problema
Scalare le applicazioni nel cloud può essere complicato e costoso.
Soluzione con Docker
Docker semplifica lo scaling grazie all'integrazione con piattaforme cloud come AWS, Azure e Google Cloud.
Esempio
Usando Docker e Kubernetes, è facile configurare lo scaling. Ecco un esempio di file yaml. Per ora potrebbe sembrare poco chiaro, ma col tempo ci arriveremo.
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