---
title: Images Docker
description: Utiliser une image existante ou construire une image adaptée à son application.
---

## Une image est un template en lecture seule

Une image regroupe le userspace, l'application et sa configuration de démarrage. Elle est figée : on ne la modifie pas après sa construction, on l'instancie sous la forme d'un conteneur.

Une même image peut servir à lancer plusieurs conteneurs.

## Des couches partagées

Une image est composée de couches, ou *layers*. Chaque instruction de construction ajoute une couche. Docker peut mettre ces couches en cache et les partager entre plusieurs images.

Si dix images utilisent `node:25-slim` comme base, cette couche n'est téléchargée et stockée qu'une seule fois.

## Utiliser une image existante

Docker Hub et d'autres registries, comme GHCR, proposent des images prêtes à l'emploi. Pour un service standard, il suffit généralement d'utiliser l'image officielle :

```yaml
services:
  postgres:
    image: postgres:16-alpine

  minio:
    image: minio/minio:latest

  mailpit:
    image: axllent/mailpit:latest

  nginx:
    image: nginx:1.27-alpine
```

Le suffixe après les deux-points est le **tag**. Par exemple, `postgres:16-alpine` désigne PostgreSQL 16 sur une base Alpine Linux minimale.

<Callout title="Épingler les versions" type="warning">
  Préfère un tag précis comme 16-alpine ou 1.27-alpine à latest. Le résultat sera plus prévisible et les builds plus reproductibles.
</Callout>

## Construire une image custom

Le code de ton frontend ou de ton backend est unique. Il faut donc écrire un Dockerfile qui part d'une image existante et ajoute l'application :

```dockerfile
FROM node:25-slim

WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci

COPY . .
RUN npm run build

CMD ["node", "dist/src/main"]
```

L'instruction `FROM` exprime l'héritage : l'image de l'application réutilise `node:25-slim`, puis ajoute ses propres couches.

## Choisir entre image et build

| Besoin | Choix |
| --- | --- |
| Base de données ou proxy standard | Image officielle via `image:` |
| Application développée par l'équipe | Image custom via un Dockerfile |
| Outil tiers avec configuration légère | Image officielle + variables et volumes |
| Runtime spécifique et code métier | Dockerfile custom |
