docker
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
docker [2020/06/23 21:04] – luc | docker [2025/08/02 11:30] (Version actuelle) – luc | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Docker ====== | ||
+ | Pendant longtemps j'ai fuit Docker. D' | ||
+ | |||
+ | Mais le temps passant, les besoins changent et je dois maintenant déployer des applications au boulot. Puis je n'ai ni le temps (et peut-être pas le courage), de gérer le déploiement de ces applications à partir des sources ou autre solution très consommatrices de temps et de skill. | ||
+ | |||
+ | Enfin, la containerisation n'est plus une mode, mais c'est devenu un véritable moyen de faire de l' | ||
+ | |||
+ | Bref, je me suis mis (un peu) à Docker | ||
+ | |||
+ | ===== Installation ===== | ||
+ | Pas de difficultés, | ||
+ | |||
+ | ===== Images vs Container ===== | ||
+ | Il faut différencier les images et les containers. L' | ||
+ | |||
+ | On peut créer des containers (à partir de notre propre travail ou d'une image récupérée sur le Hub).\ | ||
+ | On peut démarrer des containers.\ | ||
+ | On peut arrêter des containers. | ||
+ | |||
+ | Ces containers contiennent l' | ||
+ | |||
+ | Les données persistantes (indépendantes de l' | ||
+ | |||
+ | On peut automatiser le déploiement de service Docker avec [[docker_compose|Docker-compose]]. | ||
+ | |||
+ | ===== Commandes Docker ===== | ||
+ | Pour l' | ||
+ | |||
+ | De base la commande Docker s' | ||
+ | |||
+ | <code bash> | ||
+ | ### DOCKER RUN | ||
+ | # créer et démarrer un container | ||
+ | docker run -p 8080:80 -v ~/ | ||
+ | |||
+ | # /!\ la commande ne rend la main QUE lorsque tous les process à l' | ||
+ | # options utiles : | ||
+ | #-d | ||
+ | # (detach) run le container en background (non bloquant sur la cli, et ça c'est bien) | ||
+ | #-v / | ||
+ | # (volume) crée un bind entre un dossier sur le système de fichier de l' | ||
+ | # utile pour la persistance de données et/ou le backup | ||
+ | #-p host: | ||
+ | # fait un renvoi des ports de l'host vers le container (utile si plusieurs containers servent du web, chacun sur le port 80 par exemple) | ||
+ | #--name NOM | ||
+ | # pour nommer le container que l'on crée | ||
+ | # -e ENV_VARIABLE=value | ||
+ | # Passer des variables env au container lors de sa création | ||
+ | # < | ||
+ | # nom de l' | ||
+ | # si l' | ||
+ | |||
+ | |||
+ | ### DOCKER CREATE | ||
+ | # crée un container sans le démarrer | ||
+ | |||
+ | |||
+ | ### DOCKER START | ||
+ | # démarre un container déjà créé | ||
+ | docker start <ID> | ||
+ | |||
+ | #est-ce que ça marche avec le name ? à tester | ||
+ | |||
+ | |||
+ | ### DOCKER STOP | ||
+ | # arrête un container | ||
+ | docker stop <ID> | ||
+ | |||
+ | |||
+ | ### DOCKER PS | ||
+ | # liste les containers actifs (run) | ||
+ | docker ps | ||
+ | |||
+ | # liste tous les containers | ||
+ | docker ps -a | ||
+ | |||
+ | |||
+ | ### DOCKER RM | ||
+ | # supprimer des containers | ||
+ | # on peut récupérer les id avec ' | ||
+ | docker rm < | ||
+ | |||
+ | |||
+ | ### DOCKER IMAGES | ||
+ | # lister les images | ||
+ | # car plusieurs container peuvent être réalisés à partir d'une même image | ||
+ | # ou avoir plusieurs versions | ||
+ | # c'est un cache de DL des images en fait :) | ||
+ | docker image ls | ||
+ | |||
+ | # supprimer les images (et pas les containers) | ||
+ | # il ne doit plus y avoir de container faisant référence à cette image | ||
+ | docker image rm < | ||
+ | docker rmi < | ||
+ | |||
+ | # 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[: | ||
+ | # always: démarre le container au démarrage du daemon docker, même si arrêté à la main | ||
+ | # unless-stopped: | ||
+ | |||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | ===== 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 " | ||
+ | * Ils peuvent être créés et manipulés sans container | ||
+ | * Il peut exister plusieurs " | ||
+ | * Si on démarre un container avec un volume, si le volume n' | ||
+ | * 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' | ||
+ | * 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 : ''/ | ||
+ | |||
+ | <code bash> | ||
+ | ### DOCKER VOLUME | ||
+ | ## Les dockers volume sont les couches de données | ||
+ | # Lister les volumes | ||
+ | docker volume ls | ||
+ | |||
+ | # Inspecter un volume (sa localisation sur le système de fichier de l' | ||
+ | docker volume inspect < | ||
+ | |||
+ | # supprimer tous les volumes non utilisés | ||
+ | docker volume prune | ||
+ | |||
+ | # supprimer un volume en particulier | ||
+ | docker volume rm < | ||
+ | |||
+ | # Créer un volume hors container | ||
+ | docker volume create < | ||
+ | |||
+ | # monter un volume dans un container | ||
+ | docker run --mount type=volume, | ||
+ | # dst=< | ||
+ | # autres options : | ||
+ | # readonly | ||
+ | # dst aliases : destination, | ||
+ | # 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. | ||
+ | |||
+ | </ | ||
+ | |||
+ | 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:// | ||
+ | |||
+ | ===== Docker compose ===== | ||
+ | |||
+ | Docker compose est à la fois un programme '' | ||
+ | L' | ||
+ | Et ça épouse bien le cycle de vie d'un service sous Docker, qui consiste à séparer les données (volumes) de l' | ||
+ | |||
+ | Voici l' | ||
+ | |||
+ | ===== Recommandations ===== | ||
+ | |||
+ | Ci dessous un recueil de recommandations lues ici ou là, à méditer, à approfondir au besoin : | ||
+ | |||
+ | * Ne pas utiliser Docker au sein d'un autre système de container style LXC, si besoin d' | ||
+ | * Mieux vaut ne pas gérer les auto-start & co via systemd et consorts. Il vaudrait mieux passer directement par l' | ||
+ | * Les docker-files sont des recettes de cuisine pour **construire** une image | ||
+ | * '' |