--- title: Les bases de Docker theme: ./_themes/5ika.css highlightTheme: github verticalSeparator: revealOptions: transition: 'fade' --- # Les bases de Docker ---
![Logo Docker](img/docker_logo.png)
--- # Virtualisation ?
![Virtualisation](img/virtualization.png)
--- # C'est quoi Docker ? 🐋 - Virtualisation extrĂȘmement lĂ©gĂšre et rapide - Introduit le concept de **conteneur** - Ouvre plein de nouvelles possibilitĂ©s (DevOps) - Une application peut ĂȘtre dĂ©placĂ©e avec son propre OS - En grande partie Open-source - (Pas d’interface graphique => ligne de commande) --- # Pourquoi on voit cela ? Docker permet d'obtenir tout un systĂšme Linux en quelques secondes. Cela sert Ă ... - Tester des choses dans un OS isolĂ© sans risquĂ© de casser son ordinateur (OS jetable) - Simuler l'exĂ©cution de programme sur des serveurs distants - Avoir un OS commun avec les mĂȘmes programmes installĂ©s pour exĂ©cuter des apps - Encapsuler notre app pour pouvoir l'exĂ©cuter plus facilement partout - Comprendre comment fonctionne le Cloud computing et le CI/CD --- Est-ce que Docker est installĂ© sur votre machine ? > Pour en ĂȘtre sĂ»r, entrez `docker info` dans un terminal --- # C'est quoi un conteneur ? 📩 C'est un systĂšme d'exploitation que l'on a rĂ©duit au minimal et qui tourne sur notre machine, au dessus de l'OS principal. Par exemple, sur mon Windows, je peux avoir un conteneur faisant tourner un Linux (Ubuntu) minimal et dans ce Linux, je fais tourner un serveur Apache. Les conteneurs offrent une mĂ©thode lĂ©gĂšre et portable pour empaqueter, distribuer et exĂ©cuter des applications. --- ![Conteneurs Docker](img/docker_containers.png) --- ## Avantages de Docker - **Isolation** : Chaque application est exĂ©cutĂ©e dans son propre conteneur, assurant l'isolation des ressources et des dĂ©pendances. - **PortabilitĂ©** : Les conteneurs sont autonomes et peuvent ĂȘtre exĂ©cutĂ©s sur n'importe quel systĂšme compatible avec Docker. - **ReproductibilitĂ©** : Les conteneurs fournissent un environnement cohĂ©rent, garantissant que l'application fonctionne de la mĂȘme maniĂšre partout. - **ÉvolutivitĂ©** : Les conteneurs permettent de mettre Ă  l'Ă©chelle rapidement et facilement les applications. --- ## Architecture de Docker ![Architecture Docker](https://docs.docker.com/engine/images/architecture.svg) --- ## Principaux composants - **Images Docker** : ModĂšles immuables pour crĂ©er des conteneurs. Elles contiennent le systĂšme d'exploitation, les bibliothĂšques et les dĂ©pendances nĂ©cessaires Ă  l'exĂ©cution de l'application. - **Conteneurs Docker** : Instances en cours d'exĂ©cution d'une image Docker. Chaque conteneur est isolĂ© et fonctionne de maniĂšre indĂ©pendante. - **Docker Registry** : RĂ©pertoire centralisĂ© pour stocker et distribuer des images Docker. - **Dockerfile** : Fichier texte dĂ©crivant les Ă©tapes nĂ©cessaires Ă  la construction d'une image Docker. --- ## Utilisation de Docker 1. **Installation** : Installer Docker Engine sur votre systĂšme. 2. **Pull de l'image** : RĂ©cupĂ©rer l'image Docker Ă  partir d'un registre public ou privĂ©. 3. **CrĂ©ation du conteneur** : CrĂ©er un conteneur Ă  partir de l'image Docker. 4. **ExĂ©cution du conteneur** : ExĂ©cuter des commandes Ă  l'intĂ©rieur du conteneur. 5. **ArrĂȘt et suppression du conteneur** : ArrĂȘter et supprimer le conteneur lorsqu'il n'est plus nĂ©cessaire. --- # Comment obtenir une image ? Le site [Docker Hub](https://hub.docker.com/search?q=) rĂ©fĂ©rencie toutes les images que l'on peut rĂ©cupĂ©rer sur sa machine et utiliser pour crĂ©er un conteneur. Par exemple, l'image nommĂ©e `ubuntu:23.04` permet de crĂ©er un conteneur faisant tourner Ubuntu Ă  la version 23.04. đŸ«” Sur votre machine, rĂ©cupĂ©rez cette image en faisant: ```bash docker pull ubuntu:23.04 ``` --- Pour lister les images prĂ©sentes sur sa machine, on peut entrer: ```bash docker images ``` Vous devriez voir apparaĂźtre une ligne avec `ubuntu`. --- # Comment crĂ©er un conteneur ? On utilise une image en l'instanciant pour crĂ©er un conteneur. đŸ«” Essayez la commande suivante: ```bash docker run -it ubuntu:23.04 ``` On crĂ©e ainsi un conteneur qui tourne sur ma machine. ---
![Instanciation](img/docker_how.png)
--- L'image `ubuntu:23.04` fait que nous sommes directement placĂ©s dans un shell lorsqu'on crĂ©e le conteneur. Vous pouvez quitter le conteneur en entrant `exit` ou faire les commandes suivantes dans un second terminal. Si vous quittez le conteneur, il passera dans l'Ă©tat *stoppĂ©*. --- # Comment voir les conteneurs ? La commande suivante permet de lister tous les conteneurs **qui tournent** actuellement sur la machine. ``` docker ps ``` On peut voir tous les conteneurs, y compris les stoppĂ©s, avec ``` docker ps -a ``` > Automatiquement, Docker attribue un nom alĂ©atoire Ă  votre conteneur > afin de l'identifier. đŸ«” Essayez ces commandes et retenez le nom assignĂ© Ă  votre conteneur Ubuntu. --- # Supprimer un conteneur Il va vite devenir nĂ©cessaire de faire le mĂ©nage dans les conteneurs sur votre machine. đŸ«” Supprimez votre conteneur Ubuntu avec la commande suivante: ``` docker rm -f nom_conteneur ``` > Il faut remplacer `nom_conteneur` par le nom du conteneur que vous voulez supprimer. --- # Lancer un serveur dans un conteneur L'image `nginx:alpine` lance un serveur NGINX dans un nouveau conteneur. ```bash docker pull nginx docker run -it nginx ``` > La commande `docker pull nginx` est facultative. > Elle sera automatiquement faite lors du `run` si > l'image `nginx` n'existe pas localement. --- ```bash docker run -it nginx ```
![](img/container_simple.png)
--- Avec la commande précédente, on crée un conteneur au sein de notre systÚme mais il est totalement isolé. On n'a pas moyen d'y accéder. --- # Pour la prochaine fois Trouver comment on crée sa propre image Docker afin d'encapsuler l'app https://github.com/5ika/Deer. Vous aurez besoin de créer un Dockerfile. > Pas besoin de voir trop compliqué, c'est > réalisable en 4-5 lignes maximum --- # Pour la prochaine fois Quelques ressources pour vous aider: - Documentation de Docker https://docs.docker.com/build/guide/ - ChatGPT - Des milliers d'exemple sur GitHub et sur le Web