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
.dockerignoreEl 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
RUNper minimitzar el nombre de capes. - Utilitza
.dockerignoreper excloure el directorinode_modulesi 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
