Toutes les quelques annĂ©es, un changement de paradigme se produit dans l'industrie du dĂ©veloppement logiciel. L'un de ces phĂ©nomĂšnes est l'intĂ©rĂȘt croissant pour le concept de microservices. Bien que les microservices ne soient pas la derniĂšre technologie, ce n'est que rĂ©cemment que sa popularitĂ© a littĂ©ralement explosĂ©.Les grands services monolithiques sont aujourd'hui remplacĂ©s par des microservices autonomes indĂ©pendants. Un microservice peut ĂȘtre considĂ©rĂ© comme une application qui sert un objectif unique et trĂšs spĂ©cifique. Par exemple, il peut s'agir d'un SGBD relationnel, d'une application Express, d'un service Solr. De nos jours, il est difficile d'imaginer le dĂ©veloppement d'un nouveau systĂšme logiciel sans l'utilisation de microservices. Et cette situation, Ă son tour, nous conduit Ă la plate-forme Docker.
Docker
La plate - forme Docker , dans le dĂ©veloppement et le dĂ©ploiement de microservices, est devenue une norme presque industrielle. Sur le site Web du projet, vous pouvez dĂ©couvrir que Docker est la seule plate-forme de conteneurisation indĂ©pendante qui permet aux organisations de crĂ©er sans effort des applications, ainsi que de les distribuer et de les exĂ©cuter dans n'importe quel environnement - des nuages ââhybrides aux systĂšmes frontaliers.Docker compose
La
technologie Docker Compose est conçue pour configurer des applications multi-conteneurs. Un projet Docker Compose peut inclure autant de conteneurs Docker que le créateur de ce projet en a besoin.Lorsque vous travaillez avec Docker Compose, un fichier YAML est utilisé pour configurer les services d'application et organiser leur interaction les uns avec les autres. Docker Compose est donc un outil pour décrire et exécuter des applications multi-conteneurs Docker.Deux conteneurs fonctionnant sur le systÚme hÎteGNU Make
Un programme make
est essentiellement un outil pour automatiser l'assemblage de programmes et de bibliothÚques à partir du code source. En général, nous pouvons dire qu'il est make
applicable à tout processus qui comprend l'exécution de commandes arbitraires pour convertir certains matériaux source en une certaine forme résultante, dans un certain but. Dans notre cas, les équipes docker-compose
seront converties en objectifs abstraits ( cibles bidon ).Afin de dire au programme make
ce que nous en attendons, nous avons besoin d'un fichier Makefile
.La nĂŽtre Makefile
contiendra les commandes habituelles docker
etdocker-compose
qui sont conçus pour rĂ©soudre de nombreux problĂšmes. Ă savoir, nous parlons d'assembler le conteneur, de le dĂ©marrer, de l'arrĂȘter, de le redĂ©marrer, d'organiser la connexion de l'utilisateur au conteneur, de travailler avec les journaux du conteneur et de rĂ©soudre d'autres problĂšmes similaires.Utilisations typiques de Docker Compose
Imaginez une application Web standard qui comprend les composants suivants:- Base de données TimescaleDB (Postgres).
- Application Express.js.
- Ping (juste un conteneur qui ne fait rien de spécial).
Cette application aura besoin de 3 conteneurs Docker et d'un fichier docker-compose
contenant des instructions pour gérer ces conteneurs. Chacun des conteneurs aura différents points d'interaction. Par exemple, timescale
vous pouvez travailler avec un conteneur de la mĂȘme maniĂšre que vous travaillez avec des bases de donnĂ©es. Ă savoir, il vous permet d'effectuer les actions suivantes:- Connectez-vous au shell Postgres.
- Importer et exporter des tableaux.
- Créez une
pg_dump
table ou une base de données.
Le conteneur d'une application Express.js ,, expressjs
peut avoir les fonctionnalités suivantes:- La sortie de nouvelles données du journal systÚme.
- Entrez dans le shell pour exécuter certaines commandes.
Interaction avec les conteneurs
AprÚs avoir configuré la connexion entre les conteneurs à l'aide de Docker Compose, il est temps d'établir une interaction avec ces conteneurs. Dans le cadre du systÚme Docker Compose, une commande docker-compose
prend en charge une option -f
qui vous permet de transférer un fichier sur le systÚme docker-compose.yml
.En utilisant les capacités de cette option, vous pouvez limiter l'interaction avec le systÚme uniquement aux conteneurs mentionnés dans le fichier docker-compose.yml
.Jetez un Ćil Ă l'apparence des interactions de conteneur lors de l'utilisation de commandes docker-compose
. Si nous imaginons que nous devons entrer dans le shell psql
, les commandes correspondantes peuvent ressembler Ă ceci:docker-compose -f docker-compose.yml exec timescale psql -Upostgres
La mĂȘme commande pour laquelle non docker-compose
, mais est utilisée docker
, peut ressembler Ă ceci:docker exec -it edp_timescale_1 psql -Upostgres
Veuillez noter que dans de tels cas, il est toujours préférable d'utiliser non pas une commande docker
, mais une commande docker-compose
, car cela élimine la nécessité de se souvenir des noms de conteneurs.Les deux commandes ci-dessus ne sont pas si compliquées. Mais si nous utilisions un «wrapper» sous une forme Makefile
qui nous donnerait une interface sous forme de commandes simples et appellerait nous-mĂȘmes de telles commandes, alors les mĂȘmes rĂ©sultats pourraient ĂȘtre obtenus comme ceci:make db-shell
Il est évident que l'utilisation Makefile
simplifie grandement le travail avec des conteneurs!Exemple de travail
Sur la base du diagramme de projet ci-dessus, créez 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 Docker Compose et interagir avec les conteneurs qu'elle décrit, créez 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=
vous permet de limiter la portée de la commande à un seul conteneur.Une fois Makefile
prĂȘt, vous pouvez l'utiliser comme ceci:make help
- émission d'une liste de toutes les commandes disponibles pour make
.
Aide sur les commandes disponiblesmake build
- assemblage de l'image Ă partir de Dockerfile
. Dans notre exemple, nous avons utilisé des images existantes timescale
et ping
. Mais api
nous voulons collecter l' image localement. C'est exactement ce qui sera fait aprÚs l'exécution de cette commande.
Ensemble conteneur Dockermake start
- lancement de tous les conteneurs. Pour démarrer un seul conteneur, vous pouvez utiliser la commande du formulaire make start c=timescale
.
Lancer le conteneur de l'échelle de tempsLancer le conteneur pingmake login-timescale
- entrée dans la session bash du conteneur timescale
.
Exécution de bash dans un conteneur d'échelle de tempsmake db-shell
- Connectez-vous psql
au conteneur timescale
pour exĂ©cuter des requĂȘtes SQL dans la base de donnĂ©es.
Exécution de psql dans le conteneur timescaledbmake stop
- arrĂȘt des conteneurs.
ArrĂȘt du conteneur de l'Ă©chelle de tempsmake down
- arrĂȘtez et retirez les conteneurs. Pour supprimer un conteneur spĂ©cifique, vous pouvez utiliser cette commande avec le conteneur spĂ©cifiĂ©. Par exemple - make down c=timescale
ou make down c=api
.
ArrĂȘtez et supprimez tous les conteneursSommaire
MalgrĂ© le fait que le systĂšme Docker Compose nous donne un ensemble complet de commandes conçues pour gĂ©rer les conteneurs, parfois ces commandes deviennent longues et, par consĂ©quent, elles peuvent ĂȘtre difficiles Ă retenir.La mĂ©thodologie d'utilisation Makefile
nous a permis d'établir une interaction rapide et facile avec les conteneurs du fichier docker-compose.yml
. Ă savoir, nous parlons de ce qui suit:- ,
docker-compose.yml
, . - , ,
make help
. - , . ,
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
make db-shell
. Makefile
, , . , .Makefile
, .
PS Sur notre marché, il y a une image Docker , qui est installée en un clic. Vous pouvez vérifier le fonctionnement des conteneurs sur VPS . Tous les nouveaux clients bénéficient de 3 jours gratuits pour les tests.Chers lecteurs! Comment automatisez-vous le travail avec Docker Compose?