Docker est une plateforme qui permet de lancer des applications dans des conteneurs isolés afin de permettre leur exécution dans différents environnements.
Contrairement aux machines virtuelles, les applications qui roulent sous Docker utilisent le système d'exploitation de l'hôte, ce qui permet aux conteneurs Docker d'être légers.
Une image Docker est un fichier qui contient les instructions pour créer un conteneur.
L'image contient tout ce qu'il faut pour exécuter l'application : son code, ses configurations, ses dépendances, etc.
L'image est créée en couches. Elle peut être basée sur une image existante ou à partir de rien. Dans tous les cas, c'est le fichier Dockerfile qui dicte comment bâtir l'image.
Les images Docker sont souvent comparées aux snapshots d'une machine virtuelle.
Un conteneur Docker est une image en cours d'exécution.
Les volumes Docker sont un mécanisme qui permet de partager de l'information entre plusieurs conteneurs ou encore de faire persister des informations, par exemple une base de données.
Dockerfile est un fichier texte qui contient la liste des commandes requises pour créer une image. Plus précisément, c'est lui qui définit l'environnement dans lequel l'application tournera.
Parmi les configurations intéressantes, notons :
FROM php:8.0-apache
RUN apt-get update -y && apt-get install -y openssl zip unzip git
COPY .docker/vhost.conf /etc/apache2/sites-available/000-default.conf
Alors que le fichier Dockerfile est utilisé pour bâtir une image, le fichier docker-compose.yml est utilisé pour configurer les conteneurs. C'est dans ce fichier qu'on spécifiera notamment quelle image doit rouler dans chacun des conteneurs définis, par exemple celui du serveur HTTP et celui du serveur de bases de données.
Pour travailler avec le fichier docker-compose.yml, on utilisera docker-compose, un outil qui permet de configurer et d'exécuter un groupe de conteneurs.
Le fichier docker-compose.yml peut contenir les sections suivantes :
Voici une liste non-exhaustive de commandes utiles avec docker et docker-compose.
Commande | Utilité | Exemple |
---|---|---|
Affiche la liste des conteneurs Docker, c'est-à-dire les images en cours d'exécution. Utile notamment pour connaître le nom des conteneurs et leur identifiant. Avec docker ps, l'option -a permet de lister toutes les images, qu'elles soient présentement exécutées ou non. Avec docker ps, l'option -f permet de lister les conteneurs avec un statut particulier (ex : running, paused, exited). Utile notamment pour supprimer des conteneurs qui ne sont plus fonctionnels (dead). |
docker ps docker ps -a docker-compose ps Pour obtenir la liste des conteneurs morts puis les supprimer : docker ps -f status=dead |
|
docker-compose up |
Crée et démarre une série de conteneurs à partir du fichier docker-compose.yml. L'option -d permet de lancer le conteneur en mode détaché. Ceci permettra notamment de continuer à utiliser le terminal dans lequel les conteneurs ont été lancés. |
docker-compose up docker-compose up -d docker-compose up nom-service |
Crée un ou plusieurs conteneurs à partir d'images puis démarre ces conteneurs. docker run est l'équivalement de docker create suivi de docker start. docker-compose run est généralement utilisé pour lancer une tâche ad-hoc sur un conteneur. Permet d'utiliser des configurations différentes de celles précisées dans docker-compose.yml. |
docker run nom-service docker-compose run --service-ports nom-service docker-compose run nom-service bash |
|
Arrête le ou les conteneurs de façon douce en envoyant un signal SIGTERM (graceful shutdown). |
docker stop -t 60 nom-conteneur Pour arrêter tous les conteneurs : docker stop -t 60 $(docker ps -q) ou docker-compose stop |
|
Ctrl + C (Mac, Linux et Windows) |
Lorsque ces touches sont appuyées dans la fenêtre Terminal qui a servi à lancer les conteneurs, permet d'arrêter tous les conteneurs de façon douce à l'aide d'un signal SIGINT. |
|
docker-compose down |
Arrête et supprime les conteneurs. Les réseaux et images créés par docker-compose up seront également supprimés. Si l'option -v est utilisée, les volumes seront aussi supprimés. Le tout pourra être recréé et redémarré avec docker-compose up mais si l'option -v a été utilisée, les informations contenues dans ces volumes seront perdues. |
|
Arrête un ou plusieurs conteneurs de façon brutale à l'aide d'un signal SIGKILL. |
||
Supprime un ou plusieurs conteneurs. Avec docker rm, l'option -f permet de supprimer un conteneur pendant qu'il est démarré. Avec docker-compose rm, les conteneurs doivent être arrêtés. L'option -f permet de ne pas demander de confirmation avant de procéder. |
docker rm nom-conteneur docker-compose rm -f |
|
Liste les images Docker. La version docker-compose ne liste que les images en cours d'exécution. |
||
docker info |
Affiche les informations sur Docker, ses images et ses conteneurs. |
|
Donne accès à la ligne de commande d'un conteneur. Avec docker exec, l' option -it permet d'avoir une fenêtre terminal interactive, c'est-à-dire que l'usager pourra y écrire des commandes et en voir le résultat. |
docker exec -it nom-conteneur bash docker-compose exec --user nom-usager alias-conteneur bash -l |
|
docker inspect | Retrouve de l'information sur un conteneur. |
Pour obtenir le plus d'informations : docker-inspect nom-conteneur Pour obtenir l'adresse IP d'un conteneur : docker inspect -f \
Autre technique moins verbeuse pour obtenir l'adresse IP d,un conteneur : docker inspect nom-conteneur | grep "IPAddress" |
docker network ls |
Affiche les réseaux virtuels actifs. |
L'adresse IP du conteneur du serveur HTTP peut être obtenue à l'aide de la commande docker ps.
docker ps
monnom@MacBook-Pro-de-MonNom ~ %docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7211ef67331a sail-8.1/app "start-container" 17 hours ago Up 17 hours 0.0.0.0:80->80/tcp, 8000/tcp mon-conteneur
Entrer l'adresse IP 0.0.0.0 dans le navigateur pour accéder à l'application Web.
Les informations pour configurer un logiciel tel que MySQL Workbench dépendent de ce qui a été configuré dans docker-compose.yml.
Par exemple, avec ce fichier :
...
services:
...
mysql:
...
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
...
MYSQL_USER: 'monusager'
MYSQL_PASSWORD: 'monmotdepasse'
Il faut utiliser ces informations :
« Docker Cheatsheet ». Github -4loopltd. https://github.com/4loopltd/4loopltd/wiki/Docker-Cheatsheet
« Gracefully Stopping Docker Containers ». Lumen. https://www.ctl.io/developers/blog/post/gracefully-stopping-docker-containers/
« How to Get A Docker Container IP Address - Explained with Examples ». freeCodeCamp. https://www.freecodecamp.org/news/how-to-get-a-docker-container-ip-address-explained-with-examples/
▼Publicité