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 [2020/11/27 16:33] – Reprise notes et ajout référence yoann | sysadmin:docker:start [2021/07/28 12:06] (Version actuelle) – 92.154.112.189 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| {{tag> | {{tag> | ||
| - | ====== | + | ====== |
| - | Docker permet la création d'un environnement d’exécution isolé (appelé conteneur ou container) pour une application, | + | Docker permet la création d'un environnement d’exécution isolé (appelé conteneur ou container) pour une application, |
| ===== Notions ===== | ===== Notions ===== | ||
| - | Docker | + | Docker s' |
| + | |||
| + | Les conteneurs ne sont pas cross-plateforme: | ||
| + | |||
| + | Le Docker hub: Dépôt externe sur lequel les utilisateurs/ | ||
| + | |||
| + | Docker fonctionne en client/ | ||
| Ligne 15: | Ligne 21: | ||
| + | ==== Cas d' | ||
| + | * Faciliter le déploiement: | ||
| + | * Faciliter le développement: | ||
| + | * Faciliter l' | ||
| - | conteneur 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 32: | Ligne 72: | ||
| </ | </ | ||
| - | Un conteneur est une instance d'une image. | ||
| - | ===== gérer les images ===== | + | ===== Gestion des images |
| - | Rechercher | + | ==== Rechercher |
| + | Rechercher une image en ligne via le navigateur https:// | ||
| + | |||
| + | Depuis la ligne de commande: | ||
| < | < | ||
| - | 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> | ||
| - | Pour récupèrer | + | 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 |
| </ | </ | ||
| + | |||
| + | < | ||
| + | Lorsqu' | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Si aucun tag n'est spécifié, le tag lastest est utilisé. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Lister ==== | ||
| Lister les images disponibles localement: | Lister les images disponibles localement: | ||
| < | < | ||
| + | # é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> | <code bash> | ||
| - | $ docker ps | + | 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 | ||
| + | </ | ||
| + | |||
| + | 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 | ||
| </ | </ | ||
| Ligne 74: | Ligne 226: | ||
| </ | </ | ||
| - | une instance (container est créée) | + | ==== logs d'un conteneur ==== |
| - | # liste tous les conteneurs même si les taches sont terminées | + | toutes |
| <code bash> | <code bash> | ||
| - | docker | + | docker |
| </ | </ | ||
| - | # Supprimer l'instance (le conteur) | + | Pour n'afficher que les dernières sorties produites par le conteneur, utiliser l' |
| <code bash> | <code bash> | ||
| - | docker rm busybox | + | docker |
| + | </ | ||
| + | |||
| + | Pour suivre les sorties produites par un conteneur en temps réel, on peut utiliser l' | ||
| + | |||
| + | <code bash> | ||
| + | docker container logs --follow label_conteneur | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Supprimer un conteneur ==== | ||
| + | |||
| + | <code bash> | ||
| + | docker container | ||
| </ | </ | ||
| - | ou busybox est le container ID. | ||
| conteneur enveloppe, environnement pour exécuter un programme. | conteneur enveloppe, environnement pour exécuter un programme. | ||
| Ligne 126: | Ligne 290: | ||
| sudo docker build -tag toto/ | sudo docker build -tag toto/ | ||
| - | ===== relations | + | ===== Relations |
| Variables d' | Variables d' | ||
| Ligne 138: | Ligne 302: | ||
| 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 ===== | ===== Références ===== | ||