Outils pour utilisateurs

Outils du site


docker

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
docker [2025/02/02 11:32] lucdocker [2025/08/02 11:30] (Version actuelle) luc
Ligne 12: Ligne 12:
 Pas de difficultés, les [[https://docs.docker.com/engine/install/debian/|docs de Docker]] sont bien fichues. Pour Debian, il est recommandé d'installer un nouveau dépôt géré par la société docker dans ''source.list'', ce qui permet d'avoir les versions stables à jour. CHECKED Pas de difficultés, les [[https://docs.docker.com/engine/install/debian/|docs de Docker]] sont bien fichues. Pour Debian, il est recommandé d'installer un nouveau dépôt géré par la société docker dans ''source.list'', ce qui permet d'avoir les versions stables à jour. CHECKED
  
-===== Concept =====+===== Images vs Container =====
 Il faut différencier les images et les containers. L'image est comme un DVD/.iso, le container est l'image installée pour être executée. Il faut différencier les images et les containers. L'image est comme un DVD/.iso, le container est l'image installée pour être executée.
  
Ligne 21: Ligne 21:
 Ces containers contiennent l'application et l'environnement nécessaire (choisi par le dev) pour le faire tourner.  Ces containers contiennent l'application et l'environnement nécessaire (choisi par le dev) pour le faire tourner. 
  
 +Les données persistantes (indépendantes de l'image et de l'instance) sont gérées dans des [[#les_volumes|Volumes]].
 +
 +On peut automatiser le déploiement de service Docker avec [[docker_compose|Docker-compose]].
  
 ===== Commandes Docker ===== ===== Commandes Docker =====
Ligne 85: Ligne 88:
 # ou avoir plusieurs versions # ou avoir plusieurs versions
 # c'est un cache de DL des images en fait :) # c'est un cache de DL des images en fait :)
-docker images+docker image ls
  
- 
-### DOCKER RMI 
 # supprimer les images (et pas les containers) # supprimer les images (et pas les containers)
 # il ne doit plus y avoir de container faisant référence à cette image # il ne doit plus y avoir de container faisant référence à cette image
 +docker image rm <IMAGE>
 +docker rmi <IMAGE>  # alias
  
 +# Supprimer toutes les images inutilisées (pas de container y faisant référence)
 +docker image prune
  
 +
 +### Démarrage auto
 +# sur un nouveau container
 +docker run -d --restart unless-stopped redis
 +
 +# sur un container existant
 +docker update --restart always metabase
 +
 +# options :
 +#    no: don't start automatically (default)
 +#    on-failure[:max-retries]: redémarrer le container s'il ferme à cause d'une erreur, avec limite optionnelle de tentatives. Pas de démarrage au boot
 +#    always: démarre le container au démarrage du daemon docker, même si arrêté à la main
 +#    unless-stopped: démarre le container au démarrage du daemon, sauf si arrêté à la main
 +
 +
 +
 +</code>
 +
 +===== Les Volumes =====
 +
 +Les volumes sont des espaces de stockage existant hors des containers. Ils sont utilisés pour avoir un stockage permanent de données.\
 +Fonctionnalités:
 +  * Ils peuvent être partagés entre plusieurs containers
 +  * Ils peuvent avoir un nom (named volume) ou être "annonymes" (un nom automatique est donné)
 +  * Ils peuvent être créés et manipulés sans container
 +  * Il peut exister plusieurs "driver" de volume (par défaut "local", mais il peut y avoir du rclone ...)
 +  * Si on démarre un container avec un volume, si le volume n'existe pas, il est créé
 +  * Quand on supprime un container, le named volume associé reste. Il faut le supprimer à la main si on veut s'en débarrasser.
 +  * Le concept est de créer un container avec un volume, puis de facilement supprimer le container, l'update, le relancer, les données restent
 +  * Quand on monte un volume sur un dossier déjà existant (dans le container), les données sont copiées dans le volume (utile pour le backup)
 +
 +Par défaut, les volumes sont ici : ''/var/lib/docker/volumes/''
 +
 +<code bash>
 ### DOCKER VOLUME ### DOCKER VOLUME
 ## Les dockers volume sont les couches de données  ## Les dockers volume sont les couches de données 
Ligne 98: Ligne 137:
 docker volume ls  docker volume ls 
  
-# supprimer les volumes non utilisés+# Inspecter un volume (sa localisation sur le système de fichier de l'hôte, son nom, son mount-dest etc.) 
 +docker volume inspect <volume_name> 
 + 
 +# supprimer tous les volumes non utilisés
 docker volume prune docker volume prune
  
Ligne 104: Ligne 146:
 docker volume rm <volume_name> docker volume rm <volume_name>
  
 +# Créer un volume hors container
 +docker volume create <volume_name>
  
 +# monter un volume dans un container
 +docker run --mount type=volume,src=<volume-name>,dst=<mount-path>
 +# dst=<mount_path> : point de montage DANS le container
 +# autres options :
 +#    readonly
 +#    dst aliases : destination, target, dst
 +#    volume-nocopy : If present, data at the destination isn't copied into the volume if the volume is empty.
 +#                    By default, content at the target destination gets copied into a mounted volume if empty.
  
- 
-### DOCKER SEARCH  
-# chercher des images dans le Docker Hub 
 </code> </code>
 +
 +Une procédure simple de sauvegarde: 
 +  * On arrête le container
 +  * sur le système hôte, on copie le volume (rsync, borg) 
 +  * On redémarre le container
 +
 +Docker en propose une autre, basé sur le partage de volume entre plusieurs container, [[https://docs.docker.com/engine/storage/volumes/#back-up-restore-or-migrate-data-volumes|voir la doc officielle]].
 +
 +===== Docker compose =====
 +
 +Docker compose est à la fois un programme ''docker compose'' et à la fois un fichier de configuration (en YAML).\\
 +L'idée est d'avoir une recette de cuisine contenue dans un fichier pour créer un service (qui peut faire appel à plusieurs containers : serveur web, bdd, ... avec des montages de volumes bien définis). ça évite de faire des commandes CLI à rallonge.\\
 +Et ça épouse bien le cycle de vie d'un service sous Docker, qui consiste à séparer les données (volumes) de l'application (image), en faisant des containers qui suivent des cycles de création à partir de la dernière image de l'app dispo sur le web et de destruction du container, tout en conservant les données dans les volumes pour avoir une persistance de celles-ci.
 +
 +Voici l'article détaillé sur l'utilisation des [[docker_compose|fichiers de config pour docker compose]].
  
 ===== Recommandations ===== ===== Recommandations =====
Ligne 116: Ligne 180:
  
   * Ne pas utiliser Docker au sein d'un autre système de container style LXC, si besoin d'isolation particulière au sein du système hôte, il vaut mieux créer une VM   * Ne pas utiliser Docker au sein d'un autre système de container style LXC, si besoin d'isolation particulière au sein du système hôte, il vaut mieux créer une VM
-  * Mieux vaut ne pas gérer les auto-start & co via systemd et consorts. Il vaudrait mieux passer directement par l'interface Docker. Comment ? à creuser +  * Mieux vaut ne pas gérer les auto-start & co via systemd et consorts. Il vaudrait mieux passer directement par l'interface Docker. ça peut se faire avec l'argument ''--restart'' de la ligne de commande 
-  * Les docker-files sont parait-il hyper bien, mais je ne sais pas ce dont il s'agit (un système pour ne pas avoir des cli ultralongues et ainsi éviter les typo ?)+  * Les docker-files sont des recettes de cuisine pour **construire** une image 
   * ''docker run'' ne rend la main (prompt) que lorsqu'il n'y a plus de process actif dans le container (/!\ serveur web attendant des connexions), penser à utiliser --detach   * ''docker run'' ne rend la main (prompt) que lorsqu'il n'y a plus de process actif dans le container (/!\ serveur web attendant des connexions), penser à utiliser --detach
docker.1738495954.txt.gz · Dernière modification : de luc