Lors de la conférence FOSDEM 2020, le projet a été présenté

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.

Lors de la conférence FOSDEM 2020, le projet a été présenté

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 Docker, 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 Docker Compose 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.

Lors de la conférence FOSDEM 2020, le projet a été présenté
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 (Cibles fictives).

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_dump de 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 pour make.

Lors de la conférence FOSDEM 2020, le projet a été présenté
Aide sur les commandes disponibles

  • make build — construction de l'image Ă  partir de Dockerfile. Dans notre exemple, nous avons utilisĂ© des images existantes timescale et ping. Mais l'image api que nous voulons assembler localement. C'est prĂ©cisĂ©ment ce qui sera rĂ©alisĂ© aprĂšs l'exĂ©cution de cette commande.

Lors de la conférence FOSDEM 2020, le projet a été présenté
Assemblage d'un conteneur Docker

  • make start — dĂ©marrage de tous les conteneurs. Pour dĂ©marrer un seul conteneur, vous pouvez utiliser une commande comme make start c=timescale.

Lors de la conférence FOSDEM 2020, le projet a été présenté
Démarrage du conteneur timescale

Lors de la conférence FOSDEM 2020, le projet a été présenté
Démarrage du conteneur ping

  • make login-timescale — connexion Ă  la session bash du conteneur timescale.

Lors de la conférence FOSDEM 2020, le projet a été présenté
Démarrage de bash dans le conteneur timescale

  • make db-shell — connexion dans psql le conteneur timescale pour exĂ©cuter des requĂȘtes SQL sur la base de donnĂ©es.

Lors de la conférence FOSDEM 2020, le projet a été présenté
Démarrer psql dans le conteneur timescaledb

  • make stop — arrĂȘt des conteneurs.

Lors de la conférence FOSDEM 2020, le projet a été présenté
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=timescale ou make down c=api.

Lors de la conférence FOSDEM 2020, le projet a été présenté
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 help et 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 -Upostgres se transforme en make db-shell.
  • Le fichier Makefile peut, 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 sur le marketplace il y a une image Docker, qui s'installe en un clic. Vous pouvez vérifier le fonctionnement des conteneurs sur VPS. Tous les nouveaux clients se voient offrir 3 jours gratuits pour des tests.

Chers lecteurs ! Comment automatisez-vous le travail avec Docker Compose ?

Lors de la conférence FOSDEM 2020, le projet a été présenté

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster