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://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg && chmod a+r /etc/apt/keyrings/docker.gpg
echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update && apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-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/compose/releases/download/1.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Accordez ensuite les autorisations d'exécution :
chmod +x /usr/local/bin/docker-compose
Ensuite, vérifiez la version du package :
docker-compose --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: 'file_version'
networks: '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 /opt/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-compose up
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-compose up -d
Pour arrêter les conteneurs exécutés en arrière-plan, vous pouvez utiliser le docker-composer l'arrêt commander:
La 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:
- external_port:internal_port
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:
- /path/to/external/folder:/path/to/internal/folder
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 "You're the best!" > 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
environment:
- MYSQL_ROOT_PASSWORD=VeryStr0ngPassword
- MYSQL_DATABASE=database
- MYSQL_USER=user
- MYSQL_PASSWORD=AnotherPassw0rd
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 ainsi que 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:
networks:
serverspace-network:
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:latest
ports:
- "8099:80"
environment:
- PMA_HOST=docker-mysql
networks:
- serverspace-network
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-compose up -d
Ensuite, connectons-nous au conteneur avec Nginx:
docker-compose exec 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.