---
title: Du code au conteneur
description: Le cycle code, Dockerfile, build, image, run et conteneur.
---
Le cycle de vie complet suit toujours le même enchaînement :
```text
code de l'application + Dockerfile
│
│ docker build
▼
image
│
│ docker run
▼
conteneur
```
### Versionner le code et le Dockerfile
Le code et sa recette de construction vivent ensemble dans le dépôt.
### Construire l'image
`docker build` lit le Dockerfile et exécute chaque instruction. Le résultat est une image figée et taguée.
```bash
docker build -t mon-app/backend:1.4.0 .
```
### Instancier l'image
`docker run`, ou `docker compose up`, lance un conteneur qui exécute la commande de démarrage.
```bash
docker run --rm mon-app/backend:1.4.0
```
## Build et run sont deux opérations différentes
Le **build** produit une image, normalement une fois par version. Le **run** lance autant de conteneurs que nécessaire à partir de cette image.
## L'image reste immuable
Un conteneur peut écrire dans son propre système de fichiers. Ces écritures disparaissent lorsque le conteneur est détruit, sauf lorsqu'elles sont stockées dans un volume.
L'image d'origine, elle, ne change jamais.
## Le rôle de CMD
`CMD` indique le processus principal lancé au démarrage :
```dockerfile
CMD ["node", "dist/src/main"]
```
Dans cet exemple, le conteneur est le processus Node. Si ce processus s'arrête, le conteneur s'arrête.
Une image constitue l'artefact à livrer. Le conteneur n'est que son instance en cours d'exécution, avec une configuration et un état temporaires.