Skip to content

Instantly share code, notes, and snippets.

@freuds
Last active January 13, 2021 16:38
Show Gist options
  • Save freuds/884252ef468f27acb9825d27e6d4364e to your computer and use it in GitHub Desktop.
Save freuds/884252ef468f27acb9825d27e6d4364e to your computer and use it in GitHub Desktop.

Commandes de Docker

Commandes de bases

run

La commande run permet d'instancier un container à partir d'une image. Executer une instruction dans un container :

docker run ubuntu:14.04 echo "hello world"

Affiche : hello world

Utiliser un port aléatoire pour la redirection :

docker run -P webdown404/lamp

Configurer la redirection de port entre le container et la machine hote :

docker run -p 8080:80 webdown404/lamp

Note : ici le port 80 correspond au port du container, le port 8080 correspond au port de la machine hote.

Certaine applications dans un container tournent en tache de fond, hors le container fini de s'executer quand il n'y a plus d'application au premier plan. Pour résoudre ce problème, il suffit d'éxécuter le container en tant que service (deamon).

Pour exécuter un container en tant que service, il faut utiliser l'option -d :

docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

Ici le container affiche toutes les secondes "hello world" dans la sortie standard du container

Pour installer une application dans un conteneur il faut :

  • soit exécuter l'installation directement (rapide mais limité)
  • soit exécuter l'installation via un pseudo tty interactif

Installer une application directement :

docker run ubuntu:14.04 apt-get install -y ping

Note : -y permet d'éxécuter l'installation en mode noninteractive. Quand l'installation est complexe, il faut utiliser la console interactive (docker run ubuntu:14.04

Installer une application via un pseudo tty interactif:

docker run -t -i ubuntu:14.04 /bin/bash

Puis dans l'invite de commande :

sudo apt-get install ping

###exec La commande exec permet d'executer une commande dans un container en cours d'execution :

docker exec 32a6485f apt-get install ping

###images Pour afficher la liste des images présentes en local :

docker images

###ps Pour récupérer les informations d'un container en cours d'execution :

docker ps

Note : liste des options :

  • -l permet de récupérer les informations du dernier container démarré
  • -a permet de récuperer les informations des container stoppés

###logs Afficher la sortie standard d'un deamon en cours d'execution :

docker logs sharp_lalande

Notes : ici "sharp_lalande" est le nom du container deamon. l'option -f permet d'afficher les retours de la ligne de commande en temps réel (à la manière d'un tail -f).

###stop Pour arreter un container en cours d'execution :

docker stop sharp_lalande

Note : ici "sharp_lalande" est le nom du container deamon

###start Pour redémarrer un container arreté :

docker start sharp_lalande

Note : ici "sharp_lalande" est le nom du container deamon

###rm Pour supprimer un container :

docker rm 474877c42e3f

Notes : Il faut noter plusieurs choses :

  • "474877c42e3f" correspond à l'ID du container que l'on souhaite supprimer
  • Il est possible de supprimer tous les container avec la commande docker rm $(docker ps -a -q)

###rmi Pour supprimer une image :

Pour supprimer une image webdown404/ping:google

Note : Pour supprimer toutes les images <none> : docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

###commit Prenons une image ubuntu de base à laquelle on ajoute le paquet "ping" :

docker run ubuntu:14.04 apt-get install ping

Si on souhaite sauvegarder cette image d'ubuntu avec le paquet "ping", il faut récupérer l'ID du nouvel container :

docker ps -l

Affiche l'ID "6982a9948422..."

et commit ce container :

docker commit 6982a9948422 webdown404/ping

Notes :

  • -m permet d'ajouter un message au commit : docker commit -m "mon premier commit" 6982a9948422 webdown404/ping
  • -a permet de rajouter l'auteur d'un commit : docker commit -a "Quentin BABAULT" 6982a9948422 webdown404/ping

Imaginons que nous souhaitons modifier webdown404/ping en pigant directement "www.google.com" :

docker run webdown404/ping ping www.google.com
docker ps -l

Affiche l'ID "45af55fffzf..."

Une image est en lecture seule, donc si l'on souhaite apporter des modifications à notre image, il faut ajouter un tag (ici le tag "google):

docker commit 45af55fffzf webdown404/ping:google

###inspect Afficher les informations d'un container sous la forme d'un tableau json :

docker inspect efefdc74a1d

Note : ici "efefdc74a1d" correspond à l'ID : "efefdc74a1d5900d7d7a74740e5261c09f5f42b6dae58ded6a1fde1cde7f4ac5" récupéré avec la commande ps

###login Ajouter ses identifiants du DHR via la ligne de commandes :

docker login

###search Rechercher un container sur le Docker Hub Registry (ici on recherche "lamp") :

docker search lamp

###pull Pull un container depuis le Docker Hub Registry (ici le container : "learn/tutorial") :

docker pull webdown404/lamp

###push Push un container dans le Docker Hub Registry

docker push webdown404/lamp

Note : Il faut avoir commit pour pouvoir push une image

###build Il est également possible de construire une image à partir d'un Dockerfile :

docker build -t Webdown404/ping:facebook .

Notes : Plusieurs choses à noter :

  • Le . permet de rechercher le Dockerfile dans le répertoire courant
  • Il existe un memento sur la réalisation d'un Dockerfile

##Communication entre containers Pour pouvoir faire communiquer deux containers entre eux il existe deux possibilités :

  • lier les containers via les ports réseaux
  • lier les containers via une variable d'environnement (l'option --link)

L'option --link est généralement la meilleure solution. Elle s'utilise de la manière suivante :

docker run -d --name db training/postgres
docker run -d -P --name web --link db:db training/webapp python app.py

Notes : Plusieurs choses à noter :

  • il est également possible d'utiliser l'ID à la place du nom
  • ex de variable d'environement a montrer ...

##Monter un répertoire hote dans un container Pour monter un repertoire hote dans un container, il faut utiliser l'option -v :

docker run -P -v /Users/webdown/www/sandbox/:/www python python /www/app.py

Notes : Il faut noter plusieurs choses :

  • /Users/webdown/www/sandbox correspond au chemin absolu de la machine hôte qui ici n'est pas le mac mais Boot2Docker. Virtualbox partage par défaut le dossier "/Users" du Mac en le montant dans le dossier "/Users" de Boot2Docker.
  • :/www correspond a l'emplacement dans lequel sera monté le dossier partagé dans le container
  • Il est également possible de limiter l'acces à un dossier en lecture seule en rajoutant :ro : /Users/webdown/www/sandbox/:/www:ro

##Container de données Si on souhaite persister des données utilisables entre les différents containers, la meilleure solution est d'utiliser un container de données. Pour créer un container de données :

docker create -v /dbdata --name dbdata training/postgres /bin/true

Pour monter le volume /dbdata du container de données dans plusieurs autres containers :

docker run -d --volumes-from dbdata --name db1 training/postgres
docker run -d --volumes-from dbdata --name db2 training/postgres

Note : si on souhaite supprimer un container de données, il faut utiliser l'option -v sinon on risque de se retouver avec des volumes fantomes (Dangling volumes)

Un avantage d'utiliser un container de données est pouvoir faire facilement des backup/restaurations de données. Pour réaliser un backup :

docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

Pour créer un nouveau container de données et y restaurer les données du container de données précédent :

docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

##Autres commandes Afficher la version de docker :

docker version

Initialiser Boot2Docker :

boot2docker init

Démarrer Boot2Docker :

boot2docker start

Stopper Boot2Docker :

boot2docker stop

Mettre à jour Boot2Docker :

boot2docker upgrade

Note : il faut stopper Boot2Docker avant de le mettre à jour

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment