docker_TP/explication_dockerfile.md

116 lines
4.1 KiB
Markdown
Raw Normal View History

2024-03-26 21:34:17 +01:00
# DockerFile
On peut consulter la documentation des instructions [sur le site de Docker](https://docs.docker.com/reference/dockerfile/#label).
## Fichier
```dockerfile
FROM httpd:alpine3.17
LABEL maintainer="Tom Moguljak"
LABEL version="1.8"
LABEL tp="3"
COPY ./dayScheduler/ /usr/local/apache2/htdocs/
RUN sed -i 's/Work Day Scheduler/Tom Moguljak/g' /usr/local/apache2/htdocs/index.html
ENV school="IUT"
ENV level="1.8"
HEALTHCHECK --interval=1m --timeout=1s \
2024-03-26 23:25:28 +01:00
CMD curl --fail http://localhost:80/ || exit 1
```
2024-03-26 21:34:17 +01:00
## Commandes
2024-03-26 23:27:33 +01:00
### Définir l'image utilisée
2024-03-26 21:34:17 +01:00
```dockerfile
2024-03-26 23:26:18 +01:00
FROM httpd:alpine3.17
```
2024-03-26 21:34:17 +01:00
Tout dockerfile doit commencer par une ligne `FROM`. Pour trouver l'image, on va sur DockerHub et on cherche le nom de l'image qu'on veut (ici c'est httpd). On va préférer les images officielles, marquées par un badge vert avec une étoile. On clique sur le lien, on va dans l'onglet `Tags` et on trouve la version la plus récente,ou la version demandée dans l'énoncé (on peut utiliser le filtre). Il suffit ensuite de copier le code donné sur le site, ici c'est `docker pull httpd:alpine3.19`, mais on enlève le "docker pull".
>Il faut à tout prix éviter la version "latest" ou de prendre la version en haut de page, sans rien après le nom de l'image (ex: httpd) et qui correspond à la version latest.
2024-03-26 23:54:32 +01:00
### Exécuter une commande
2024-03-26 21:34:17 +01:00
```dockerfile
2024-03-26 23:26:18 +01:00
RUN sed -i 's/Work Day Scheduler/Tom Moguljak/g' /usr/local/apache2/htdocs/index.html
```
2024-03-26 23:54:32 +01:00
Une ligne `RUN` permet d'exécuter une commande shell/bash au moment du `build`. Ici on a utilisé la commande `sed` : on cherche l'expression `Work Day Scheduler` et on remplace par `Tom Moguljak` dans le fichier `/usr/local/apache2/` de l'image.
2024-03-26 21:34:17 +01:00
2024-03-26 23:27:33 +01:00
### Ajouter une étiquette
2024-03-26 21:34:17 +01:00
```dockerfile
2024-03-26 23:26:18 +01:00
LABEL maintainer="Tom Moguljak"
```
2024-03-26 21:34:17 +01:00
Une ligne `LABEL` permet de créer une étiquette pour l'image. Ici le nom de l'étiquette est "maintainer" et elle contient la valeur "Tom Moguljak".
Quand on a plusieurs étiquettes à définir, on peut le faire en plusieurs lignes :
```dockerfile
LABEL maintainer="Tom Moguljak"
LABEL version="1.8"
2024-03-26 23:26:18 +01:00
LABEL tp="3"
```
2024-03-26 21:34:17 +01:00
Ou en une seule, en séparant les définitions par un espace :
```dockerfile
2024-03-26 23:26:18 +01:00
LABEL maintainer="Tom Moguljak" version="1.8" tp="3"
```
2024-03-26 21:34:17 +01:00
2024-03-26 23:27:33 +01:00
### Ajouter une variable d'environnement
2024-03-26 21:34:17 +01:00
```dockerfile
2024-03-26 23:26:18 +01:00
ENV school="IUT"
```
2024-03-26 21:34:17 +01:00
Une ligne `ENV` permet de créer une variable d'environnement dans l'image. Ici le nom de la variable d'environnement est "school" et elle contient la valeur "IUT".
Comme pour les étiquettes, quand on a plusieurs variables d'environnement à définir, on peut le faire en plusieurs lignes :
```dockerfile
ENV school="IUT"
2024-03-26 23:26:18 +01:00
ENV level="1.8"
```
2024-03-26 21:34:17 +01:00
Ou en une seule, en séparant les définitions par un espace :
```dockerfile
2024-03-26 23:26:18 +01:00
ENV school="IUT" level="1.8"
```
2024-03-26 21:34:17 +01:00
2024-03-26 23:27:33 +01:00
### Ajouter le contenu d'un dossier
2024-03-26 21:34:17 +01:00
```dockerfile
2024-03-26 23:26:18 +01:00
COPY ./dayScheduler/ /usr/local/apache2/htdocs/
```
2024-03-26 21:34:17 +01:00
Une ligne `COPY` permet d'ajouter le contenu d'un dossier présent sur la machine (ici le dossier "dayScheduler") à l'image (ici le chemin dans l'image est /usr/local/apache2/htdocs/).
> Si il est demandé d'ajouter le contenu d'un git, il faut faire git clone d'abord
2024-03-26 23:27:33 +01:00
### Faire des tests de survie
2024-03-26 21:34:17 +01:00
```dockerfile
2024-03-26 23:26:18 +01:00
HEALTHCHECK --interval=1m --timeout=1s CMD curl --fail http://localhost:80/ || exit 1
```
Une ligne `HEALTHCHECK` permet de faire des tests de survie. Ici le test a un intervale de 1 seconde.
2024-03-26 21:34:17 +01:00
2024-03-26 23:54:32 +01:00
### Autres commandes
2024-03-26 21:34:17 +01:00
2024-03-26 23:54:32 +01:00
- `ADD` : copie des fichiers dans l'image (accepte les URL)
- `EXPOSE` : déclare les ports d'écoute du conteneur
- `VOLUME` : déclare lespoints de montage des volumes
- `USER` : définit l'utilisateur (groupe) qui exécutera l'image
- `WORKDIR` : définit le répertoire de travail
2024-03-26 21:34:17 +01:00
2024-03-26 23:54:32 +01:00
## Création : `docker build`
2024-03-26 21:34:17 +01:00
2024-03-26 23:54:32 +01:00
Pour créer l'image, on utilise la [commande `docker build`](https://docs.docker.com/reference/cli/docker/image/build/), au format
2024-03-26 21:34:17 +01:00
```shell
2024-03-26 23:54:32 +01:00
docker build -t nom:version répertoire
2024-03-26 23:26:18 +01:00
```
2024-03-26 21:34:17 +01:00
2024-03-26 23:54:32 +01:00
L'option `-t` est suivie du nom et de la version de l'image.
2024-03-26 21:34:17 +01:00
2024-03-26 23:54:32 +01:00
Exemple : on construit une image que l'on va nommée "mapremiereimage" en version 1.0 dans le répertoire de travail actuel (.)
```shell
docker build -t mapremiereimage:1.0 .
```