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 | ||
| sysadmin:docker:start [2017/11/23 13:15] – yoann | sysadmin:docker:start [2021/07/28 12:06] (Version actuelle) – 92.154.112.189 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| {{tag> | {{tag> | ||
| - | ====== | + | ====== |
| - | Notes prises lors de l' | + | 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 |
| - | + | ||
| - | docker jeune mais s'appuie | + | |
| - | développer dans une logique | + | |
| - | permet d'isoler des applications sans avoir a recreer une VM completes. | + | |
| - | par défaut bulle fermée | + | ===== Notions ===== |
| - | la commande expose permet aux conteneur | + | |
| + | Docker s' | ||
| + | |||
| + | Les conteneurs ne sont pas cross-plateforme: | ||
| + | |||
| + | Le Docker hub: Dépôt externe sur lequel les utilisateurs/ | ||
| + | |||
| + | Docker fonctionne en client/ | ||
| + | |||
| + | |||
| + | 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' | ||
| + | * Faciliter le déploiement: | ||
| + | * Faciliter le développement: | ||
| + | * Faciliter l' | ||
| - | 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 bash> | ||
| + | | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | docker: Got permission denied while trying to connect to the Docker daemon socket at unix:/// | ||
| + | See 'docker run --help' | ||
| + | </ | ||
| + | |||
| + | Pour que l' | ||
| + | <code bash> | ||
| + | usermod --append --groups docker username | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | docker version | ||
| + | |||
| + | # afficher les paramètres | ||
| + | docker info | ||
| + | </ | ||
| Créer des images et instancier des conteneurs | Créer des images et instancier des conteneurs | ||
| - | On ne peut pas utiliser directement l' | + | On ne peut pas utiliser directement l' |
| + | |||
| + | <code bash> | ||
| + | docker container inspect container_name | ||
| + | </ | ||
| avoir une image mise a dispo par docker (registry) | avoir une image mise a dispo par docker (registry) | ||
| Ligne 33: | Ligne 72: | ||
| </ | </ | ||
| - | conteneur est une instance d'une image. | ||
| - | ===== gérer les images ===== | + | ===== Gestion des images |
| + | |||
| + | ==== Rechercher ==== | ||
| + | |||
| + | Rechercher une image en ligne via le navigateur https:// | ||
| - | rechercher une image sur la registry: | + | Depuis |
| < | < | ||
| - | docker search | + | docker search |
| </ | </ | ||
| - | A propos de la nomenclature, | + | Pour limiter |
| + | <code bash> | ||
| + | docker search --filter=is-official=true --filter=stars=3 --limit 10 busybox | ||
| + | </code> | ||
| - | recupere | + | 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' | ||
| + | |||
| + | <code bash> | ||
| + | wget -q https:// | ||
| + | </ | ||
| + | |||
| + | ==== Récupérer ==== | ||
| + | |||
| + | Pour récupérer une image, utiliser la commande " | ||
| < | < | ||
| - | docker pull busybox | + | docker pull busybox:1.24-glibc |
| </ | </ | ||
| - | lister | + | < |
| + | Lorsqu' | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Si aucun tag n'est spécifié, le tag lastest est utilisé. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Lister ==== | ||
| + | |||
| + | Lister | ||
| < | < | ||
| + | # équivalents | ||
| + | docker image list | ||
| + | docker image ls | ||
| docker images | docker images | ||
| </ | </ | ||
| + | |||
| + | ==== Supprimer ==== | ||
| Supprimer une image stockée localement: | Supprimer une image stockée localement: | ||
| < | < | ||
| - | sudo docker rmi mon-image | + | docker image rm label_image: |
| + | |||
| + | # équivalent | ||
| + | sudo docker rmi label_image: | ||
| </ | </ | ||
| - | ===== Instanciation ===== | + | < |
| + | On peut également désigner une image via l' | ||
| + | </ | ||
| + | === Suppression des images non utilisée ==== | ||
| - | # | + | Pour supprimer toutes |
| + | <code bash> | ||
| + | docker image prune -a | ||
| + | </ | ||
| + | |||
| + | ===== Gestion des conteneurs ===== | ||
| + | |||
| + | Un conteneur peut être créé, exécuté, relancé, supprimer. | ||
| + | |||
| + | < | ||
| + | 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. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Exécuter un conteneur ==== | ||
| + | |||
| + | Dans sa forme la plus épurée, la commande **docker container run** permet de lancer l' | ||
| + | |||
| + | <code bash> | ||
| + | docker container run hello-world | ||
| + | </ | ||
| + | |||
| + | Si l' | ||
| + | |||
| + | 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 | docker ps | ||
| + | </ | ||
| - | #executer | + | Pour lister l' |
| + | <code bash> | ||
| + | docker container ls -a | ||
| + | docker ps -a | ||
| + | </ | ||
| + | |||
| + | On remarque que la commande retourne: | ||
| + | * Un ID pour le conteneur, | ||
| + | * L' | ||
| + | * La commande exécutée, | ||
| + | * La date de création, | ||
| + | * L' | ||
| + | * Un nom unique pour le conteneur (plus facile à retenir/ | ||
| + | |||
| + | ==== Relancer un conteneur ==== | ||
| + | |||
| + | Une fois le conteneur identifié, on peut relancer son exécution: | ||
| + | <code bash> | ||
| + | docker container start label_conteneur | ||
| + | </ | ||
| + | |||
| + | Le conteneur est exécuté mais contrairement a la commande " | ||
| + | |||
| + | <code bash> | ||
| + | docker container start --attach label_conteneur | ||
| + | </ | ||
| + | |||
| + | Relancer en arrière plan: | ||
| + | <code bash> | ||
| + | docker container restart label_conteneur | ||
| + | </ | ||
| + | |||
| + | ==== Lister les processus d'un conteneur ==== | ||
| + | |||
| + | Pour visualiser l' | ||
| + | <code bash> | ||
| + | docker container top container_name | ||
| + | </ | ||
| + | |||
| + | ==== Arrêter l’exécution d'un conteneur ==== | ||
| + | |||
| + | <code bash> | ||
| + | docker container stop label_conteneur | ||
| + | </ | ||
| + | |||
| + | # Instancier | ||
| + | <code bash> | ||
| docker run -t -i --env="" | docker run -t -i --env="" | ||
| + | </ | ||
| - | une instance (container est créée) | + | ==== logs d'un conteneur ==== |
| - | # liste tous les conteneurs meme si les taches sont | + | toutes |
| - | docker | + | <code bash> |
| + | docker | ||
| + | </ | ||
| - | # supprimer l'instance (le conteur) | + | Pour n'afficher que les dernières sorties produites par le conteneur, utiliser l' |
| - | docker rm busybox | + | |
| - | ou busybox est le container | + | <code bash> |
| - | conteneur enveloppe pour executer un programme. | + | docker |
| + | </ | ||
| - | docker utilise des systeme de fichiers | + | Pour suivre les sorties produites par un conteneur en temps réel, on peut utiliser l' |
| - | J'ai fait une image, j'ai fait une instance, je les modifiée, et je fais une nouvelle image qui integre les modif avec docker | + | <code bash> |
| + | docker | ||
| + | </ | ||
| - | si je veux la partager docker push, posse l' | ||
| - | docker et granularité? | + | ==== Supprimer |
| - | un gros coteneur application wordpress peut cotnenir beacoup de composants: base de données serveur web) | + | |
| - | La problématique de la data, elle evolue dans le conteneur. Le l' | + | <code bash> |
| + | docker container rm label_container | ||
| + | </ | ||
| + | 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' | ||
| + | |||
| + | |||
| + | ===== 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' | ||
| + | |||
| + | |||
| + | bien découper, maîtriser la granularité, | ||
| + | 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' | ||
| documentation de référence: | documentation de référence: | ||
| Ligne 113: | Ligne 290: | ||
| sudo docker build -tag toto/ | sudo docker build -tag toto/ | ||
| - | ===== relations | + | ===== Relations |
| Variables d' | Variables d' | ||
| Ligne 126: | Ligne 303: | ||
| créer un script qui tient compte | 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 ' | ||
| + | </ | ||
| + | |||
| + | 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, | ||
| + | </ | ||
| + | |||
| + | De nombreuses options existent, la documentation officielle indique comment paramétrer la méthode de journalisation pour docker ou pour un conteneur [[ https:// | ||
| + | |||
| + | ==== 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 **/ | ||
| + | |||
| + | <code bash> | ||
| + | # Recherche et affiche les fichiers de logs associés aux conteneurs | ||
| + | sudo find / | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Références ===== | ||
| + | |||
| + | * Notes prises lors de l' atelier docker, animé par Adrien Blind lors du Capitole du Libre 2014 | ||
| + | * https:// | ||