TP sur Docker

1. Préparatifs

1.1. Mise en place de la VM Linux sous Hyper-V

1.2. Installation de Docker

Dans la VM Linux, effectuez l'installation de Docker. Par exemple, sous Ubuntu :

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

# Ajout de la clé GPG Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Ajout du dépôt Docker
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Mise à jour et installation Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

Vérifiez que Docker fonctionne correctement :

sudo systemctl status docker
docker version
docker info

Optionnellement, vous pouvez ajouter l'utilisateur courant au groupe docker afin de pouvoir exécuter Docker sans sudo :

sudo usermod -aG docker <votre-utilisateur>
newgrp docker

2. Premiers pas avec Docker

2.1. Docker Hello World

docker run hello-world
docker ps -a
docker rm $(docker ps -aq)
docker rmi hello-world

(Cette étape est facultative, mais elle permet de garder l'environnement propre.)

2.2. Lancer une application simple depuis Docker Hub

docker run -d -p 8080:80 --name mon-serveur-nginx nginx
docker ps
docker stop mon-serveur-nginx
docker rm mon-serveur-nginx

3. Construction d'une image Docker simple (Dockerfile)

3.1. Créer un répertoire et un fichier de test

<!DOCTYPE html>
<html>
<head>
    <title>Page Web Demo Docker</title>
</head>
<body>
    <h1>Bonjour, Docker !</h1>
    <p>Page statique pour la démo.</p>
</body>
</html>

3.2. Créer un Dockerfile

# Utiliser l'image officielle nginx comme base
FROM nginx:latest

# Supprimer le contenu par défaut de Nginx
RUN rm -rf /usr/share/nginx/html/*

# Copier notre page statique dans le conteneur
COPY index.html /usr/share/nginx/html/

# Exposer le port 80 (informatif pour l'orchestrateur)
EXPOSE 80

# Commande de lancement par défaut (déjà définie dans l'image nginx)
CMD ["nginx", "-g", "daemon off;"]

3.3. Construire et tester l'image

docker build -t demo-nginx:v1 .
docker images
docker run -d -p 8080:80 --name mon-nginx-demo demo-nginx:v1
docker stop mon-nginx-demo
docker rm mon-nginx-demo

4. Mise en place d'une application avec docker-compose

Pour illustrer la mise en place de deux services, nous allons configurer :

4.1. Créer un nouveau répertoire

4.2. Exemple de contenu docker-compose.yml

Voici un exemple avec MySQL et notre Nginx :

version: '3.8'

services:
  db:
    image: mysql:8.0
    container_name: demo-mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: demo_db
      MYSQL_USER: demo_user
      MYSQL_PASSWORD: demo_pass
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - demo-net

  web:
    image: demo-nginx:v1
    container_name: demo-nginx
    ports:
      - "8080:80"
    depends_on:
      - db
    networks:
      - demo-net

volumes:
  db_data:

networks:
  demo-net:

Explications

4.3. Démarrer la stack

docker-compose up -d
docker-compose ps

ou

docker ps
http://<IP-VM>:8080
docker exec -it demo-mysql bash
mysql -u demo_user -p
# Mot de passe : demo_pass
show databases;
exit
exit
docker-compose down

5. Options supplémentaires et pistes d'exploration

docker exec -it demo-nginx ping demo-mysql
docker tag demo-nginx:v1 docker.io/<username>/demo-nginx:v1
docker push docker.io/<username>/demo-nginx:v1

6. Synthèse pédagogique

Objectifs atteints :

Compétences visées (TSSR) :

Rapport


⬆️ Retour en haut de la page