workshop_docker
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| workshop_docker [2020/10/08 22:26] – [Installer Docker] Labomedia | workshop_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: | ||
| docker pull python: | docker pull python: | ||
| docker pull python: | docker pull python: | ||
| - | docker pull mysql:8 | + | docker pull mysql |
| - | docker pull wordpress:5.5-apache | + | docker pull wordpress |
| ``` | ``` | ||
| ## Présentation des concepts | ## Présentation des concepts | ||
| - | * Conteneur | + | ### Différence entre Conteneur et VM |
| - | * Images Docker | + | Une VM : |
| - | * Layered FS (Système de fichier multi couche) | + | * Dispose d'un OS (système d' |
| - | * Dockerfile | + | * A besoin d'un hyperviseur installé sur la machine physique hôte. |
| - | * Docker | + | * A des ressources dédiées (RAM, CPU) |
| - | * Exposition de ports | + | |
| - | * Volumes | + | Un Conteneur |
| + | * Partage son noyau linux avec celui de la machine physique hôte => Forcément le même OS que la machine hôte. | ||
| + | * Utilise les cgroup linux pour isoler des procéssus. | ||
| + | * Utilise les cgroup pour limiter les ressources attribuées. | ||
| + | |||
| + | ### Les Images Docker | ||
| + | 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 associée à une configuration de démarrage pour un conteneur. | ||
| + | |||
| + | La norme de nommage des images est la suivante : <**registry**>/< | ||
| + | - La registry par défaut si omise est généralement le [dockerhub](https:// | ||
| + | - 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' | ||
| + | - Le tag est la version de l' | ||
| + | |||
| + | Exemple: | ||
| + | - alpine: | ||
| + | - mysql | ||
| + | - ovhcom/ | ||
| + | |||
| + | ``` bash | ||
| + | docker pull alpine: | ||
| + | docker images | ||
| + | ``` | ||
| + | |||
| + | >  | ||
| + | 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 | ||
| + | |||
| + | [Représentation de overlayfs](https:// | ||
| + | |||
| + | ### 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' | ||
| + | |||
| + | ``` bash | ||
| + | docker run alpine:3.18 echo "hello world" | ||
| + | docker ps -a ### Liste tous les conteneurs sur la machine (démarrés ou arrêtés) | ||
| + | ``` | ||
| + | |||
| + | ### 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, | ||
| + | |||
| + | ``` bash | ||
| + | docker volume ls ### Liste les volumes. | ||
| + | docker run alpine:3.18 sh -c "touch foo ; ls -l foo" | ||
| + | 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" | ||
| + | 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' | ||
| + | |||
| + | ``` bash | ||
| + | docker run --name web -d -p 8080:80 nginx ### Démarre un conteneur nommé web basé sur l' | ||
| + | docker ps ### Liste les conteneurs démarrés sur la machine | ||
| + | ``` | ||
| + | Navigué sur l'URL : [http:// | ||
| + | ``` 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:// | ||
| ### Reference | ### Reference | ||
| Ligne 47: | Ligne 124: | ||
| ## Exemples d' | ## Exemples d' | ||
| + | ### Quelques commandes utiles | ||
| + | Lister tous les containers docker en train de tourner | ||
| + | ``` | ||
| + | docker ps | ||
| + | ``` | ||
| + | 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) | ||
| + | ``` | ||
| + | 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 | ||
| + | ``` | ||
| + | docker system prune | ||
| + | ``` | ||
| + | Supprimer des containers en les listant au préalable | ||
| + | ``` | ||
| + | docker container ls -a | ||
| + | CONTAINER ID IMAGE | ||
| + | 3975f606c258 | ||
| + | b3a2766bbb87 | ||
| + | ``` | ||
| + | |||
| + | ``` | ||
| + | docker container rm 3975f606c258 | ||
| + | ``` | ||
| + | |||
| + | ``` | ||
| + | docker network ls | ||
| + | NETWORK ID NAME DRIVER | ||
| + | 107b8ac977e3 | ||
| + | ab998267377d | ||
| + | h520032c3d31 | ||
| + | 3bc81b63f740 | ||
| + | ``` | ||
| + | Virer un composant réseau : | ||
| + | ``` | ||
| + | docker network rm h520032c3d31 | ||
| + | ``` | ||
| + | |||
| + | Supprimer l' | ||
| + | ``` | ||
| + | ip link delete docker0 | ||
| + | | ||
| + | ``` | ||
| + | |||
| + | Entrer dans un container avec un shell bash | ||
| + | ``` | ||
| + | | ||
| + | | ||
| + | ``` | ||
| ### 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 52: | 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 " | Pour sortir vous pouvez taper la la commande " | ||
| Ligne 76: | Ligne 206: | ||
| _On précise que l'on n' | _On précise que l'on n' | ||
| ``` bash | ``` bash | ||
| - | docker run --rm -d -p3306:3306 --name=" | + | docker run --rm -d -p3306:3306 --name=" |
| docker logs -f ma_bd | docker logs -f ma_bd | ||
| ``` | ``` | ||
| Ligne 94: | 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 102: | Ligne 232: | ||
| ``` bash | ``` bash | ||
| docker network create wordpress | docker network create wordpress | ||
| - | docker run --rm -d --network=wordpress --name=" | + | docker run --rm -d --network=wordpress --name=" |
| - | docker run --rm -d -p8080:80 --network=wordpress --name=" | + | docker run --rm -d -p8080:80 --network=wordpress --name=" |
| docker ps | docker ps | ||
| docker logs -f mon_wordpress | docker logs -f mon_wordpress | ||
| Ligne 132: | 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' | ||
| + | - Doc d' | ||
| </ | </ | ||
| {{tag> | {{tag> | ||
| }} | }} | ||
workshop_docker.1602196002.txt.gz · Dernière modification : de Labomedia
