<style> .reveal { font-size: 24px; } </style> # Introduction à Docker slides: https://hackmd.io/@YsWXm164Sb20fiikuCkhxg/SyIAOYr4D ---- ## Qui suis-je ? - Arnaud Brunet - Développeur à l'UNC - Vacataire sur le cours de Génie logiciel à l'UNC - 15+ XP ---- ### Pourquoi Docker ? Serveurs physiques [https://i.imgur.com/HPYYPYU.png](https://i.imgur.com/HPYYPYU.png) Problèmes de partage de ressources : * CPU / RAM / Disques * Mais aussi fichiers communs / librairies * Et pb de mise à jour de l'OS impactant l'ensemble des apps ---- ### Pourquoi Docker ? Serveurs virtuels [https://i.imgur.com/G0zpJG9.png](https://i.imgur.com/G0zpJG9.png) Chaque application est isolée dans un serveur virtuel Avantages : * Ressources allouées par application * Pas de fichiers communs ni de librairies * Maj des OS indépendantes Inconvénients: * Surdimensionnement des ressources allouées * Installation d'une application n'est pas identiques sur chaque machine ---- ### Les containers [https://i.imgur.com/PZkb5KS.png](https://i.imgur.com/PZkb5KS.png) Chaque application est isolé de l'hôte et des autres applications par un container. Avantages : * Ressources allouées par container * Les mises à jour se font par container * Les mises à jour de l'hôte n'impacte pas les containers * On peut dupliquer le container sur un autre serveur Inconvénients : * Changement d'habitudes * Plus d'accès direct à serveurs / fichiers du container ---- ### Docker * Container Engine * interface en CLI ![](https://i.imgur.com/uYIByaW.png) ---- ### Les images * Contient l'application prêt à être lancée. * Immuable (chaque image est unique) * Créée à partir d'un DockerFile * ou récupérer à partir d'un registre * registre officiel (publique) : hub.docker.com * contient +8 millions d'images * => ne pas repackager des applications existantes ! ---- ### Exemple d'utilisation d'une image existante * lance un hello-word : `docker run hello-world` * lance un NGINX (serveur web) sur le port 8080 : `docker run -p 8080:80 nginx` * lance le serveur avec mes fichiers : `docker run -p 8080:80 -v ${PWD}/.:/usr/share/nginx/html nginx` * mode daemon : `-d` * nommé un container : `--name` ---- ### Accès au container * voir les containers lancés : `docker ps` * voir les containers existants : `docker ps -a` * arrêter un container : `docker stop <nom>` * relancer un container arrêté : `docker start <nom>` * shell dans le container : `docker exec -it <nom> /bin/sh` * lancer une commande dans le container : `docker exec <nom> <commande>` * copie un fichier vers le container : `docker cp <source> <nom>:<destination>` * copie un fichier depuis un container : `docker cp <nom>:<source> <destination>` ---- ### Création d'une image * DockerFile = recette pour déployer l'application * Héritage (simple) entre les images * `docker build .` ```dockerfile= FROM php:apache COPY --chown=www-data:www-data index.php /var/www/html ``` ---- ### Manipulation des images * Nom d'une image: `[<registre>/]<nom>[:<tag>]` * Voir l'ensemble des images: `docker images` * Supprimer une image : `docker rmi <image>` * Nommer une image : `docker tag <image> <nouveau nom>` ---- ### Docker Compose * Permet d'assembler des containers (exemple serveur PHP + DB) * Partage du même réseau / mêmes fichiers, ... ``` version: '3' services: # Database db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress networks: - wpsite # phpmyadmin phpmyadmin: depends_on: - db image: phpmyadmin/phpmyadmin restart: always ports: - '8080:80' environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: password networks: - wpsite # Wordpress wordpress: depends_on: - db image: wordpress:latest ports: - '8000:80' restart: always volumes: ['./:/var/www/html'] environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress networks: - wpsite networks: wpsite: volumes: db_data: ``` ---- Merci :)
{"metaMigratedAt":"2023-06-15T12:34:01.952Z","metaMigratedFrom":"YAML","title":"Introduction à Docker","breaks":true,"contributors":"[{\"id\":\"62c5979b-5eb8-49bd-b47e-28a4b82921c6\",\"add\":6807,\"del\":2522}]"}
    138 views