🕒 : 3 h maximum

Prérequis:

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 !

ChampValeur Ă  entrerExplication
Serveur SQLmariadb👈 C’est le NOM du conteneur, pas une IP !
Utilisateur SQLglpiDéfini dans docker-compose
Mot de passeglpipasswordDéfini dans docker-compose
Base de donnéesglpiDéfini dans docker-compose

pour tester cet applicatif:

🔑 utilisateur et mot de passe

UtilisateurMot de passeRĂŽle
glpiglpiAdministrateur
adminadminAdministrateur (certaines images)
rootrootSuper admin (rare)
techtechTechnicien
normalnormalUtilisateur normal
post-onlypostonlyUtilisateur restreint