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ó

  1. 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"]

  1. 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

  1. 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"]

  1. Utilitzar .dockerignore

El fitxer .dockerignore funciona de manera similar a .gitignore i ajuda a excloure fitxers innecessaris de la imatge Docker.

Exemple de .dockerignore:

node_modules
*.log
*.md

  1. 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

  1. Crea un Dockerfile per una aplicació Node.js que utilitzi una imatge base lleugera (alpine).
  2. Combina les instruccions RUN per minimitzar el nombre de capes.
  3. Utilitza .dockerignore per excloure el directori node_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:

node_modules
*.log
*.md

Exercici 2: Utilitzar capes de construcció

  1. 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ó.

© Copyright 2024. Tots els drets reservats