đ : 3 h maximum
Prérequis:
- Cours Linux
- Cours Docker
But:
- Installer une machine linux et l’administrer (ici bookworm)
- installer glpi ! easy !
Répertoire de travail:
~/Works/TP0_Docker
Présentation de notre docker
Une Debian 12 Bookworm, c’est un excellent choix pour l’enseignement. Je vais vous guider Ă travers une sĂ©rie d’exercices progressifs, du plus simple au plus avancĂ©, en utilisant les conteneurs Docker.
Sur une machine disposant d’internet sans proxy tout est plus simple ! Mais au lycĂ©e nous sommes derriĂšre un proxy !
Installer Docker sans proxy (chez vous)
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Installer docker au lycée (avec proxy)
voir le lien proxy au lycée
mettre Ă jour et installer curl
sudo apt update && sudo apt upgrade
sudo apt install curl
ajouter le source list de docker
Ă la fin du fichier : /etc/apt/sources.list
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable
mettre les clés gpg du dépÎt
curl -x http://10.0.0.1:3128 -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Tester la connexion au dépÎt Docker via le proxy
curl -x http://10.0.0.1:3128 -I https://download.docker.com
# Mettre Ă jour APT
sudo apt update
# Installer Docker
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Ajouter etudiant dans le groupe docker
etudiant@ordi:~$ sudo usermod -aG docker etudiant
etudiant@ordi:~$ docker ps
permission denied while trying to connect to the docker API at unix:///var/run/docker.sock
etudiant@ordi:~$ newgrp docker
etudiant@ordi:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
etudiant@ordi:~$
etudiant@ordi:~/Works/docker$ sudo vi /etc/systemd/system/docker.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://10.0.0.1:3128"
Environment="HTTPS_PROXY=http://10.0.0.1:3128"
Environment="NO_PROXY=localhost,127.0.0.1,.local"
etudiant@ordi:~/Works/docker$ sudo systemctl daemon-reload
etudiant@ordi:~/Works/docker$ sudo systemctl restart docker
etudiant@ordi:~/Works/docker$ docker info | grep -i proxy
HTTP Proxy: http://10.0.0.1:3128
HTTPS Proxy: http://10.0.0.1:3128
No Proxy: localhost,127.0.0.1,.local
DĂ©couverte d’un docker avec Debian 12 BOOKWORM
# Télécharger l'image Debian 12
docker pull debian:12
# Lancer un conteneur interactif
docker run -it --name mon-debian debian:12 bash
on charge la debian 12 sur notre machine locale
docker pull debian:12 = « TĂ©lĂ©charge depuis Docker Hub l’image nommĂ©e debian avec l’Ă©tiquette 12 »
etudiant@ordi:~/Works/docker$ docker pull debian:12
12: Pulling from library/debian
6a7e0620566c: Pull complete
de58c64eb5b1: Download complete
Digest: sha256:0a5bf4ecacfc050bad0131c8e1401063fd1e8343a418723f6dbd3cd13a7b9e33
Status: Downloaded newer image for debian:12
docker.io/library/debian:12
Emplacement par défaut sur Linux
/var/lib/docker/
Structure détaillée
/var/lib/docker/
âââ image/ # MĂ©tadonnĂ©es des images
âââ overlay2/ # Les vraies donnĂ©es des couches (layers)
âââ containers/ # Conteneurs créés
âââ volumes/ # Volumes de donnĂ©es
Docker image et images
etudiant@ordi:~/Works/docker$ docker image ls
i Info â U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
debian:12 0a5bf4ecacfc 185MB 52.2MB
etudiant@ordi:~/Works/docker$
ou on peut développer
etudiant@ordi:~/Works/docker$ docker images
i Info â U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
debian:12 0a5bf4ecacfc 185MB 52.2MB
etudiant@ordi:~/Works/docker$
hello-world
etudiant@ordi:~/Works/docker$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
17eec7bbc9d7: Pull complete
ea52d2000f90: Download complete
Digest: sha256:85404b3c53951c3ff5d40de0972b1bb21fafa2e8daa235355baf44f33db9dbdd
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
etudiant@ordi:~/Works/docker$ docker images
i Info â U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
debian:12 0a5bf4ecacfc 185MB 52.2MB
hello-world:latest 85404b3c5395 25.9kB 9.52kB
etudiant@ordi:~/Works/docker$
on dispose maintenant de 2 images ! nous allons déjà découvrir hello-world !
Pour lancer le docker hello-world run
etudiant@ordi:~/Works/docker$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
etudiant@ordi:~/Works/docker$
effacer l’image hello-world
etudiant@ordi:~/Works/docker$ docker rmi -f hello-world:latest
Untagged: hello-world:latest
etudiant@ordi:~/Works/docker$ docker images
i Info â U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
debian:12 0a5bf4ecacfc 185MB 52.2MB
etudiant@ordi:~/Works/docker$
On va se re-concentrer sur l’image Debian 12 (bookWorm)
on va lancer
etudiant@ordi:~/Works/docker$ docker run -it debian:12
root@a5588a0165ce:/#
si on explore !
etudiant@ordi:~/Works/docker$ docker run -it debian:12
root@a5588a0165ce:/# whoami
root
root@a5588a0165ce:/# cat /etc/hostname
a5588a0165ce
root@a5588a0165ce:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@a5588a0165ce:/#
on se rend compte que notre conteneur fait tourner une debian 12
root@a5588a0165ce:/# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@a5588a0165ce:/#
nous y sommes en tant que root !
on va en sortir et quitter le conteneur avec la commande exit , ou ctrl d
etudiant@ordi:~/Works/docker$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5588a0165ce debian:12 "bash" 5 minutes ago Exited (0) 22 seconds ago fervent_matsumoto
d8883c6197d9 85404b3c5395 "/hello" 11 minutes ago Exited (0) 11 minutes ago keen_poincare
bf988364c53c 85404b3c5395 "/hello" 20 minutes ago Exited (0) 20 minutes ago focused_jang
etudiant@ordi:~/Works/docker$
on va recréer un conteneur et y écrire un fichier !
etudiant@ordi:~/Works/docker$ docker run -it debian:12
root@b5b6135a2cfa:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@b5b6135a2cfa:/# pwd
/
root@b5b6135a2cfa:/# cd root/
root@b5b6135a2cfa:~# ls
root@b5b6135a2cfa:~# echo "Bonjour" > bonjour.txt
root@b5b6135a2cfa:~# ls
bonjour.txt
root@b5b6135a2cfa:~# cat bonjour.txt
Bonjour
root@b5b6135a2cfa:~#
pour sortir du conteneur il faut faire ctrl P puis Q (ne pas lacher ctrl)
etudiant@ordi:~/Works/docker$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b5b6135a2cfa debian:12 "bash" 5 minutes ago Up 5 minutes elastic_shannon
etudiant@ordi:~/Works/docker$
pour retourner dedans ! elastic_shannon est le nom que docker à donné ici à mon conteneur (il faut adapter)
docker exec -it elastic_shannon bash
etudiant@ordi:~/Works/docker$ docker exec -it elastic_shannon bash
root@b5b6135a2cfa:/# pwd
/
root@b5b6135a2cfa:/# cd root/
root@b5b6135a2cfa:~# ls
bonjour.txt
root@b5b6135a2cfa:~# cat bonjour.txt
Bonjour
root@b5b6135a2cfa:~#
stop/start/attach//ps / ps -a
docker ps : liste les conteneurs en cours de fonctionnement
docker ps -a : liste tous les conteneurs en cours ou non
stop : va arrĂȘter la machine (le docker) sans le dĂ©truire
start: va lancer la machine
attach pour se connecter Ă la machine
pour detacher ctrl P Q
il faut tester tout cela ! pour bien assimiler les concepts de conteneur et en particulier de Docker
Dockerfile ! la recette pour réaliser un docker
ici nous allons créer un docker debian 12 avec vim et les outils réseaux IPROUTE2
mkdir mon-premier-docker
cd mon-premier-docker
dockerfile
# ĂTAPE 1 : On choisit une base solide
# Debian 12 est une distribution Linux stable
# 'slim' = version allégée (parfaite pour apprendre)
FROM debian:12-slim
# ĂTAPE 2 : On prĂ©pare l'installation
# RUN exécute des commandes Linux pendant la construction
RUN apt-get update && \
# On installe nos outils avec une option d'économie
apt-get install -y --no-install-recommends \
vim \
iproute2 && \
# ĂTAPE 3 : On fait le mĂ©nage (comme ranger sa chambre)
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# ĂTAPE 4 : On dĂ©faut ce qui se passe au dĂ©marrage
# CMD = commande par défaut quand on lance le conteneur
CMD ["/bin/bash"]
on va l’utiliser
# 1. CONSTRUIRE l'image (comme une recette de cuisine)
docker build -t debian12-outils .
# 2. LISTER les images pour vérifier
docker images
# 3. LANCER le conteneur (comme allumer une machine)
docker run -it debian12-outils
# 4. Une fois dans le conteneur, TESTER
vim --version
ip addr show
# 5. SORTIR du conteneur
exit
# 6. VOIR les conteneurs qui ont existé
docker ps -a
on se rend compte ici que si on veut tester la commande ping, ça ne fonctionne pas !
Le paquet iputils-ping est nécessaire pour avoir le ping !
on va réaliser une autre recette, un autre dockerfile !
FROM debian:12-slim
# Installation des outils avec ping en plus
RUN apt-get update && \
apt-get install -y --no-install-recommends \
vim \
iproute2 \
iputils-ping && \ # â paquet qui contient ping
apt-get clean && \
rm -rf /var/lib/apt/lists/*
CMD ["/bin/bash"]
reconstruire .. (build) et tester !
GLPI en docker ! vite fait bien fait!
docker-compose
on va découvrir docker-compose !
apt update
apt install docker-compose
docker-compose.yml
version: '3.8'
services:
mariadb:
image: mariadb:10.7
container_name: glpi-mariadb
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=glpi
- MYSQL_USER=glpi
- MYSQL_PASSWORD=glpipassword
volumes:
- mariadb_data:/var/lib/mysql
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
restart: unless-stopped
glpi:
image: diouxx/glpi:latest # đ Image qui fonctionne (la plus utilisĂ©e)
container_name: glpi-app
ports:
- "8085:80"
environment:
- MYSQL_HOST=mariadb
- MYSQL_PORT=3306
- MYSQL_DATABASE=glpi
- MYSQL_USER=glpi
- MYSQL_PASSWORD=glpipassword
- MYSQL_ROOT_PASSWORD=rootpassword
depends_on:
- mariadb
restart: unless-stopped
volumes:
mariadb_data:
docker-compose up -d
On peut aller sur : http://localhost:8085
docker-composer down
Pour lâarrĂȘter !

| Champ | Valeur Ă entrer | Explication |
|---|---|---|
| Serveur SQL | mariadb | đ C’est le NOM du conteneur, pas une IP ! |
| Utilisateur SQL | glpi | Défini dans docker-compose |
| Mot de passe | glpipassword | Défini dans docker-compose |
| Base de données | glpi | Défini dans docker-compose |
pour tester cet applicatif:
đ utilisateur et mot de passe
| Utilisateur | Mot de passe | RĂŽle |
|---|---|---|
| glpi | glpi | Administrateur |
| admin | admin | Administrateur (certaines images) |
| root | root | Super admin (rare) |
| tech | tech | Technicien |
| normal | normal | Utilisateur normal |
| post-only | postonly | Utilisateur restreint |
