Outils pour utilisateurs

Outils du site


sysadmin:docker:start

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
sysadmin:docker:start [2014/11/16 15:07] rootsysadmin:docker:start [2021/07/28 12:06] (Version actuelle) 92.154.112.189
Ligne 1: Ligne 1:
-====== docker ====== +{{tag>sysadmin dev devops docker}}
-docker jeune mais s'appuie sur des briques logicielles pérennes. +
-développer dans une logique de  +
-permet d'isoler des applications sans avoir a recreer une VM completes.+
  
 +====== Docker ======
  
-par defaut bulle fermée +Docker permet la création d'un environnement d’exécution isolé (appelé conteneur ou container) pour une application, un programme, une commande. Le conteneur, regroupe ou empaquette l'application et ses dépendances ainsi elle pourra être exécutée sur n'importe quel serveur/distribution Linux. Cette méthode étend la flexibilité, la portabilité de l'application.
-la commande expose permet aux conteneur+
  
 +
 +===== Notions =====
 +
 +Docker s'appuie sur des briques logicielles pérennes et des mécanismes internes au noyau Linux (LXC, les cgroups et namespaces). C'est un outil de haut niveau simplifiant la mise en place de l'isolation de processus.
 +
 +Les conteneurs ne sont pas cross-plateforme: il y a des conteneurs pour Linux (Docker), des conteneurs BSD, des conteneurs Windows.
 +
 +Le Docker hub: Dépôt externe sur lequel les utilisateurs/entreprises mettent à disposition des images.
 +
 +Docker fonctionne en client/serveur: l'utilisateur via les commandes, lance le client qui contacte le serveur (service local ou daemon). Si l'image n'est pas présente sur le système local, le daemon télécharge l'image depuis le hub Docker (pull). Le daemon crée un nouveau conteneur depuis l'image et les paramètres de configuration fournis.
 +
 +
 +Par défaut, le container est une bulle fermée, la commande expose permet aux conteneur
 mapper un port du conteneur sur un port du host (publier) pour que le conteneur soit visible sur le réseau. mapper un port du conteneur sur un port du host (publier) pour que le conteneur soit visible sur le réseau.
  
  
 +==== Cas d'utilisation ====
  
 +  * Faciliter le déploiement: application et ses dépendances peut être poussée sur n'importe quelle distribution Linux.
 +  * Faciliter le développement: Plusieurs versions de l'application peuvent cohabiter sur la même machine sans que cela pose de problèmes.
 +  * Faciliter l'installation et la mise en service: Docker propose une multitude d'outils permettant d'installer rapidement une application fonctionnelle.
  
-contenur avec appli, 
-il tourne sur la machine, je peux le déposer sur un serveur 
  
-Isoler des processus, par dessus le SE+ 
-pousser des container sur des hotes d'une ferme de serveur+ 
 +===== Installation ===== 
 + 
 +Sous Debian: 
 +<code bash> 
 +apt install docker.io 
 +</code> 
 + 
 +<code bash> 
 + docker run hello-world 
 +</code> 
 + 
 +<file> 
 +docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/create: dial unix /var/run/docker.sock: connect: permission denied. 
 +See 'docker run --help'
 +</file> 
 + 
 +Pour que l'utilisateur puisse créer un conteneur, il doit appartenir au groupe docker: 
 +<code bash> 
 +usermod --append --groups docker username 
 +</code> 
 + 
 +<code bash> 
 +docker version 
 + 
 +# afficher les paramètres de configuration de docker 
 +docker info 
 +</code>
  
 Créer des images et instancier des conteneurs Créer des images et instancier des conteneurs
  
-On ne peut pas utiliser directement l'image iso d'une cd avec docker. docker n'est pas une vm. les images sont des images de systeme de fichiers +On ne peut pas utiliser directement l'image iso d'un cd avec docker. docker n'est pas une vm. Les images sont des systèmes de fichiers intégrant toutes les dépendances nécessaires à l’exécution correcte de la commande ou du programme. Le container utilise l'image pour créer son environnement d'exécution, il  dispose d'un ensemble de propriétés supplémentaires qui peuvent être listée via la commande: 
 + 
 +<code bash> 
 +docker container inspect container_name 
 +</code> 
  
 avoir une image mise a dispo par docker (registry) avoir une image mise a dispo par docker (registry)
Ligne 28: Ligne 72:
 </code> </code>
  
-conteneur est une instance d'une image. 
  
-===== gérer les images =====+===== Gestion des images docker =====
  
-rechercher une image sur la registry:+==== Rechercher ==== 
 + 
 +Rechercher une image en ligne via le navigateur https://hub.docker.com/explore/ 
 + 
 +Depuis la ligne de commande:
 <code> <code>
-docker search mysql+docker search busybox
 </code> </code>
  
-A propos de la nomenclature, les noms en 2 parties user/image+Pour limiter les résultats, un système de filtre est disponible: 
 +<code bash> 
 +docker search --filter=is-official=true --filter=stars=3 --limit 10 busybox 
 +</code>
  
-recupere une image avec argument pull+Ici on ne veut que les 10 premiers résultats avec deux critères: plus de 3 étoiles et image officielle. 
 + 
 +Si l'on souhaite lister les révisions (tags) disponibles pour une image, docker ne propose pas d'option directement via la commande "docker search" mais on va pouvoir s'appuyer sur l'API avec une commande de la forme: 
 + 
 +<code bash> 
 +wget -q https://registry.hub.docker.com/v1/repositories/busybox/tags -O - | jq -r '.[].name' 
 +</code> 
 + 
 +==== Récupérer ==== 
 + 
 +Pour récupérer une image, utiliser la commande "docker pull":
 <code> <code>
-docker pull busybox+docker pull busybox:1.24-glibc
 </code> </code>
  
-lister les images disponibles localement+<note> 
 +Lorsqu'une image est récupérée localement, elle est disponible pour tous les utilisateurs. 
 +</note> 
 + 
 +<note> 
 +Si aucun tag n'est spécifié, le tag lastest est utilisé. 
 +</note> 
 + 
 + 
 +==== Lister ==== 
 + 
 +Lister les images disponibles localement
 <code> <code>
 +# équivalents
 +docker image list
 +docker image ls
 docker images docker images
 </code> </code>
  
 +==== Supprimer ====
  
-===== Instanciation =====+Supprimer une image stockée localement:
  
-#lister les containers existant +<code> 
-docker ps+docker image rm label_image:revision
  
-#executer une image (créer un conteneur) +équivalent 
-docker run -t -i --name busybox echo hello world+sudo docker rmi label_image:revision 
 +</code>
  
-une instance (container est créée)+<note> 
 +On peut également désigner une image via l'IMAGE ID 
 +</note>
  
-# liste tous les conteneurs meme si les taches sont+=== Suppression des images non utilisée ====
  
 +Pour supprimer toutes les images non utilisées par les conteneurs existants:
 +<code bash>
 +docker image prune -a
 +</code>
 +
 +===== Gestion des conteneurs =====
 +
 +Un conteneur peut être créé, exécuté, relancé, supprimer.
 +
 +<note>
 +Un conteneur ne peut se lancer que s'**il a une commande à exécuter**. Une fois la commande exécutée, le conteneur s' arrête.
 +</note>
 +
 +
 +==== Exécuter un conteneur ====
 +
 +Dans sa forme la plus épurée, la commande **docker container run** permet de lancer l'exécution d'une commande dans un nouveau conteneur:
 +
 +<code bash>
 +docker container run hello-world
 +</code>
 +
 +Si l'image n'est pas présente localement, Docker essaye de la télécharger puis crée le conteneur et lance l’exécution de la commande.
 +
 +La commande run possède de nombreux arguments. Une présentation plus détaillé dans le wiki.
 +
 +==== Lister les conteneurs ====
 +
 +Par défaut la commande **docker container ls** liste les conteneurs en cours d’exécution:
 +<code bash>
 +# équivalents
 +docker container ls
 +docker ps
 +</code>
 +
 +Pour lister l'ensemble des conteneurs existants:
 +<code bash>
 +docker container ls -a
 docker ps -a docker ps -a
 +</code>
  
-# supprimer l'instance (le conteur) +On remarque que la commande retourne: 
-docker rm busybox  +  * Un ID pour le conteneur, 
-conteneur enveloppe pour executer un programme.+  * L'image utilisée, 
 +  * La commande exécutée, 
 +  * La date de création, 
 +  * L'état du conteneur
 +  * Un nom unique pour le conteneur (plus facile à retenir/manipuler que l'ID)
  
-docker utilise des systeme de fichiers +==== Relancer un conteneur ====
  
-J'ai fait une imagej'ai fait une instance, je les modifiée, et je fais une nouvelle image qui integre les modif avec docker commit+Une fois le conteneur identifiéon peut relancer son exécution: 
 +<code bash> 
 +docker container start label_conteneur 
 +</code>
  
-si je veux la partager docker pushposse l'image sur la registry pour qu'elle soit disponible pour tous.+Le conteneur est exécuté mais contrairement a la commande "docker container run"aucun message n'est affiché car par défaut le conteneur est ré-exécuté en arrière planPour altérer se comportement utiliser l'option -a, --attach:
  
-docker et granularité? +<code bash> 
-un gros coteneur application wordpress peut cotnenir beacoup de composants: base de données serveur web)+docker container start --attach label_conteneur 
 +</code> 
 + 
 +Relancer en arrière plan: 
 +<code bash> 
 +docker container restart label_conteneur 
 +</code> 
 + 
 +==== Lister les processus d'un conteneur ==== 
 + 
 +Pour visualiser l'ensemble des processus s'exécutant au sein du conteneur: 
 +<code bash> 
 +docker container top container_name 
 +</code> 
 + 
 +==== Arrêter l’exécution d'un conteneur ==== 
 + 
 +<code bash> 
 +docker container stop label_conteneur 
 +</code> 
 + 
 +# Instancier une image (créer un conteneur) 
 +<code bash> 
 +docker run -t -i --env="" --name=busybox busybox 'echo hello world' 
 +</code> 
 + 
 +==== logs d'un conteneur ==== 
 + 
 +toutes les sorties (stdout et stderr) d'un conteneur produisent le log. Pour consulter le log d'un conteneur: 
 + 
 +<code bash> 
 +docker container logs label_conteneur 
 +</code> 
 + 
 +Pour n'afficher que les dernières sorties produites par le conteneur, utiliser l'option --tail 
 + 
 +<code bash> 
 +docker container logs --tail 10 label_conteneur 
 +</code> 
 + 
 +Pour suivre les sorties produites par un conteneur en temps réel, on peut utiliser l'option --follow, -f: 
 + 
 +<code bash> 
 +docker container logs --follow label_conteneur 
 +</code> 
 + 
 + 
 +==== Supprimer un conteneur ==== 
 + 
 +<code bash> 
 +docker container rm label_container  
 +</code> 
 + 
 +conteneur enveloppe, environnement pour exécuter un programme. 
 + 
 +docker utilise des systèmes de fichiers  
 + 
 +J'ai fait une image, j'ai fait une instance, je les modifiée, et je fais une nouvelle image qui intègre ces modifications avec la commande **docker commit** 
 + 
 +si je veux la partager **docker push**, pousse l'image sur la registry pour qu'elle soit disponible pour tous. 
 + 
 + 
 +===== docker et granularité ===== 
 + 
 +Un gros conteneur application wordpress peut cotnenir beaucoup de composants: base de données serveur web) 
 + 
 +La problématique de la data, elle évolue dans le conteneur. Le  l'application externaliser la data: utilisation d'un conteneur de type data: ne portera pas de process
  
-La problematique de la data, elle evolue dans le conteneur. Le  l'application externaliser la data: utilisation d'un conteneur de type data: ne portera pas de process 
  
 +bien découper, maîtriser la granularité, maîtriser les flux et les 
 +Le **Dockerfile** donne l’enchaînement des commandes permettant de reconstruire le conteneur
  
-bien decouper, maitriser la granularitémaitriser les flux et les  
-Le docker file donne l'enchainement des commandes permettant de reconstruire 
 documentation de référence: https://docs.docker.com/reference/builder/ documentation de référence: https://docs.docker.com/reference/builder/
  
Ligne 95: Ligne 285:
 </file> </file>
  
-sur le site offciel, concept et vocabulaire de base: dockerfile reference+sur le site officiel, concept et vocabulaire de base dans la section référence, la syntaxe du docker file est détailléehttps://docs.docker.com/reference/builder/ 
 + 
 +Creer l'image 
 +sudo docker build -tag toto/monimage 
 + 
 +===== Relations de dépendance ===== 
 + 
 +Variables d'environnement pour passer plein d'infos dans le containers. On les définies lors de l'instanciation du container avec docker run et l'option %%-e%% ou %%--env%% 
 + 
 + 
 +Remarque: sur le site la registry, on voit les image et les docker file qui permettent de construire l'image. Tres bonne source d'inspiration. 
 + 
 +lorsque j'instancie un contaienr, je precise qu'il a un lien avec un autre conteneur: 
 +sudo docker run --name --link=database_server -p 4000:8000 -d 
 +cree un environnement dans blog serveur avec les infos exportées par le container link 
 + 
 +créer un script qui tient compte 
 + 
 +===== logs ===== 
 + 
 +Chaque conteneur possède ses propres journaux. Il est possible de préciser le format des journaux, la taille maximale de ceux-ci, les paramètres de rotation etc. 
 + 
 +Pour déterminer quel mode de journalisation est définit sur un conteneur: 
 +<code bash> 
 +docker inspect --format '{{.HostConfig.LogConfig.Type}}' container_name 
 +</code> 
 + 
 +La commande **docker info** retourne quel mode de journalisation est actif par défaut. 
 + 
 + 
 +Quelques exemples pour spécifier le comportement des logs sur un conteneur: 
 + 
 +<code bash> 
 +# désactiver la journalisation 
 +docker run -it --log-driver none alpine ash 
 + 
 +# logs dans un fichier au format json 
 +docker run -it --log-driver json-file --log-opt max-size=2m,max-file=5 alpine ash 
 +</code> 
 + 
 +De nombreuses options existent, la documentation officielle indique comment paramétrer la méthode de journalisation pour docker ou pour un conteneur [[ https://docs.docker.com/config/containers/logging/configure/ ]] 
 + 
 +==== Supprimer les logs ==== 
 + 
 +Les fichiers journaux sont stockés par docker dans un dossier dédié au conteneur. La commande %%docker container list%% affiche le début de l'ID de chaque conteneur. Cet ID est utilisé comme nom de dossier dans **/var/lib/docker/containers/** 
 + 
 +<code bash> 
 +# Recherche et affiche les fichiers de logs associés aux conteneurs 
 +sudo find /var/lib/docker/containers/ -type f -iname \*.log -exec ls -lh {} \; 
 +</code> 
 + 
 + 
 +===== Références ===== 
 + 
 +  * Notes prises lors de l' atelier docker, animé par Adrien Blind lors du Capitole du Libre 2014 
 +  * https://xataz.developpez.com/tutoriels/utilisation-docker/
sysadmin/docker/start.1416150446.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)