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/lampConfigurer la redirection de port entre le container et la machine hote :
docker run -p 8080:80 webdown404/lampNote : 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 pingNote :
-ypermet 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/bashPuis dans l'invite de commande :
sudo apt-get install pingLa commande exec permet d'executer une commande dans un container en cours d'execution :
docker exec 32a6485f apt-get install pingPour afficher la liste des images présentes en local :
docker imagesPour récupérer les informations d'un container en cours d'execution :
docker psNote : liste des options :
-lpermet de récupérer les informations du dernier container démarré-apermet de récuperer les informations des container stoppés
Afficher la sortie standard d'un deamon en cours d'execution :
docker logs sharp_lalandeNotes : ici "sharp_lalande" est le nom du container deamon. l'option
-fpermet d'afficher les retours de la ligne de commande en temps réel (à la manière d'untail -f).
Pour arreter un container en cours d'execution :
docker stop sharp_lalandeNote : ici "sharp_lalande" est le nom du container deamon
Pour redémarrer un container arreté :
docker start sharp_lalandeNote : ici "sharp_lalande" est le nom du container deamon
Pour supprimer un container :
docker rm 474877c42e3fNotes : 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)
Pour supprimer une image :
Pour supprimer une image webdown404/ping:googleNote : Pour supprimer toutes les images
<none>:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Prenons une image ubuntu de base à laquelle on ajoute le paquet "ping" :
docker run ubuntu:14.04 apt-get install pingSi on souhaite sauvegarder cette image d'ubuntu avec le paquet "ping", il faut récupérer l'ID du nouvel container :
docker ps -lAffiche l'ID "6982a9948422..."
et commit ce container :
docker commit 6982a9948422 webdown404/pingNotes :
-mpermet d'ajouter un message au commit :docker commit -m "mon premier commit" 6982a9948422 webdown404/ping-apermet 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.comdocker ps -lAffiche 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:googleAfficher les informations d'un container sous la forme d'un tableau json :
docker inspect efefdc74a1dNote : ici "efefdc74a1d" correspond à l'ID : "efefdc74a1d5900d7d7a74740e5261c09f5f42b6dae58ded6a1fde1cde7f4ac5" récupéré avec la commande
ps
Ajouter ses identifiants du DHR via la ligne de commandes :
docker loginRechercher un container sur le Docker Hub Registry (ici on recherche "lamp") :
docker search lampPull un container depuis le Docker Hub Registry (ici le container : "learn/tutorial") :
docker pull webdown404/lampPush un container dans le Docker Hub Registry
docker push webdown404/lampNote : Il faut avoir commit pour pouvoir push une image
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 leDockerfiledans le répertoire courant - Il existe un memento sur la réalisation d'un
Dockerfile
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.pyNotes : Plusieurs choses à noter :
- il est également possible d'utiliser l'ID à la place du nom
- ex de variable d'environement a montrer ...
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.pyNotes : Il faut noter plusieurs choses :
/Users/webdown/www/sandboxcorrespond 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.:/wwwcorrespond 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
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/truePour 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/postgresNote : si on souhaite supprimer un container de données, il faut utiliser l'option
-vsinon 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 /dbdataPour 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.tarAfficher la version de docker :
docker versionInitialiser Boot2Docker :
boot2docker initDémarrer Boot2Docker :
boot2docker startStopper Boot2Docker :
boot2docker stopMettre à jour Boot2Docker :
boot2docker upgradeNote : il faut stopper Boot2Docker avant de le mettre à jour