13.09.2023

Docker pour les débutants

In un des articles précédents, nous avons exploré le processus de gestion d'un Docker conteneur à partir d’une image. DockerLe concept principal de s'articule autour du fait que chaque processus individuel dispose de son propre conteneur dédié avec l'environnement nécessaire adapté à ses besoins spécifiques. Cependant, lorsqu’il s’agit d’applications complexes, un défi se pose.
Considérons une application Web qui nécessite une base de données, un serveur Web et potentiellement un interpréteur PHP. Cela implique déjà la gestion de trois conteneurs distincts, et il devient peu pratique de les configurer et de les exécuter manuellement individuellement. Pour résoudre ce problème, le "docker-compose" a été introduit. Il permet la gestion des groupes de conteneurs, facilitant leur création, configuration, suppression avec une seule commande. Ce tutoriel vise à présenter Docker aux débutants, en se concentrant sur l'utilisation pratique de docker-composer.

Docker-composer la configuration

Tout d'abord, vous devez installer l'ensemble de packages « de base » :

apt-get update && apt-get install -y ca-certificates curl gnupg && sudo install -m 0755 -d /etc/apt/keyrings && curl -fsSL https://télécharger.docker.com /linux/ubuntu/gpg | sudo gpg --dearmou -o /etc/apt/keyrings/docker.gpg && chmod a+r /etc/apt/keyrings/docker.gpg

echo \ "deb [arch="$(dpkg --print-architecture)" signé par=/etc/apt/keyrings/docker.gpg] https://télécharger.docker.com /linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get mise à jour && apt-get installation docker-ce docker-ce-cli conteneurd.io docker-buildx-plugin docker-composer-plugin -y

La suite du processus est très simple, il suffit de télécharger le fichier précompilé :

curl -L "https: //github.com /docker/composer/versions/télécharger/1.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composer

Accordez ensuite les autorisations d'exécution :

chmod +x /usr/local/bin/docker-composer

Ensuite, vérifiez la version du package :

docker-composer --version

Créer un projet

Si vous avez travaillé ou vu des projets utilisant Docker, vous avez peut-être remarqué qu'il existe un docker-compose dans le dossier du projet.yaml". C'est dans ce fichier que sont configurés les conteneurs qui doivent être créés pour votre projet. Ils seront automatiquement créés à l'aide de docker-composer. Le fichier utilise la syntaxe YAML et doit contenir les données suivantes :

version : 'version_fichier'
réseaux : 'used_networks'
volumes : 'used_storages'
services : 'used_containers'

La version indique la version de syntaxe du fichier, différentes versions ont différents mots-clés disponibles, ce qui est fait pour une compatibilité ascendante. Nous utiliserons la version 3.5. Ensuite, nous devons lister les volumes, les réseaux et les conteneurs eux-mêmes.
La syntaxe YAML est similaire à JSON, il existe des paires clé-valeur séparées par des deux-points, mais ici la valeur peut être complètement vide, peut contenir d'autres clés, et il peut également s'agir d'un tableau de valeurs, auquel cas chaque élément du tableau commence par un tiret "-". Mais contrairement à JSON, l'indentation est ici très importante pour montrer l'imbrication des valeurs, alors ne les manquez pas.
Créons un dossier appelé 'serverspace-docker' et créez un fichier appelé 'docker-compose.yaml' à l'intérieur :

mkdir /opt/serverspace-docker && nano /opter/docker-compose.yaml

Et mettez ce code à l'intérieur :

version : '3.5'
services: docker-nginx: image: nginx

Il suffit d'exécuter le conteneur.

Exécution de conteneurs

Pour démarrer un groupe de conteneurs configurés dans docker-compose.yaml, vous devez accéder au dossier où se trouve ce fichier de configuration et exécuter la commande docker-composer là. Par exemple:

cd / opt /serverspace-docker/
docker-composer

Après cela, les conteneurs seront lancés, leurs flux de sortie seront fusionnés en un seul et vous verrez des informations dans le terminal. Pour arrêter les conteneurs, appuyez simplement sur Ctrl+C. Si vous souhaitez exécuter les conteneurs en arrière-plan, utilisez le -d option:

docker-composer -d

Pour arrêter les conteneurs exécutés en arrière-plan, vous pouvez utiliser le docker-composer l'arrêt commander:

Le docker-composer La commande arrête non seulement tous les conteneurs en cours d'exécution, mais les supprime également :

Expédition de ports à conteneurs

Le conteneur fonctionne, mais il nous est peu utile pour le moment. Avec Docker, nous pouvons transférer le port 80 du conteneur vers le système d'exploitation hôte et y accéder. Pour ce faire, utilisez le 'ports"directive. La syntaxe est la suivante :

ports :
- port_externe : port_interne

Alors, transférons le port 80 vers 8098

En conséquence, nous pouvons ouvrir nginx sur le port 'externe' :

Dossiers de montage

Pour monter un stockage externe ou des dossiers hôtes sur le conteneur, la section « volumes » est utilisée. La syntaxe est très similaire à celle utilisée avec les ports :

volumes:
- /chemin/vers/externe/dossier:/chemin/vers/interne/dossier

Créons un fichier appelé "index.html" dans le dossier du projet actuel et montons ce dossier à la place du "/usr/share/ du conteneurnginx/html/" dossier :

echo "Tu es le meilleur !" > index.html

Et ajoutez la directive de montage de dossier au docker-composer le fichier :

Après avoir redémarré le conteneur, vous verrez votre propre page dans le navigateur.

Configuration des volumes

Nous pouvons monter non seulement des dossiers externes mais aussi des volumes créés dans Docker au conteneur. Pour ce faire, vous devez d'abord ajouter le volume à la section principale "volumes". Par exemple, "serverspace-vl". La plupart des applications Web nécessitent une base de données, telle que MySQL. Ajoutons un autre conteneur pour cette base de données et ajoutons-y notre volume. Le volume est ajouté de la même manière qu'un dossier externe, sauf qu'au lieu d'un dossier, le nom du volume est spécifié. Ajoutons MySQL à notre configuration :

docker-mysql:
image: mysql
volumes:
- serverspace-vl:/var/lib/mysql
environnement:
- MYSQL_ROOT_PASSWORD=VeryStr0ngMot de passe
- MYSQL_DATABASE=base de données
- MYSQL_USER=utilisateur
- MYSQL_PASSWORD=Un autre mot de passe0rd

Ici, nous avons également ajouté la section « environnement » où nous définissons les variables d'environnement pour le conteneur. Ils sont nécessaires pour spécifier le nom de la base de données par défaut et le mot de passe root.

 

Configuration des réseaux

Les conteneurs doivent communiquer entre eux. Nous avons déjà Nginx et les MySQL, et ils n'ont pas encore besoin de communiquer entre eux. Mais une fois que nous aurons un conteneur pour PhpMyAdmin, qui doit accéder à MariaDB, la situation changera. Les réseaux virtuels sont utilisés pour la communication entre les conteneurs et peuvent être ajoutés de la même manière aux volumes. Tout d'abord, ajoutez le réseau au principal "réseaux" section:

réseaux:
serverspace-réseau:

Ensuite, ajoutez ce réseau pour chaque conteneur nécessitant un accès « extérieur ». Par la suite, les conteneurs seront disponibles sur le réseau sous leur nom. Par exemple, ajoutons PhpMyAdmin et donnons-lui accès à la base de données :

docker-phpmyadmin :
image : phpmyadmin/phpmyadmin:dernière
ports :
- "8099: 80"
environnement:
- PMA_HOST=docker-mysql
réseaux:
- serverspace-réseau

Ici, dans la variable PMA_HOST, on fait référence au "docker-mysql" hôte, qui est accessible grâce au réseau partagé entre ces conteneurs. De même, dans le "docker-mysql" conteneur, notre conteneur PhpMyAdmin est accessible en tant que "docker-phpmyadmin". Vous pouvez ouvrir l'adresse http://docker-server:8099 et authentifiez-vous pour vérifier si la base de données fonctionne.

Connexion à un conteneur

Avec docker-compose, vous pouvez vous connecter à n’importe quel conteneur du groupe. Utilisez simplement le exec commande. Par exemple, démarrez le projet en arrière-plan :

docker-composer -d

Ensuite, connectons-nous au conteneur avec Nginx:

docker-composer l'exécutable docker-nginx / bin / bash

Conclusions

Dans cet article, nous avons couvert l'utilisation de Docker pour les débutants. Nous avons également décrit comment utiliser quelques-uns docker conteneurs en tant que complexe, une unité. Le sujet est assez vaste et complexe, mais très intéressant. En déployant le projet sur une machine de cette manière, vous pouvez le déployer partout où vous en avez besoin en y copiant simplement la configuration. C'est pourquoi cette technologie a acquis une telle popularité auprès des développeurs et des DevOps.