Accueil TechnologiesDocker Les meilleures commandes de Docker – Partie 1

Les meilleures commandes de Docker – Partie 1

par Jérémy PASTOURET

C’est parti pour le premier article très technique de l’année 2017. On va franchir ensemble un nouveau palier dans Docker.  Mais ne vous inquiétez pas, tout va très bien se passer. Si Docker ne vous dit strictement rien, ou si vous avez besoin de vous rafraîchir la mémoire, pas de problème. Je vous conseille de lire mon article Qu’est-ce que Docker, et comment ça fonctionne ?

Installation de Docker

Avant de commencer et pour éviter que vous soyez frustrés, je vous invite à installer Docker afin de tester les commandes que je vous propose de découvrir aujourd’hui.

Windows iconeWindows iconeApple iconeLinux icone
Docker pour Windows 10 Docker pour les Windows inférieur à Windows 10  Docker pour macOS Yosemite ou supérieur Documentation Docker Ubuntu

Voici les liens de téléchargement :

C’est une installation classique, je ne me fais pas de souci pour vous. Pour ceux qui sont sur Linux, vous avez l’habitude des documentations donc je ne m’en fais pas non plus.

Après l’avoir installé, lancez une console Docker. Pour ceux qui sont sur Linux ou Mac, c’est directement dans le terminal. Quant à ceux qui sont sur Windows, il faut lancer PowerShell ou la console Docker.

🛑 Pour utiliser Docker, vous devez être en root, ou en Admin pour Windows.

Maintenant, vous êtes prêts. Si vous avez des soucis, les commentaires sont là pour ça…

Je vous propose de commencer tout en douceur avec les commandes Docker, et j’augmenterai le niveau au fur et à mesure.

Les meilleures commandes de Docker

On commence par appréhender Docker en tapant tout simplement « docker » dans votre console.

docker

Le rendu est le suivant :

Usage: docker [OPTIONS] COMMAND [arg...]
docker [ --help | -v | --version ]

A self-sufficient runtime for containers.

Options:

--config=~/.docker Location of client config files
-D, --debug Enable debug mode
-H, --host=[] Daemon socket(s) to connect to
-h, --help Print usage
-l, --log-level=info Set the logging level
--tls Use TLS; implied by --tlsverify
--tlscacert=~/.docker/ca.pem Trust certs signed only by this CA
--tlscert=~/.docker/cert.pem Path to TLS certificate file
--tlskey=~/.docker/key.pem Path to TLS key file
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit

Commands:
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on a container, image or task
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry.
logout Log out from a Docker registry.
logs Fetch the logs of a container
network Manage Docker networks
node Manage Docker Swarm nodes
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
service Manage Docker services
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
swarm Manage Docker Swarm
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
volume Manage Docker volumes
wait Block until a container stops, then print its exit code

Je vous ai surligné les commandes que nous allons utiliser dans cet article, et dans les suivants. Celles-ci vous permettront de bien comprendre la base de Docker.

On va commencer par un petit TP, qui consiste à démarrer un conteneur qui se nomme Hello-world. Pour ceux qui ne connaissent pas Hello-world, il s’agit de la première étape quand un développeur commence à apprendre un nouveau langage.

Bref, commençons par utiliser la commande suivante :

docker images

Cette fonction nous permet d’afficher la liste des images installées dans notre Docker. Si c’est la première fois que vous utilisez Docker, vous devriez obtenir ce résultat :

Maintenant, nous allons remplir notre liste d’images en téléchargeant un premier système. Pour cela, je vous conseille d’aller faire un tour dans le hub Docker pour vous rendre compte des possibilités. Voici le lien : Docker Hub.

C’est un peu comme un Play Store ou l’Apple Store. Vous y trouverez une liste d’images disponibles, leur note et le nombre de « pulls ». Vous devez certainement reconnaître certains logos, comme Ubuntu, MongoDB, MySql ou encore ElasticSearch. Tout ces systèmes, qui peuvent paraître longs à installer et à paramétrer, sont désormais simples à appeler. Prenons un exemple simple : le hello-world, fait pour ceux qui débutent. Si vous cliquez dessus, vous allez voir le détails et la description de ce que contient le repository (un stockage centralisé – sur le Docker Hub dans notre cas). Et à droite, on vous indique la commande pour télécharger l’image.

docker pull hello-world

Voici le résultat :

Docker vous dit qu’il va télécharger la version qui se nomme latest (la dernière postée par les développeurs). Ensuite, il vous spécifie qu’il a téléchargé l’image.

Si on lance un :

docker images

On voit apparaître notre jolie image :

On obtient plein d’informations en effectuant cette commande : on connaît le nom du repository, et le tag pour savoir sur quelle branche du projet nous sommes.

Pour ceux qui ne savent pas ce qu’est une branche, voici une petite explication. Quand on développe un projet correctement on utilise Git comme moyen « d’archivage de code« . Et très souvent on crée plusieurs branches pour un même projet. Cela permet de diviser le projet en plusieurs versions. Par exemple vous avez créé une version « dev », qui est la dernière version en cours de développement, mais qui contient probablement des bugs. On peut avoir la branche « release stable » qui est la version publiée et accessible au public, c’est à dire la version stable. On peut aussi avoir une branche anglaise, etc. Je pense que vous avez compris le concept.

Ensuite, on a l’image ID qui est très utile pour lancer un conteneur, la date de création pour se rappeler si ça fait longtemps qu’on l’a téléchargée, et la taille qui peut être importante si vous exportez votre image – pour différentes raisons – sur clé USB par exemple. Si la taille est énorme, cela risque d’être compliqué.

Maintenant, voici la question qui doit vous brûler les lèvres : comment lancer un conteneur ?

Comment lancer un conteneur ?

Et bien c’est très simple. Bien évidemment il s’agit du premier TP, on corsera les choses au fur et à mesure.

docker run hello-world

Avant de vous montrer le résultat, je vais vous expliquer ce que fait la commande.

Elle veut dire : « lance moi l’image qui se nomme hello-world« . Et si vous avez bien suivi, il y a une autre manière de faire. On peut l’appeler par son ID (moi je préfère, c’est plus sûr si on a plusieurs versions d’images).

docker run c54a2cc56cbb

Et voici le résultat de la commande :

Donc cela signifie que l’on a bien lancé l’image hello-world. Pour vérifier que le boulot a bien été fait, on va voir du côté des conteneurs. On lance la commande suivante :

docker ps -l

Cette commande va afficher la liste des conteneurs créés récemment sur votre machine. Pour avoir la liste complète, il faut faire un ps -a.

On voit que le conteneur 71a… a été créé 9 minutes plus tôt et qu’il est arrêté (voir le statut). Dernière information importante, il se nomme fervent_turing. Oui, Docker aime bien générer des noms sympas. Mais moi ça ne me plaît pas, alors je décide de changer son nom grâce à la commande suivante :

docker rename 71a mon_test

Puis j’effectue un ps – l pour voir le résultat.

On observe que le nom s’est transformé en mon_test (voir en bas à droite).

Maintenant qu’on a fini de se servir de hello-world et que vous avez tout compris, je vous propose de le supprimer.

Pour supprimer l’image, il suffit d’écrire la ligne suivante :

docker rmi hello-world

Et le résultat est sans équivoque :

Si vous comprenez l’anglais, vous avez dû voir que Docker n’accepte pas la suppression d’une image tant qu’un des conteneurs l’utilise encore.

Nous allons donc supprimer mon conteneur « mon_test ».

docker rm mon_test

Voici le résultat, rien de special.

On vérifie avec un

docker ps -a

On voit bien que je n’ai plus aucun conteneur…

On va pouvoir s’attaquer a l’image, en réitérant la même commande que précédemment.

docker rmi hello-world

Docker nous indique qu’il a bien supprimé l’image. Je vous laisserai faire un docker image pour vous en assurez.

C’est donc fini pour ce premier TP. Si vous avez des soucis, vous pouvez me contacter par mail, sur les réseaux sociaux, ou encore mieux les commentaires. Et n’hésitez pas à partager l’article à votre entourage 😉.

Dans le prochain article prévu prochainement, nous créerons un site WordPress fonctionnel, entièrement grâce à Docker, et avec peu de lignes de commande. Elle est pas belle la vie ? A bientôt pour de nouvelle aventures !

Photo : « Overlooking the Harbour », Chris Lawton.

Vous pourriez aussi aimer

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.