<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

----
### 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}]"}