user <-> application <-> OS <-> hardware
permet d'utiliser des programmes, app sur des machines differentes.
Une machine virtuelle (VM) est un logiciel qui simule un ordinateur physique en permettant l'exécution de systèmes d'exploitation et d'applications comme s'ils étaient sur un matériel dédié.
1. **Isolation** : Chaque VM est isolée des autres VMs et de l'hôte, ce qui garantit que les applications s'exécutent dans des environnements sécurisés et indépendants.
2. **Portabilité** : Les VMs peuvent être facilement déplacées ou copiées d'un système à un autre, facilitant la gestion et la flexibilité.
3. **Évolutivité** : Il est possible d'augmenter ou de réduire les ressources (comme la mémoire, le stockage, et le CPU) allouées à une VM sans affecter les autres.
1. **Développement et Test** : Les développeurs utilisent souvent des VMs pour tester des applications dans des environnements différents sans avoir besoin de plusieurs machines physiques.
2. **Consolidation de Serveurs** : Les entreprises utilisent des VMs pour exécuter plusieurs serveurs sur une seule machine physique, optimisant ainsi les ressources.
3. **Exécution d'OS Différents** : Permet d'exécuter plusieurs systèmes d'exploitation différents sur la même machine, comme Windows sur macOS.
1. **Isolation complète** : Chaque VM inclut un système d'exploitation complet, assurant une isolation maximale entre les environnements.
2. **Compatibilité** : Permet d'exécuter différents systèmes d'exploitation sur une seule machine physique.
3. **Sécurité** : En raison de l'isolation complète, les VM offrent un niveau de sécurité élevé puisque chaque VM est entièrement indépendante.
1. **Consommation de ressources** : Les VM nécessitent plus de ressources (mémoire, CPU) car chaque VM inclut un système d'exploitation complet.
2. **Démarrage lent** : Le temps de démarrage des VM est plus long en raison du chargement du système d'exploitation.
3. **Gestion complexe** : La gestion des mises à jour et des configurations pour chaque VM peut devenir lourde.
1. **Léger** : Les conteneurs partagent le même noyau du système d'exploitation, ce qui les rend plus légers que les VM.
2. **Démarrage rapide** : Les conteneurs démarrent beaucoup plus rapidement que les VM car ils n'ont pas besoin de charger un système d'exploitation complet.
3. **Facilité de déploiement** : Les conteneurs sont facilement portables et peuvent être déployés rapidement sur différentes plateformes.
1. **Isolation moindre** : Les conteneurs partagent le noyau du système d'exploitation hôte, ce qui peut poser des problèmes de sécurité et d'isolation.
2. **Compatibilité limitée** : Les conteneurs fonctionnent mieux avec des applications conçues pour être exécutées dans des environnements conteneurisés.
3. **Gestion des dépendances** : Bien que Docker facilite la gestion des dépendances, il peut parfois être difficile de résoudre les conflits de dépendances entre les conteneurs.
*Machines Virtuelles** : Idéales pour les environnements nécessitant une isolation complète et des systèmes d'exploitation variés.
- **Docker** : Parfait pour des déploiements rapides, des environnements légers, et des applications modernes.
permet d'envoyer du code plus rapidement, de standardiser les operations de vos app, de migrer aisement du code et de faire des economies en ameliorant l'utilisation des ressources. avec Docker vous possedez un objet unique que vous pouvez executer n'importe ou de manière fiable.
App statefull enregistrent les informations anciennes et actuelles par exemple MySQL.
App stateless ne stockent aucune information ex: les protocole http://
c'est un conteneur executable, leger et autonome qui comprend tous les elements necessaire pour executer un application.
ce sont des informations qui restent valide, utiles et accessibles sur le long terme.
est un moyen de stocker des données generer par les conteneurs de manière persistante (perennes).
immuable (immutabilite) : ne doit pas stocker de données qui doivent etre pérennes car il les perdras, a moins que vous les ayez perenniser. Mais si vous voulez creer une BDD dans un conteneur Docker vous devez creer un volume pour que celui-ci puissent stocker les données de facon perenne.
docker community (pour linux)
docker desktop (mac et windows)
docker enterprise (entreprises)
c'est une plateforme similaire à GitHub mais specialise dans le stockage d'image pour Docker.
c'est un modele leger, autonome et executable qui inclut ce qui est necessaires pour executer une app, y compris le code, biblihoteque, les dependances, et les configurations.
immuable (ne change pas apres avoir etait creer)
empilable (plusieurs images)
portables (executable sur n'importe machines ayant Docker)
Docker Inc distribue 2 versions des clients Docker desktop (mac, Windows) :
stable: version mise a jour tous les semestre
edge: mise a jour tous les mois
c'est une interface de ligne de commande quo permet aux users de communiquer avec le Demon Docker pour gerer les conteneurs, des images, des volumes, des reseaux et autres.
est un OS qui peut etre utiliser pour creer une image docker mais en soi ce n'est pas une image. Ubuntu est disponible sur Docker Hub, elle fournit une base legere pour construire et executer des conteneurs Docker. En peut l'itiliser comme image pour configurer un environnement et installer des app.
c'est ce que l'on appelle un registry. les registry c'est un logiciel qui permet de partager des images ou autres à d'autres personnes.
docker images
docker ps
docker pull nom_image
dcker run -it nom_image
docker stop id_conteneur (l'id tu le trouve dans docker ps)
docker run -it -d nom_image
docker run -d -p 8080:80 nginx
tu peux te rendre a l'adresse web : http://127.0.0.1:8080
docker ps
docker exec -ti IDdu_ps bash
permet de continuer d'utiliser la console pendant que votre conteneur tourne sur un autre processus
permet de definir un port (ex: 8080:80)
supprimer l'ensemble des ressources manuelles dans docker : docker rm ID_CONTENEUR
ou tu peux laisser faire docker le menage lui meme :
docker system prun
lister toutes les images qui sont disponibles
lister tous les conteneurs sur l'ordit
va telecharger depuis un dossier existant ou depuis le docker hub une image
pour faire tourner le conteneur de l'image
arreter le run
permet d'avoir un shell bash pleinement operationnel