Skip to content

Instantly share code, notes, and snippets.

@freuds
Last active November 18, 2022 20:37
Show Gist options
  • Save freuds/c7ac848203320ebe3961ceffe8aef7f0 to your computer and use it in GitHub Desktop.
Save freuds/c7ac848203320ebe3961ceffe8aef7f0 to your computer and use it in GitHub Desktop.
Commandes de Docker

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