diff --git a/HowtoDocker.md b/HowtoDocker.md index 22305e6f..c773f4c8 100644 --- a/HowtoDocker.md +++ b/HowtoDocker.md @@ -3,19 +3,17 @@ title: Howto Docker categories: docker --- -Docker est une solution qui permet de créer, déployer et gérer en toute -simplicité des conteneurs Linux. -Elle combine plusieurs technologies pour rendre l'utilisation -des conteneurs accessible à tous. +Docker est une solution qui permet de créer, déployer et gérer des conteneurs +Linux. -Documentation : - -Docker-Compose : [HowtoDockerCompose]() +Documentation : # Docker Engine ## Installation +Il est conseillé d'utiliser le paquet docker-ce des dépôts du projet Docker : + ~~~ # apt install apt-transport-https # echo "deb http://download.docker.com/linux/debian stretch stable" > /etc/apt/sources.list.d/docker.list @@ -31,9 +29,16 @@ Docker-Compose : [HowtoDockerCompose]() > # apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D > # apt update > # apt install docker-engine -> # adduser docker > ~~~ +Sur sa machine de travail, il est utile d'ajouter son utilisateur dans le +groupe _docker_ pour pouvoir interagir avec le démon _dockerd_ sans passer root +à chaque fois : + +~~~ +# adduser $USER docker +~~~ + ### Configuration #### Changer le chemin de stockage @@ -75,123 +80,178 @@ Les fichiers seront créés, par défaut, dans le répertoire ## Utilisation de base -Une image Docker contient un OS avec un ou plusieurs services préconfigurés. +Une image Docker contient un système minimal avec un ou plusieurs services. Un conteneur quant à lui est une instance (créée à partir d'une image) -en cours d'execution. +en cours d'exécution. -### Lister les conteneurs et les images: +### Gérer les conteneurs + +#### Lister les conteneurs ~~~ -$ docker ps [options] +$ docker ps ~~~ -Voici quelques options utiles pour la commande `ps` +Options utiles : ~~~ --a : Lister tous les conteneurs --l : Lister les conteneurs récentralise --q : Lister uniquement les ID des conteneurs +-a : lister tous les conteneurs +-l : lister les conteneurs récemment lancés +-q : lister uniquement les ID des conteneurs ~~~ -### Démarrer un conteneur +#### Instancier un nouveau conteneur ~~~ -$ docker run [options] IMAGE [commande] +$ docker run [commande] ~~~ -Options courantes: +Options utiles : ~~~ ---name="nom" : Donner un nom au conteneur --p port_hôte:port_conteneur : Rendre un port accessible depuis l'hôte --d : Lancer le conteneur en mode 'détaché' --it : Lancer le conteneur en mode intéractif avec tty +--name="nom" : donner un nom au conteneur +-p port_hôte:port_conteneur : rendre un port accessible depuis l'hôte +-d : lancer le conteneur en mode 'détaché' +-it : lancer le conteneur en mode intéractif avec tty ~~~ -Pour plus d'options, consulter `$ man docker run` +#### Démarrer un conteneur existant -### Éteindre ou tuer un conteneur +Un conteneur existant est un conteneur précédemment instancié avec `docker +run`. ~~~ -$ docker stop|kill [options] CONTENEUR +$ docker start ~~~ -CONTENEUR correspond au nom ou à l'ID du conteneur. +#### Éteindre ou tuer un conteneur + +~~~ +$ docker stop|kill +~~~ Lorsque le conteneur n'est plus en fonction, il existe toujours et peut être -lister à l'aide de la commande `$ docker ps -a` +lister à l'aide de la commande `docker ps -a` -### Supprimer un conteneur ou une image +#### Supprimer un conteneur ~~~ -$ docker rm [options] CONTENEUR -ou -$ docker rmi [options] IMAGE +$ docker rm ~~~ -### Exécuter des commandes au sein d'un conteneur en marche +#### Exécuter des commandes dans un conteneur en fonction ~~~ -$ docker exec [options] CONTENEUR COMMANDE +$ docker exec ~~~ -Options courante: +Options utiles : ~~~ --it : Lancer la commande de manière intéractive dans un TTY. +-t : alloue un TTY +-i : attache stdin (mode interractif) ~~~ -### Visionner les logs d'un conteneur +On utilise habituellement la commande suivante pour obtenir un shell dans un conteneur en fonction : ~~~ -$ docker logs [options] CONTENEUR +$ docker exec -ti bash ~~~ -Option: +#### Visionner les journaux d'un conteneur + +Il s'agit en fait de la sortie standard et la sortie d'erreur du processus +lancé à l'intérieur du conteneur : ~~~ --f : Suivre les logs en direct +$ docker logs ~~~ -### Se connecter à un conteneur en marche - -S'il est nécessaire d'intéragir directement avec un process lancé dans un -conteneur, il faut utiliser la commande `attach`. -Dans le cas où l'on souhaite simplement visionner la sortie (logs) du conteneur, -il faut utiliser `logs`. -Pour lancer un terminal ou une commande supplémmentaire, utiliser `exec`. +Options utiles : ~~~ -docker attach [options] CONTENEUR +-f : suivre les logs en direct +-t : afficher un timestamp devant chaque ligne ~~~ -**ATTENTION!!!** +#### Afficher les informations d'un conteneur -Lorsque le conteneur est attaché, l'utilisation de *CTRL+C* termine le processus -en cours. La commande *CTRL+P+Q* doit être utilisé ou l'on doit ajouter l'option -`--sig-proxy=false` lors du lancement ou de l'attachement. +~~~ +$ docker inspect +~~~ +Cette commande s'applique généralement à n'importe quel objet Docker +(conteneur, image, service, réseau…) et donne une liste exhaustive des +attributs de l'objet, formaté en JSON. + +### Gérer les images + +#### Lister les images locales + +~~~ +$ docker image ls +~~~ + +#### Construire une image + +Pour construire ou mettre à jour une image : + +~~~ +$ docker build +~~~ + +Le répertoire doit contenir un fichier _Dockerfile_ décrivant l'image à +construire. + +Option utiles : + +~~~ +-t : ajoute un tag à l'image +~~~ + +#### Ajouter un tag à une image existante + +~~~ +$ docker tag +~~~ + +#### Pousser une image sur un dépôt distant + +~~~ +$ docker push +~~~ + +Avant de pousser une image, il est nécessaire de lui attribuer le bon _tag_ qui +doit contenir l'adresse du dépôt distant. + +Par exemple pour pousser l'image _foo-image_ sur le dépôt Docker _registry.example.net:5000_ : + +~~~ +$ docker tag foo-image registry.example.net:5000/foo-image +$ docker push registry.example.net:5000/foo-image +~~~ + +#### Récupérer une image d'un dépôt distant + +~~~ +$ docker pull +~~~ ### Astuces -Éteindre/Tuer/Supprimer tous les conteneurs: + +Éteindre/Tuer/Supprimer tous les conteneurs : ~~~ $ docker stop|kill|rm $(docker ps -aq) ~~~ -Supprimer toutes les images: +Supprimer toutes les images : ~~~ $ docker rmi $(docker images -q) ~~~ -Lancer un terminal bash dans un conteneur en marche: - -~~~ -$ docker exec -it CONTENEUR bash -~~~ - -Démarrer un conteneur avec un terminal bash: +Démarrer un conteneur avec un shell bash : ~~~ $ docker run -it IMAGE bash