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