Introducció
Optimitzar les imatges Docker és crucial per millorar el rendiment, reduir el temps de desplegament i minimitzar l'ús de recursos. En aquesta secció, aprendrem diverses tècniques per optimitzar les imatges Docker, incloent la reducció de la mida de les imatges, l'ús de capes eficients i la gestió de dependències.
Objectius
- Entendre la importància de l'optimització d'imatges Docker.
- Aprendre tècniques per reduir la mida de les imatges Docker.
- Utilitzar capes eficients en Dockerfile.
- Gestionar dependències de manera efectiva.
Tècniques d'optimització
- Utilitzar imatges base lleugeres
Les imatges base lleugeres com alpine
poden reduir significativament la mida de les imatges Docker.
Exemple:
# Utilitzant una imatge base lleugera FROM alpine:3.12 # Instal·lant una aplicació RUN apk add --no-cache python3 py3-pip # Copiant el codi de l'aplicació COPY . /app # Establint el directori de treball WORKDIR /app # Executant l'aplicació CMD ["python3", "app.py"]
- Minimitzar el nombre de capes
Cada instrucció en un Dockerfile crea una nova capa. Minimitzar el nombre de capes pot ajudar a reduir la mida de la imatge.
Exemple:
# Abans: múltiples capes FROM python:3.8-slim RUN apt-get update RUN apt-get install -y build-essential # Després: combinant instruccions en una sola capa FROM python:3.8-slim RUN apt-get update && apt-get install -y build-essential
- Eliminar fitxers temporals
Eliminar fitxers temporals i paquets innecessaris després de la instal·lació pot reduir la mida de la imatge.
Exemple:
FROM node:14 # Instal·lant dependències i eliminant fitxers temporals RUN apt-get update && apt-get install -y build-essential \ && rm -rf /var/lib/apt/lists/* # Copiant el codi de l'aplicació COPY . /app # Establint el directori de treball WORKDIR /app # Executant l'aplicació CMD ["node", "app.js"]
- Utilitzar
.dockerignore
.dockerignore
El fitxer .dockerignore
funciona de manera similar a .gitignore
i ajuda a excloure fitxers innecessaris de la imatge Docker.
Exemple de .dockerignore
:
- Utilitzar capes de construcció (multi-stage builds)
Les capes de construcció permeten utilitzar una imatge temporal per construir l'aplicació i després copiar només els artefactes necessaris a una imatge final més lleugera.
Exemple:
# Fase de construcció FROM golang:1.15 AS builder WORKDIR /app COPY . . RUN go build -o myapp # Fase final FROM alpine:3.12 WORKDIR /app COPY --from=builder /app/myapp . CMD ["./myapp"]
Exercicis pràctics
Exercici 1: Reduir la mida d'una imatge Docker
- Crea un Dockerfile per una aplicació Node.js que utilitzi una imatge base lleugera (
alpine
). - Combina les instruccions
RUN
per minimitzar el nombre de capes. - Utilitza
.dockerignore
per excloure el directorinode_modules
i altres fitxers innecessaris.
Solució:
# Utilitzant una imatge base lleugera FROM node:14-alpine # Instal·lant dependències i eliminant fitxers temporals RUN apk add --no-cache build-base # Copiant el codi de l'aplicació COPY . /app # Establint el directori de treball WORKDIR /app # Instal·lant dependències de l'aplicació RUN npm install # Executant l'aplicació CMD ["node", "app.js"]
.dockerignore:
Exercici 2: Utilitzar capes de construcció
- Crea un Dockerfile per una aplicació Go que utilitzi capes de construcció per reduir la mida de la imatge final.
Solució:
# Fase de construcció FROM golang:1.15 AS builder WORKDIR /app COPY . . RUN go build -o myapp # Fase final FROM alpine:3.12 WORKDIR /app COPY --from=builder /app/myapp . CMD ["./myapp"]
Conclusió
Optimitzar les imatges Docker és essencial per millorar el rendiment i l'eficiència dels desplegaments. Hem après diverses tècniques per reduir la mida de les imatges, utilitzar capes eficients i gestionar dependències de manera efectiva. Practicar aquestes tècniques ajudarà a crear imatges Docker més lleugeres i ràpides.
En el següent mòdul, explorarem el registre i monitoratge de Docker per assegurar-nos que les nostres aplicacions funcionen correctament en producció.
Docker: De Principiant a Avançat
Mòdul 1: Introducció a Docker
- Què és Docker?
- Instal·lant Docker
- Arquitectura de Docker
- Comandes bàsiques de Docker
- Entenent les imatges de Docker
- Creant el teu primer contenidor Docker
Mòdul 2: Treballant amb imatges Docker
- Docker Hub i Repositoris
- Construint imatges Docker
- Conceptes bàsics de Dockerfile
- Gestionant imatges Docker
- Etiquetant i pujant imatges
Mòdul 3: Contenidors Docker
- Executant contenidors
- Cicle de vida del contenidor
- Gestionant contenidors
- Xarxes a Docker
- Persistència de dades amb volums
Mòdul 4: Docker Compose
- Introducció a Docker Compose
- Definint serveis a Docker Compose
- Comandes de Docker Compose
- Aplicacions multi-contenidor
- Variables d'entorn a Docker Compose
Mòdul 5: Conceptes avançats de Docker
- Exploració profunda de xarxes Docker
- Opcions d'emmagatzematge de Docker
- Millors pràctiques de seguretat de Docker
- Optimitzant imatges Docker
- Registre i monitoratge de Docker
Mòdul 6: Docker en producció
- CI/CD amb Docker
- Orquestrant contenidors amb Docker Swarm
- Introducció a Kubernetes
- Desplegant contenidors Docker a Kubernetes
- Escalat i equilibrat de càrrega