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 modenoninteractive
. 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'untail -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 leDockerfile
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