Outils pour utilisateurs

Outils du site


workshop_docker

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
workshop_docker [2020/11/19 19:02] – [Exemples d'utilisation de Docker] Benjamin Labomediaworkshop_docker [2026/03/27 09:59] (Version actuelle) – [Quelques commandes utiles] Benjamin Labomedia
Ligne 21: Ligne 21:
 ``` ```
 Vous devez voir apparaitre le groupe docker dans la liste de vos groupes. Vous devez voir apparaitre le groupe docker dans la liste de vos groupes.
 +Sinon, deconnectez votre session et reconnectez-vous pour que votre user aparaisse dans le groupe docker.
  
 ### Télécharger les images du workshop  ### Télécharger les images du workshop 
 Nous aurons besoin de ces images : Nous aurons besoin de ces images :
 ``` bash ``` bash
-docker pull alpine:3.12+docker pull alpine:3.18 
 +docker pull nginx:latest
 docker pull python:3.8-alpine docker pull python:3.8-alpine
 docker pull python:3.5-alpine docker pull python:3.5-alpine
-docker pull mysql:8 +docker pull mysql 
-docker pull wordpress:5.5-apache+docker pull wordpress
 ``` ```
  
Ligne 45: Ligne 47:
  
 ### Les Images Docker ### Les Images Docker
-Ce sont de archives de système de fichier. Elles sont nommées avec des tags. Exemple : mysql:8.1. +Ce sont des archives de système de fichier. Elles sont versionnés avec des tags.  
-Une image n'est rien de plus qu'une collection de dossiers et fichiers.+Une image n'est rien de plus qu'une collection de dossiers et fichiers associée à une configuration de démarrage pour un conteneur.
  
-### Layered FS (Système de fichier multi couche) +La norme de nommage des images est la suivante : <**registry**>/<**namespace**>/<**repository**>:<**tag**> 
-Docker utilise les super cool Layered FS pour ses images. Un layered FS est un système de fichier qui enregistre les modifications sous forme de diff (différentiel ou patch). Chaque version peut être vu comme une couche du FS. La version actuelle des fichiers peut être vu comme la fusion de toutes les couches. +- La registry par défaut si omise est généralement le [dockerhub](https://hub.docker.com/search?q=) 
-Chaque image est associé dans Docker a un hash. Lorsque l'on applique une modification à une image, on créé une nouvelle couche par dessus l'image précédente.+- Le namespace par défaut est library, le namespace des images officielles administrés par Docker 
 +- Le repository est le dépôt qui contient tout l'historique des images disponibles 
 +- Le tag est la version de l'image (par défaut latest)
  
-### Le Dockerfile +Exemple:  
-Pour construire une Image Docker, on écrit un fichier Dockerfile. Ce fichier est composé de lignes de commande qui vont constituer une par une, pour chaque ligne, une nouvelle image, une nouvelle couche. Notre nouvelle image fraichement construite sera constitué de toutes les couches empilées.+- alpine:3.18 
 +- mysql 
 +- ovhcom/venom:v1.1.0 
 + 
 +``` bash 
 +docker pull alpine:3.18   ### Pull l'image alpine:3.18 sur la registry dockerhub par défaut. Le namespace par défaut est "library". 
 +docker images             ### Liste les images présentes dans la registry local 
 +``` 
 + 
 +> ![Warning](/_media/important.png "Warning") 
 +> Le tag latest ne devrait généralement pas être utilisés, car il masque la version de l'image utilisé. Cela peut conduire à des bugs ou des problèmes de sécurités.
  
 ### Le Docker Hub ### Le Docker Hub
-Ce qui permet vraiment une adoption très rapide de Docker, c'est son Hub. Il permet de partager des images Docker avec la communauté.+Ce qui permet vraiment une adoption très rapide de Docker, c'est son [dockerhub](https://hub.docker.com/search?q=). Il permet de partager des images Docker avec la communauté.
 Cela permet vraiment d'économiser beaucoup d'efforts, et de partager les bonnes idées et bonne pratiques pour construire des images. Cela permet vraiment d'économiser beaucoup d'efforts, et de partager les bonnes idées et bonne pratiques pour construire des images.
 +
 +### Layered FS (Système de fichier multi couche)
 +Docker utilise les super cool Layered FS pour ses images. Un layered FS est un système de fichier qui enregistre les modifications sous forme de diff (différentiel ou patch). Chaque version peut être vu comme une couche du FS. La version actuelle des fichiers peut être vu comme la fusion de toutes les couches.
 +Chaque image est associé dans Docker a un hash. Lorsque l'on applique une modification à une image, on créé une nouvelle couche par dessus l'image précédente.
 +
 +[Représentation de overlayfs](https://www.researchgate.net/figure/An-instance-of-OverlayFS_fig2_337586231)
  
 ### Conteneur, runtime, image ### Conteneur, runtime, image
 Une image n'est pas un conteneur. Une image c'est principalement un FS qui est pré-paramétré. Un conteneur est l'enveloppe qui va être crée lors du runtime (de l’exécution) pour contenir ce FS et démarrer un processus dans cette enveloppe. Une image n'est pas un conteneur. Une image c'est principalement un FS qui est pré-paramétré. Un conteneur est l'enveloppe qui va être crée lors du runtime (de l’exécution) pour contenir ce FS et démarrer un processus dans cette enveloppe.
  
-### Exposition de ports +``` bash 
-Chaque conteneur dispose de sa stack réseau. Par défaut, un service qui écoute sur un port dans le conteneur. Cela veut dire que vous devez connaitre l'IP de ce conteneur pour accéder au service depuis votre machine. Un mécanisme d'exposition de port au runtime permet de relier un port de sa machine hôte vers le port du conteneur que l'on démarre pour nous faciliter la vie.+docker run alpine:3.18 echo "hello world"  ### Démarre un conteneur basé sur l'image alpine:3.18, exécute à l’intérieur la commande 'echo "hello world"' puis rend la main. 
 +docker ps -a                               ### Liste tous les conteneurs sur la machine (démarrés ou arrêtés) 
 +```
  
 ### Les volumes ### Les volumes
 Le FS (systeme de fichier) d'un conteneur n'est pas persistant. A la destruction du conteneur, son FS est également détruit. Si l'on veut migrer un conteneur d'une version à une autre, on est forcé de le remplacer, on ne peut pas récupérer le FS du précédent conteneur. Pour répondre à cette problématique, Docker introduit "les volumes". Avec les volumes, Docker permet de "monter" au runtime n'importe quel répertoire de la machine hôte à l’intérieur d'un conteneur. Ainsi, si l'on configure certain volume, les données de nos conteneurs pourront être persistées en dehors de ceux-ci. Le FS (systeme de fichier) d'un conteneur n'est pas persistant. A la destruction du conteneur, son FS est également détruit. Si l'on veut migrer un conteneur d'une version à une autre, on est forcé de le remplacer, on ne peut pas récupérer le FS du précédent conteneur. Pour répondre à cette problématique, Docker introduit "les volumes". Avec les volumes, Docker permet de "monter" au runtime n'importe quel répertoire de la machine hôte à l’intérieur d'un conteneur. Ainsi, si l'on configure certain volume, les données de nos conteneurs pourront être persistées en dehors de ceux-ci.
 +
 +``` bash
 +docker volume ls                                                ### Liste les volumes.
 +docker run alpine:3.18 sh -c "touch foo ; ls -l foo"            ### Créé et liste un fichier dans un conteneur
 +ls -l foo                                                       ### Liste ce fichier sur le host
 +docker run alpine:3.18 ls -l foo                                ### Liste ce fichier dans un nouveau conteneur
 +docker run -v $PWD:/tmp -w /tmp alpine:3.18 sh -c "touch foo"   ### Crée ce fichier dans un conteneur donc le host current dir est monté dans work dir du conteneur (/tmp)
 +ls -l foo                                                       ### Liste ce fichier sur le host
 +```
 +
 +### Exposition de ports
 +Chaque conteneur dispose de sa stack réseau. Par défaut, un service qui écoute sur un port dans le conteneur. Cela veut dire que vous devez connaitre l'IP de ce conteneur pour accéder au service depuis votre machine. Un mécanisme d'exposition de port au runtime permet de relier un port de sa machine hôte vers le port du conteneur que l'on démarre pour nous faciliter la vie.
 +
 +``` bash
 +docker run --name web -d -p 8080:80 nginx  ### Démarre un conteneur nommé web basé sur l'image nginx:latest et map le port 8080 de l'hote sur le port 80 du conteneur.
 +docker ps                              ### Liste les conteneurs démarrés sur la machine
 +```
 +Navigué sur l'URL : [http://localhost:8080/](http://localhost:8080/)
 +``` bash
 +docker kill web  ### Tue le conteneur nommé web.
 +docker ps -a     ### Liste tous les conteneurs sur la machine
 +docker rm web    ### Liste les conteneurs démarrés sur la machine
 +docker ps -a     ### Liste tous les conteneurs sur la machine
 +```
 +
 +### Le Dockerfile
 +Pour construire une Image Docker, on écrit un fichier Dockerfile. Ce fichier est composé de lignes de commandes qui vont constituer une par une, pour chaque ligne, une nouvelle image, un nouveau layer (une couche). Notre nouvelle image fraîchement construite sera constituée de toutes les couches empilées.
 +[Exemple de fichier Dockerfile](https://github.com/mxbossard/dockerfile-example/blob/build1/Dockerfile)
  
 ### Reference ### Reference
Ligne 76: Ligne 126:
 ### Quelques commandes utiles  ### Quelques commandes utiles 
 Lister tous les containers docker en train de tourner Lister tous les containers docker en train de tourner
-  docker ps +``` 
-+ ceux qui sont arrêtés +docker ps 
-  docker ps –a+``` 
 +Lister aussi ceux qui sont arrêtés 
 +``` 
 +docker ps -a 
 +```
 Arrêter un container en fonction de son id (première colonne de docker ps) Arrêter un container en fonction de son id (première colonne de docker ps)
-  docker stop --time=20 container_id+``` 
 +docker stop --time=20 container_id 
 +```
 Eliminer toutes les images Docker pour lesquelles les containers sont arrêtés et enlever les composantes réseau inutiles Eliminer toutes les images Docker pour lesquelles les containers sont arrêtés et enlever les composantes réseau inutiles
-  docker system prune+``` 
 +docker system prune 
 +```
 Supprimer des containers en les listant au préalable Supprimer des containers en les listant au préalable
-  docker container ls -a+``` 
 +docker container ls -a 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES 
 +3975f606c258        collabora/code      "/bin/sh -c 'bash st…"   51 minutes ago      Exited (137) 17 minutes ago                       keen_booth 
 +b3a2766bbb87        hello-world         "/hello"                 53 minutes ago      Exited (0) 53 minutes ago                         cranky_kowalevski 
 +```
  
-  CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES +``` 
-  3975f606c258        collabora/code      "/bin/sh -c 'bash st…"   51 minutes ago      Exited (137) 17 minutes ago                       keen_booth +docker container rm 3975f606c258 
-  b3a2766bbb87        hello-world         "/hello"                 53 minutes ago      Exited (0) 53 minutes ago                         cranky_kowalevski+```
  
-  docker container rm 3975f606c258+``` 
 +docker network ls 
 +NETWORK ID          NAME                DRIVER              SCOPE 
 +107b8ac977e3        bridge              bridge              local 
 +ab998267377d        host                host                local 
 +h520032c3d31        jenkins-overlay     bridge              local 
 +3bc81b63f740        none                null                local 
 +``` 
 +Virer un composant réseau : 
 +``` 
 +docker network rm h520032c3d31 
 +``` 
 + 
 +Supprimer l'interface docker0 définitivement 
 +``` 
 +  ip link delete docker0
      
 +```
 +
 +Entrer dans un container avec un shell bash
 +```
 + docker ps -a #pour identifier l'ID du container
 + docker exec -it dcad9f270643 sh
 +```
 ### Hello World ### Hello World
 Utiliser un conteneur léger alpine linux pour executer une commande shell qui affiche "Hello World !". Utiliser un conteneur léger alpine linux pour executer une commande shell qui affiche "Hello World !".
Ligne 97: Ligne 182:
  
 ``` bash ``` bash
-docker run --rm alpine:3.12 echo "Hello World !"+docker run --rm alpine:3.18 echo "Hello World !"
 ``` ```
  
 Lancer un shell dans un conteneur alpine linux. Lancer un shell dans un conteneur alpine linux.
 ``` bash ``` bash
-docker run --rm -it alpine:3.12 sh+docker run --rm -it alpine:3.18 sh
 ``` ```
 Pour sortir vous pouvez taper la la commande "exit" ou bien le raccourci "CTRL-D". Pour sortir vous pouvez taper la la commande "exit" ou bien le raccourci "CTRL-D".
Ligne 121: Ligne 206:
 _On précise que l'on n'utilise pas de mot de passe admin pour faire simple avec la variable d'environnement MYSQL_ALLOW_EMPTY_PASSWORD=true tel qu'indiqué dans la documentation de l'image._ _On précise que l'on n'utilise pas de mot de passe admin pour faire simple avec la variable d'environnement MYSQL_ALLOW_EMPTY_PASSWORD=true tel qu'indiqué dans la documentation de l'image._
 ``` bash ``` bash
-docker run --rm -d -p3306:3306 --name="ma_bd" -e "MYSQL_ALLOW_EMPTY_PASSWORD=true" mysql:8+docker run --rm -d -p3306:3306 --name="ma_bd" -e "MYSQL_ALLOW_EMPTY_PASSWORD=true" mysql
 docker logs -f ma_bd docker logs -f ma_bd
 ``` ```
Ligne 139: Ligne 224:
 __Le wordpress à besoin d'une BD pour fonctionner.__ On peut néanmoins constater que le service démarre bien. __Le wordpress à besoin d'une BD pour fonctionner.__ On peut néanmoins constater que le service démarre bien.
 ``` bash ``` bash
-docker run --rm wordpress:5.5-apache+docker run --rm wordpress
 ``` ```
  
Ligne 147: Ligne 232:
 ``` bash ``` bash
 docker network create wordpress docker network create wordpress
-docker run --rm -d --network=wordpress --name="ma_bd" -e "MYSQL_ALLOW_EMPTY_PASSWORD=true" mysql:8 +docker run --rm -d --network=wordpress --name="ma_bd" -e "MYSQL_ALLOW_EMPTY_PASSWORD=true" mysql 
-docker run --rm -d -p8080:80 --network=wordpress --name="mon_wordpress" -e "WORDPRESS_DB_HOST=ma_bd" -e "WORDPRESS_DB_USER=root" wordpress:5.5-apache+docker run --rm -d -p8080:80 --network=wordpress --name="mon_wordpress" -e "WORDPRESS_DB_HOST=ma_bd" -e "WORDPRESS_DB_USER=root" wordpress
 docker ps docker ps
 docker logs -f mon_wordpress docker logs -f mon_wordpress
Ligne 177: Ligne 262:
 ``` ```
 Puis vous pouvez suivre le contenu du fichier README.md situé à la racine du dépot git. Puis vous pouvez suivre le contenu du fichier README.md situé à la racine du dépot git.
 +
 +
 +# Retours
 +- A quoi sert Docker ? => Des exemples d'utilisations plus concretes. Un atelier pour des cas d'usages courants ?
 +- Doc d'install de docker-compose ?
  
 </markdown> </markdown>
 {{tag>infrastructure linux max {{tag>infrastructure linux max
 }} }}
workshop_docker.1605812573.txt.gz · Dernière modification : de Benjamin Labomedia