71 lines
2.3 KiB
Plaintext
71 lines
2.3 KiB
Plaintext
---
|
|
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 |
|