Tous les quelques annĂ©es, l'industrie du dĂ©veloppement logiciel connaĂźt un changement de paradigme. L'un de ces phĂ©nomĂšnes peut ĂȘtre reconnu par l'augmentation de l'intĂ©rĂȘt pour le concept de microservices. Bien que les microservices ne soient pas une technologie nouvelle, leur popularitĂ© a littĂ©ralement explosĂ© ces derniĂšres annĂ©es.
De nos jours, de grands services monolithiques sont remplacĂ©s par des microservices autonomes et indĂ©pendants. Un microservice peut ĂȘtre considĂ©rĂ© comme une application qui sert un but unique et trĂšs spĂ©cifique. Par exemple, cela peut ĂȘtre une base de donnĂ©es relationnelle, une application Express, ou un service Solr.
De nos jours, il est difficile d'imaginer le développement d'un nouveau systÚme logiciel sans utiliser des microservices. Cette situation nous conduit à la plateforme Docker.
Docker
Plateforme , dans le domaine du dĂ©veloppement et du dĂ©ploiement de microservices, est devenue pratiquement un standard industriel. Sur le site du projet, on peut apprendre que Docker est la seule plateforme de conteneurisation autonome qui permet aux organisations de crĂ©er facilement n'importe quelle application, ainsi que de les distribuer et de les exĂ©cuter dans n'importe quel environnement â des nuages hybrides aux systĂšmes en pĂ©riphĂ©rie.
Docker Compose
Technologie destinĂ©e Ă la configuration d'applications multi-conteneurs. Dans un projet Docker Compose, autant de conteneurs Docker que nĂ©cessaire peuvent ĂȘtre inclus par le crĂ©ateur du projet.
Lorsqu'on travaille avec Docker Compose, un fichier YAML est utilisé pour configurer les services de l'application et organiser leur interaction. Docker Compose est donc un outil pour décrire et exécuter des applications Docker multi-conteneurs.

Deux conteneurs fonctionnant sur un systĂšme hĂŽte
GNU Make
Programme make, en essence, est un outil pour automatiser la construction de programmes et de bibliothÚques à partir du code source. En général, on peut dire que make s'applique à tout processus impliquant l'exécution de commandes arbitraires pour transformer certains matériaux d'entrée en un certain résultat, en un certain objectif. Dans notre cas, les commandes docker-compose seront transformées en objectifs abstraits ().
Pour indiquer Ă l'application make ce que nous voulons d'elle, nous aurons besoin d'un fichier Makefile.
Dans notre Makefile contiendra des commandes ordinaires. docker et docker-compose, qui sont destinĂ©es Ă rĂ©soudre de nombreuses tĂąches. En effet, il s'agit de l'assemblage du conteneur, de son dĂ©marrage, de son arrĂȘt, de son redĂ©marrage, de l'organisation de l'accĂšs de l'utilisateur au conteneur, de la gestion des journaux du conteneur et de la rĂ©solution d'autres tĂąches similaires.
Cas d'utilisation typiques de Docker Compose
Imaginons une application web standard, qui comporte les composants suivants :
- Base de données TimescaleDB (Postgres).
- Application Express.js.
- Ping (simple conteneur, ne faisant rien de particulier).
Cette application nĂ©cessitera 3 conteneurs Docker et un fichier docker-compose, contenant des instructions pour gĂ©rer ces conteneurs. Chacun des conteneurs aura des points d'interaction diffĂ©rents. Par exemple, avec le conteneur timescale , on pourra interagir de la mĂȘme maniĂšre qu'avec des bases de donnĂ©es. En effet, il permet d'effectuer les actions suivantes :
- AccĂšs au shell Postgres.
- Importation et exportation de tables.
- Création
pg_dumpde tables ou de bases de données.
Le conteneur de l'application Express.js, expressjs, peut avoir les fonctionnalités suivantes :
- Fourniture de données récentes à partir du journal systÚme.
- AccÚs au shell pour exécuter certaines commandes.
Interaction avec les conteneurs
AprÚs avoir configuré la connectivité entre les conteneurs à l'aide de Docker Compose, il est temps de mettre en place l'interaction avec ces conteneurs. Au sein du systÚme Docker Compose, il existe une commande docker-compose, qui prend en charge l'option -f, permettant de transmettre au systÚme un fichier docker-compose.yml.
En utilisant cette option, il est possible de restreindre l'interaction avec le systÚme uniquement aux conteneurs mentionnés dans le fichier. docker-compose.yml.
Regardons à quoi ressemblent les interactions avec les conteneurs lors de l'utilisation des commandes docker-compose. Si l'on suppose que nous devons accéder au shell psql, alors les commandes correspondantes peuvent ressembler à ceci :
docker-compose -f docker-compose.yml exec timescale psql -Upostgres La mĂȘme commande, quand elle est utilisĂ©e sans docker-compose, et docker, peut se formuler comme suit :
docker exec -it edp_timescale_1 psql -Upostgres Notez qu'il est toujours préférable d'utiliser la commande docker, plutÎt que la commande docker-compose, car cela permet d'éviter d'avoir à se souvenir des noms des conteneurs.
Les deux commandes ci-dessus ne sont pas si compliquĂ©es. Mais si nous avions utilisĂ© un « wrapper » sous forme de Makefile, qui nous donnerait une interface sous forme de commandes simples et invoquerait elle-mĂȘme de telles longues commandes, des rĂ©sultats similaires pourraient ĂȘtre obtenus comme suit :
make db-shell Il est tout à fait évident que l'utilisation de Makefile simplifie considérablement le travail avec les conteneurs !
Exemple de travail
Sur la base du schéma de projet examiné ci-dessus, nous créerons le fichier suivant docker-compose.yml:
version: '3.3'
services:
api:
build: .
image: mywebimage:0.0.1
ports:
- 8080:8080
volumes:
- /app/node_modules/
depends_on:
- timescale
command: npm run dev
networks:
- webappnetwork
timescale:
image: timescale/timescaledb-postgis:latest-pg11
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
volumes:
- ./create_schema.sql:/docker-entrypoint-initdb.d/create_schema.sql
networks:
- webappnetwork
ping:
image: willfarrell/ping
environment:
HOSTNAME: "localhost"
TIMEOUT: 300
networks:
webappnetwork:
driver: bridge Pour gérer la configuration de Docker Compose et pour interagir avec les conteneurs qu'elle décrit, créons le fichier suivant Makefile:
THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: help build up start down destroy stop restart logs logs-api ps login-timescale login-api db-shell
help:
make -pRrq -f $(THIS_FILE) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build:
docker-compose -f docker-compose.yml build $(c)
up:
docker-compose -f docker-compose.yml up -d $(c)
start:
docker-compose -f docker-compose.yml start $(c)
down:
docker-compose -f docker-compose.yml down $(c)
destroy:
docker-compose -f docker-compose.yml down -v $(c)
stop:
docker-compose -f docker-compose.yml stop $(c)
restart:
docker-compose -f docker-compose.yml stop $(c)
docker-compose -f docker-compose.yml up -d $(c)
logs:
docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
logs-api:
docker-compose -f docker-compose.yml logs --tail=100 -f api
ps:
docker-compose -f docker-compose.yml ps
login-timescale:
docker-compose -f docker-compose.yml exec timescale /bin/bash
login-api:
docker-compose -f docker-compose.yml exec api /bin/bash
db-shell:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres La plupart des commandes décrites ici s'appliquent à tous les conteneurs, mais l'utilisation de l'option c= permet de limiter la portée de la commande à un seul conteneur.
AprĂšs que Makefile soit prĂȘt, vous pouvez l'utiliser comme suit :
make helpâ liste de toutes les commandes disponibles pourmake.

Aide sur les commandes disponibles
make buildâ construction de l'image Ă partir deDockerfile. Dans notre exemple, nous avons utilisĂ© des images existantestimescaleetping. Mais l'imageapique nous voulons assembler localement. C'est prĂ©cisĂ©ment ce qui sera rĂ©alisĂ© aprĂšs l'exĂ©cution de cette commande.

Assemblage d'un conteneur Docker
make startâ dĂ©marrage de tous les conteneurs. Pour dĂ©marrer un seul conteneur, vous pouvez utiliser une commande commemake start c=timescale.

Démarrage du conteneur timescale

Démarrage du conteneur ping
make login-timescaleâ connexion Ă la session bash du conteneurtimescale.

Démarrage de bash dans le conteneur timescale
make db-shellâ connexion danspsqlle conteneurtimescalepour exĂ©cuter des requĂȘtes SQL sur la base de donnĂ©es.

Démarrer psql dans le conteneur timescaledb
make stopâ arrĂȘt des conteneurs.
![]()
ArrĂȘt du conteneur timescale
make downâ arrĂȘt et suppression des conteneurs. Pour supprimer un conteneur spĂ©cifique, cette commande peut ĂȘtre utilisĂ©e en indiquant le conteneur souhaitĂ©. Par exemple âmake down c=timescaleoumake down c=api.

ArrĂȘt et suppression de tous les conteneurs
Résultats
Bien que le systÚme Docker Compose nous donne un large ensemble de commandes destinées à gérer les conteneurs, parfois ces commandes deviennent longues, ce qui les rend difficiles à mémoriser.
La méthodologie d'utilisation Makefile nous a aidés à établir une interaction rapide et simple avec les conteneurs à partir du fichier docker-compose.yml. En d'autres termes, il s'agit de ce qui suit :
- Le développeur n'interagit qu'avec les conteneurs du projet, décrits dans
docker-compose.yml, le travail n'est pas gĂȘnĂ© par d'autres conteneurs en cours d'exĂ©cution. - Dans le cas oĂč une certaine commande est oubliĂ©e, vous pouvez exĂ©cuter la commande
make helpet obtenir de l'aide sur les commandes disponibles. - Il n'est pas nécessaire de mémoriser de longues listes d'arguments pour effectuer des actions telles que récupérer des entrées récentes du journal ou se connecter. Par exemple, une commande comme
docker-compose -f docker-compose.yml exec timescale psql -Upostgresse transforme enmake db-shell. - Le fichier
Makefilepeut, au fur et Ă mesure que le projet grandit, ĂȘtre flexible pour s'adapter Ă lui. Par exemple, il est facile d'ajouter une commande pour crĂ©er une sauvegarde de la base de donnĂ©es ou pour effectuer toute autre action. - Si une grande Ă©quipe de dĂ©veloppeurs utilise le mĂȘme
Makefile, cela organise le travail collaboratif et réduit le nombre d'erreurs.
P.S. Dans notre il y a une image , qui s'installe en un clic. Vous pouvez vérifier le fonctionnement des conteneurs sur . Tous les nouveaux clients se voient offrir 3 jours gratuits pour des tests.
Chers lecteurs ! Comment automatisez-vous le travail avec Docker Compose ?
Source : habr.com
