Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| sysadmin:docker:start [2014/11/16 14:31] – créée root | sysadmin:docker:start [2021/07/28 12:06] (Version actuelle) – 92.154.112.189 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== | + | {{tag> |
| - | docker jeune mais s' | + | |
| - | développer dans une logique de | + | |
| - | permet d' | + | |
| + | ====== Docker ====== | ||
| - | par defaut bulle fermée | + | Docker permet |
| - | la commande | + | |
| + | |||
| + | ===== Notions ===== | ||
| + | |||
| + | 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 deposer 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 | ||
| - | docker n'utilise | + | 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) | ||
| < | < | ||
| + | |||
| </ | </ | ||
| - | conteeur est une instance d'une image. | ||
| - | rechercher une image: | + | ===== Gestion des images |
| - | docker | + | |
| - | noms en 2 parties | + | ==== Rechercher ==== |
| - | image contoent | + | |
| - | recupere | + | Rechercher |
| - | docker | + | |
| - | lister les images disponibles localement | + | Depuis la ligne de commande: |
| + | < | ||
| + | docker search busybox | ||
| + | </ | ||
| - | %%docker | + | Pour limiter les résultats, un système de filtre est disponible: |
| + | <code bash> | ||
| + | docker | ||
| + | </ | ||
| + | Ici on ne veut que les 10 premiers résultats avec deux critères: plus de 3 étoiles et image officielle. | ||
| - | #lister les containers existant | + | Si l'on souhaite |
| - | docker | + | |
| - | #executer une image (créer un conteneur) | + | <code bash> |
| - | docker | + | wget -q https:// |
| + | </ | ||
| - | une instance (container est créée) | + | ==== Récupérer ==== |
| - | # liste tous les conteneurs meme si les taches sont | + | Pour récupérer une image, utiliser la commande " |
| + | < | ||
| + | docker pull busybox: | ||
| + | </ | ||
| + | < | ||
| + | Lorsqu' | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Si aucun tag n'est spécifié, le tag lastest est utilisé. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Lister ==== | ||
| + | |||
| + | Lister les images disponibles localement: | ||
| + | |||
| + | < | ||
| + | # équivalents | ||
| + | docker image list | ||
| + | docker image ls | ||
| + | docker images | ||
| + | </ | ||
| + | |||
| + | ==== Supprimer ==== | ||
| + | |||
| + | Supprimer une image stockée localement: | ||
| + | |||
| + | < | ||
| + | docker image rm label_image: | ||
| + | |||
| + | # équivalent | ||
| + | sudo docker rmi label_image: | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | On peut également désigner une image via l' | ||
| + | </ | ||
| + | |||
| + | === Suppression des images non utilisée ==== | ||
| + | |||
| + | Pour supprimer toutes les images non utilisées par les conteneurs existants: | ||
| + | <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 | ||
| + | </ | ||
| + | |||
| + | Pour lister l' | ||
| + | <code bash> | ||
| + | docker container ls -a | ||
| docker ps -a | docker ps -a | ||
| + | </ | ||
| - | # supprimer l' | + | On remarque que la commande retourne: |
| - | docker rm busybox | + | * Un ID pour le conteneur, |
| - | conteneur | + | * L' |
| + | * La commande exécutée, | ||
| + | * La date de création, | ||
| + | * L' | ||
| + | * Un nom unique | ||
| - | docker utilise des systeme de fichiers | + | ==== Relancer un conteneur ==== |
| - | 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 | + | Une fois le conteneur identifié, on peut relancer son exécution: |
| + | <code bash> | ||
| + | docker | ||
| + | </ | ||
| - | si je veux la partager | + | Le conteneur est exécuté mais contrairement a la commande "docker |
| - | docker et granularité? | + | <code bash> |
| - | un gros coteneur | + | docker |
| + | </ | ||
| + | |||
| + | 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 une image (créer un conteneur) | ||
| + | <code bash> | ||
| + | docker run -t -i --env="" | ||
| + | </ | ||
| + | |||
| + | ==== logs d'un conteneur ==== | ||
| + | |||
| + | toutes les sorties (stdout | ||
| + | |||
| + | <code bash> | ||
| + | docker container logs label_conteneur | ||
| + | </ | ||
| + | |||
| + | Pour n' | ||
| + | |||
| + | <code bash> | ||
| + | docker container logs --tail 10 label_conteneur | ||
| + | </ | ||
| + | |||
| + | 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 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 | ||
| + | |||
| + | La problématique de la data, elle évolue dans le conteneur. Le l' | ||
| - | La problematique de la data, elle evolue 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 | + | documentation de référence: |
| + | Exemple | ||
| < | < | ||
| - | #on decide de partir de la derniere ersion ubuntu | + | #on decide de partir de la dernière version Ubuntu |
| FROM ubuntu: | FROM ubuntu: | ||
| RUN apt-get install -y memcached | RUN apt-get install -y memcached | ||
| Ligne 82: | Ligne 284: | ||
| CMD ["/ | CMD ["/ | ||
| </ | </ | ||
| + | |||
| + | sur le site officiel, concept et vocabulaire de base dans la section référence, | ||
| + | |||
| + | Creer l' | ||
| + | sudo docker build -tag toto/ | ||
| + | |||
| + | ===== Relations de dépendance ===== | ||
| + | |||
| + | Variables d' | ||
| + | |||
| + | |||
| + | Remarque: sur le site la registry, on voit les image et les docker file qui permettent de construire l' | ||
| + | |||
| + | lorsque j' | ||
| + | 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 ' | ||
| + | </ | ||
| + | |||
| + | 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:// | ||