Docker et l’utilisation de containers
Récemment, j’ai décidé d’apprendre à développer avec Symfony. Pour avoir un bon aperçu de son fonctionnement, j’ai décidé de suivre les étapes de « The Fast Track » – un tuto disponible sur le site de Symfony. Celui-ci utilise Docker pour la base de données et pour Redis. J’ai donc décidé d’en apprendre davantage sur le fonctionnement de Docker avant d’aller plus loin avec Symfony.
Qu’est-ce que Docker ?
Docker est un logiciel créé par Solomon Hykes et développé par Docker, Inc. Il permet de créer des environnements – appelés « containers » – permettant d’isoler des applications. Il est sorti en mars 2013 et continue d’évoluer en 2020. Docker est actuellement disponible pour Linux, Mac et Windows.
Sa licence, quant à elle, peut paraître moins claire. En 2013, il est sorti en tant que logiciel open-source sous Apache License 2.0. Depuis, son code source utilise toujours la même licence, mais certaines éditions peuvent intégrer des binaires qui ne le sont pas. Ainsi, les éditions communautaires disponibles sur Linux sont open-source, tandis que d’autres éditions communautaires (comme celles pour Mac et Windows) peuvent intégrer des composants qui ne le sont pas.
D’accord, mais… qu’est-ce qu’un « container » ?
Un « container », ou conteneur en français, est une enveloppe virtuelle qui regroupe tous les fichiers nécessaires à l’exécution d’une application. Le principe est proche des machines virtuelles que vous pouvez gérer avec Virtualbox tout en fonctionnant différemment.
Une machine virtuelle embarque un système d’exploitation et ses propres ressources. Elle isole l’ensemble de la machine hôte. Il faut donc lui attribuer des ressources comme du stockage ou de la RAM. En revanche, un conteneur s’appuie directement sur le système d’exploitation depuis lequel il est déployé (la machine hôte). Il n’embarque pas de système d’exploitation et il va partager les ressources de la machine hôte. Il va uniquement isoler les fichiers nécessaires à l’application qu’il doit exécuter.
Ainsi, Docker consomme moins de ressources qu’une machine virtuelle. Il est donc possible de lancer plusieurs conteneurs en même tant sans ralentir la machine hôte. Docker accélère également le déploiement d’une application tout en améliorant sa portabilité puisqu’un conteneur va regrouper tous les fichiers nécessaires à son exécution.
Comment gérer des containers avec Docker ?
N’ayant pas testé sur Windows ni Mac, ici je m’attarderai à l’utilisation de Docker sur Linux, et plus précisément Manjaro.
Installation et configuration de Docker
Docker est certainement disponible dans les dépôts de votre distribution Linux, vous pouvez donc utiliser votre gestionnaire de paquet pour l’installer. Sur Manjaro :
sudo pacman -S docker
Pour pouvoir l’utiliser, à la manière d’Apache, il faut démarrer le service. Pour cela :
sudo systemctl start docker
Si vous souhaitez arrêter le service :
sudo systemctl stop docker
Si vous souhaitez qu’il démarre au démarrage de votre machine :
sudo systemctl enable docker
Si vous souhaitez utiliser Docker sans sudo
, il faut ajouter votre utilisateur au groupe docker
puis redémarrer le service. En revanche, si vous le faîtes, sachez que cela peut poser des problèmes de sécurité.
Utiliser Docker : les commandes utiles
Pour vous familiariser avec Docker, vous pouvez suivre le tutoriel proposé sur leur site. Vous y trouverez ainsi les commandes de base aussi bien pour utiliser une image que pour en créer une. Pour un usage plus avancé, le site propose également une documentation. Ici, je vais me restreindre à l’utilisation de conteneurs. Si vous souhaitez créer une image, consultez plutôt la documentation ou le tutoriel.
Gérer les images
- Rechercher une image
Pour trouver une image, vous pouvez utiliser le site DockerHub. Il permet de rechercher des images par mots-clés, mais également en utilisant des filtres comme les catégories. Vous pourrez également filtrer les images en les limitant aux images officielles et aux éditeurs vérifiés, ce qui est utile pour limiter les risques. Vous pouvez également utiliser votre terminal grâce à la commande :
sudo docker search <mot-clé>
- Télécharger une image
sudo docker pull <image>
- Lister les images téléchargées
sudo docker images
Si vous vous demandez où se trouvent ces images, il faut se rendre (en root) dans le dossier /var/lib/docker/image/overlay2/
. Vous y trouverez d’ailleurs un fichier repositories.json
qui liste ces images.
Gérer les conteneurs
- Démarrer un nouveau conteneur
sudo docker run -d -p 80:80 <image>
Que fait cette commande ?
run
: permet de démarrer un nouveau conteneur-d
: indique de lancer le conteneur en arrière plan-p 80:80
: indique les ports à utiliser<image>
: indique le nom de l’image à utiliser
- Lister les conteneurs actifs
sudo docker ps
# ou :
sudo docker container ls
- Arrêter un conteneur (
<container-id>
peut être obtenu grâce à la commande précédente.)
sudo docker stop <container-id>
- Supprimer un conteneur après l’avoir arrêté
sudo docker rm <container-id>
- Démarrer un conteneur arrêté
sudo docker start <container-id>
- Redémarrer un conteneur
sudo docker restart <container-id>
Docker-compose pour une gestion facilité
Qu’est-ce que docker-compose ?
Docker-compose est un outil pour définir et lancer de multiples conteneurs Docker. Grâce à un fichier YAML, il est possible de définir les différents services dont nous avons besoin et, avec une seule commande, de créer les conteneurs. Ce fichier contiendra le nom de l’image et les différentes configurations associées. Par exemple, pour une base de données il sera possible de préciser le nom d’utilisateur, le mot de passe et le nom de la base.
Il est possible de faire la même chose en ligne de commande, mais vous devrez le faire pour chaque conteneur. Maintenant, imaginez que vous êtes plusieurs à travailler sur un projet et vous souhaitez que chaque collaborateur utilise les mêmes conteneurs avec les mêmes configurations. En les listant dans un fichier docker-compose.yml
vous pouvez facilement les partager.
Comment ça fonctionne ?
Pour commencer, il faut installer docker-compose
:
sudo pacman -S docker-compose
Ensuite, il suffit de créer un fichier docker-compose.yml
à la racine de votre projet. Vous pourrez par exemple y définir :
version: "3"
services:
database:
image: postgres:11-alpine
environment:
POSTGRES_USER: main
POSTGRES_PASSWORD: main
POSTGRES_DB: main
ports:
- 5432:5432
pgadmin:
restart: always
image: dockage/phppgadmin:latest
environment:
PHP_PG_ADMIN_SERVER_HOST: database
PHP_PG_ADMIN_SERVER_PORT: 5432
ports:
- 8080:80
redis:
image: redis:5-alpine
ports: [6379]
Cet exemple provient du tutoriel Symfony, j’y ai rajouté phppgadmin
pour l’interface d’administration de postgres
. Je précise, vu que j’ai laissé le numéro de version à 3 et qu’il est préférable d’utiliser la dernière version supportée (actuellement 3.8).
Maintenant, il ne reste plus qu’à démarrer ces 3 conteneurs (postgres
, phppgadmin
et redis
) :
docker-compose up -d
Que fait cette commande ?
up
: crée et démarre les conteneurs-d
: indique de lancer le conteneur en arrière plan
Docker + docker-compose : en résumé
Une fois les deux logiciels installés, il suffit de :
- démarrer le service Docker
- créer un fichier
docker-compose.yml
avec les conteneurs à démarrer - exécuter
docker-compose up -d
Vos conteneurs sont maintenant utilisables !
Dans cet article, je me suis limité à un usage basique de Docker. Il est par exemple possible de créer ses propres images. Les deux logiciels proposent également d’autres commandes que je n’ai pas citées ici.
0 commentaire
Laisser un commentaire