# Commandes de base

### Exécuter un conteneur : **docker run**

Commande de base :

```bash
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
```

Le nom de l'image docker à utiliser doit être spécifié avec le paramètre `image`. Quelques exemples :

- Distributions Linux : `debian`, `ubuntu`, `alpine`
- Logiciels et CMS : `wordpress`, `prestashop`
- Langages de programmation : `php`, `python`
- Bases de données : `mysql`, `postgresql`

<p class="callout info">Il existe actuellement 11 millions d'image (août 2025) sur le Docker Hub (que nous approfondirons plus tard).</p>

La commande **docker run** propose de nombreux paramètres dont voici les principaux :

<table border="1" id="bkmrk-param%C3%A8tre-descriptio" style="border-collapse: collapse; width: 100%; height: 376.703px;"><colgroup><col style="width: 18.236%;"></col><col style="width: 40.8909%;"></col><col style="width: 40.8731%;"></col></colgroup><thead><tr style="height: 34.1094px;"><td style="height: 34.1094px;">**Paramètre**</td><td style="height: 34.1094px;">**Description**</td><td style="height: 34.1094px;">**Exemple**</td></tr></thead><tbody><tr style="height: 104.562px;"><td style="height: 104.562px;">`--name`</td><td style="height: 104.562px;">Attribuer un nom au conteneur.  
Si il n'est pas défini, Docker générera un nom aléatoire à partir d'un dictionnaire de mots.</td><td style="height: 104.562px;">```bash
docker run ubuntu --name=test1
docker run ubuntu --name=test2
docker run ubuntu --name=test3
```

</td></tr><tr style="height: 118.547px;"><td style="height: 118.547px;">`-ti`</td><td style="height: 118.547px;">Les paramètres **-t** et **-i** permettent d’ouvrir un terminal interactif dans le conteneur : **-t** alloue un pseudo-terminal, et **-i** garde l’entrée ouverte.</td><td style="height: 118.547px;">```bash
docker run -ti ubuntu
# je suis redirigé dans la console du conteneur
```

</td></tr><tr style="height: 85.375px;"><td style="height: 85.375px;">`-d`, `--detached`</td><td style="height: 85.375px;">Lance le conteneur en arrière-plan, en mode **détaché**.</td><td style="height: 85.375px;">```bash
docker run -d ubuntu
# le conteneur se lance en arrière-plan
```

</td></tr><tr><td>`--rm`</td><td>Supprimer le conteneur lorsqu'il est arrêté.</td><td>```bash
docker run --rm -ti ubuntu
# le conteneur se lance dans la console
# Il sera supprimé après la sorite (exit)
```

</td></tr><tr><td>-e, --env</td><td>Passer une variable d'environnement à l'application conteneurisée</td><td>```bash
docker run -e VAR1=value1
# la variable VAR1 sera définie dans le conteneur
```

</td></tr></tbody></table>

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/0LuZNI0npnbQrj4u-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/0LuZNI0npnbQrj4u-image.png)

<p class="callout info">Nous approfondirons plus tard d'autres paramètres de la commande **docker run**.</p>

La commande `docker run` se termine par la commande à lancer dans le conteneur ainsi que ses paramètres. L'ajout de cette commande est optionnel, il n'est pas toujours nécessaire de l'indiquer.

Certaines images ne lancent pas automatiquement d'invite de commande `bash`.  
Par exemple, l'image officielle python démarre sur une invite de commande python :

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/AAWH7myJcFLUbol9-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/AAWH7myJcFLUbol9-image.png)

### Lister les conteneurs : **docker ps**

La commande `docker ps` liste les conteneurs démarrés sur la machine. Le paramètre `--all`, `-a` permet d'afficher les conteneurs stoppés.

```bash
docker ps
docker ps -a
```

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/o6Co2Zkvyb9S7sJU-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/o6Co2Zkvyb9S7sJU-image.png)

- `test_1` est lancé en mode détaché (`-d`), il tourne en arrière-plan.
- `test_2` est lancé en mode attaché, il s'arrête lorsque je le quitte avec `exit`.

<p class="callout info">Astuce : il est possible de se détacher d'un conteneur sans l'arrêter avec **CTRL+P** puis **CTRL+Q** !</p>

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/0pj3R3M6lRsZutYI-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/0pj3R3M6lRsZutYI-image.png)

Après avoir pressé **CTRL+P** puis **CTRL+Q**, je suis détaché du conteneur `test_3` qui tourne encore en arrière-plan.

### Arrêt d'un conteneur : **docker stop** et **docker start**

```bash
docker start MON_CONTENEUR  # démarre le conteneur
docker stop MON_CONTENEUR # arrête le conteneur
docker rm MON_CONTENEUR # supprime le conteneur
```

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/FeyEQINzSrFMZfcZ-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/FeyEQINzSrFMZfcZ-image.png)

### Visualiser les logs : **docker logs**

```bash
docker logs MON_CONTENEUR
docker logs -f MON_CONTENEUR # -f pour --follow, permet de visualiser en direct le log.
```

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/MTGjbDrCF64phQPA-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/MTGjbDrCF64phQPA-image.png)

La commande date est lancée au démarrage du conteneur détaché, je ne vois pas le résultat.  
J'y accède plus tard avec la commande `docker logs`.

### S'attacher à un conteneur : **docker attach**

```bash
docker attach MON_CONTENEUR
```

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/TaP7EyVXDgmLB3Iw-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/TaP7EyVXDgmLB3Iw-image.png)

Le conteneur a été lancé en arrière-plan (mode détaché) avec `-d`. Je peux y accéder plus tard.

### Exécuter une commande : **docker exec**

```bash
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
```

La syntaxe de cette commande ressemble à `docker run`. La différence est qu'ici, la commande est lancée dans un conteneur déjà en cours d'exécution.

La commande `docker exec` est utile pour lancer une invite de commande (`bash`) dans un conteneur qui n'en propose pas forcément. Exemple avec python :

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/xJWV0JAyIQMm2b0f-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/xJWV0JAyIQMm2b0f-image.png)

Je lance un conteneur python sans préciser de commande. La commande par défaut de l'image docker est utilisée.  
Lorsque je m'attache au conteneur avec `docker attach`, je suis dans une invite de commande python.  
Je me détache du conteneur et je lance une invite de commande `bash` avec `docker exec`.

<p class="callout warning">La commande **docker exec** exécute un nouveau processus dans le conteneur. La sortie de ce processus n'est pas visible dans les logs du conteneur !</p>