Docker Compose: Vereinfacht Är Aarbecht mat Makefiles

All puer Joer erlieft d'Softwareentwécklungsindustrie e Paradigmewiessel. Ee vun dëse Phänomener kann als de wuessenden Interessi am Konzept vu Mikroservicer unerkannt ginn. Och wann Mikroservicer net déi neisten Technologie sinn, ass just viru kuerzem seng Popularitéit wuertwiertlech eropgaang.

Grouss monolithesch Servicer ginn elo duerch onofhängeg, autonom Mikroservicer ersat. E Mikroservice kann als eng Applikatioun geduecht ginn déi een eenzegen a ganz spezifeschen Zweck déngt. Zum Beispill kann et eng relational DBMS sinn, eng Express Applikatioun, e Solr Service.

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles

Dës Deeg ass et schwéier Iech virzestellen en neie Softwaresystem z'entwéckelen ouni Mikroservicer ze benotzen. An dës Situatioun féiert eis op d'Docker Plattform.

Docker

Plattform Docker, an der Entwécklung an Ofbau vu Mikroservicer, ass bal en Industriestandard ginn. Op der Websäit vum Projet kënnt Dir erausfannen datt Docker déi eenzeg onofhängeg Containeriséierungsplattform ass, déi Organisatiounen erlaabt all Applikatioun ouni Ustrengung ze kreéieren, souwéi se an all Ëmfeld ze verdeelen a lafen - vun Hybridwolleken bis Randsystemer.

Docker Compose

Technologie Docker Compose entwéckelt fir Multi-Container Uwendungen ze konfiguréieren. En Docker Compose-Projet kann esou vill Docker-Container enthalen wéi de Créateur vum Projet brauch.

Wann Dir mat Docker Compose schafft, gëtt eng YAML Datei benotzt fir Applikatiounsservicer ze konfiguréieren an hir Interaktioun mateneen ze organiséieren. Docker Compose ass dofir en Tool fir Multi-Container Docker Uwendungen ze beschreiwen an ze lafen.

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles
Zwee Container déi op engem Hostsystem lafen

GNU Maacht

De Programm make, ass am Wesentlechen e Tool fir d'Gebai vu Programmer a Bibliothéiken aus dem Quellcode ze automatiséieren. Am Allgemengen kënne mir dat soen make gëllt fir all Prozess deen d'Ausféierung vun arbiträr Kommandoen involvéiert fir e puer Inputmaterialien an eng Ausgangsform fir en Zweck ze transforméieren. An eisem Fall sinn d'Befehle docker-compose wäert an abstrakt Ziler transforméiert ginn (Telefon Ziler).

Fir de Programm ze soen make iwwer wat mir wëllen aus et, mir brauchen e Fichier Makefile.

An eiser Makefile wäert regelméisseg Kommandoen enthalen docker и docker-compose, déi entwéckelt gi fir vill Problemer ze léisen. Mir schwätzen nämlech iwwer d'Zesummesetzung vun engem Container, iwwer en unzefänken, ze stoppen, en nei ze starten, iwwer d'Organisatioun vum Benotzer Login op de Container, iwwer d'Aarbecht mat Container Logbicher, an iwwer d'Léisung vun aner ähnlech Problemer.

Typesch Benotzungsfäll fir Docker Compose

Loosst eis eng regulär Webapplikatioun virstellen déi déi folgend Komponenten huet:

  • TimescaleDB Datebank (Postgres).
  • Express.js Applikatioun.
  • Ping (just e Container, mécht näischt Besonnesches).

Dës Applikatioun brauch 3 Docker Container an eng Datei docker-compose, déi Instruktioune fir d'Gestioun vun dëse Container enthält. All Container wäert verschidden Touchpoints hunn. Zum Beispill, mat engem Container timescale et wäert méiglech sinn ongeféier déiselwecht Manéier ze schaffen wéi se mat Datenbanken schaffen. Nämlech, et erlaabt Iech déi folgend Aktiounen auszeféieren:

  • Loggt Iech an der Postgres Shell.
  • Import an Export vun Dëscher.
  • Kreatioun pg_dump Dëscher oder Datenbanken.

Express.js Applikatioun Container, expressjs, kann déi folgend Fäegkeeten hunn:

  • Frësch Daten aus dem Systemprotokoll ubidden.
  • Login op d'Shell fir bestëmmte Kommandoen auszeféieren.

Interaktioun mat Container

Wann mir d'Kommunikatioun tëscht Container mat Docker Compose ageriicht hunn, ass et Zäit mat dëse Container ze kommunizéieren. Am Docker Compose System gëtt et e Kommando docker-compose, Ënnerstëtzung Optioun -f, wat Iech erlaabt eng Datei op de System ze transferéieren docker-compose.yml.

Mat de Fäegkeeten vun dëser Optioun kënnt Dir d'Interaktioun mam System nëmmen op déi Container limitéieren déi an der Datei ernimmt sinn docker-compose.yml.

Loosst eis kucken wéi Interaktioune mat Container ausgesinn wann Dir Kommandoen benotzt docker-compose. Wa mir eis virstellen datt mir an d'Schuel aloggen mussen psql, da kënnen déi entspriechend Kommandoen esou ausgesinn:

docker-compose -f docker-compose.yml exec timescale psql -Upostgres

Dee selwechte Kommando deen net benotzt gëtt fir auszeféieren docker-composean docker, kéint esou ausgesinn:

docker exec -it  edp_timescale_1 psql -Upostgres

Notéiert w.e.g. datt an esou Fäll et ëmmer léiwer ass de Kommando ze benotzen docker, an de Kommando docker-compose, well dëst eliminéiert d'Noutwendegkeet fir Containernimm ze erënneren.

Béid vun den uewe genannte Kommandoen sinn net sou schwéier. Awer wa mir e "Wrapper" an der Form benotzt hunn Makefile, déi eis en Interface a Form vun einfache Kommandoen géif ginn a selwer ähnlech laang Kommandoen nennen, da kéinten déiselwecht Resultater esou erreecht ginn:

make db-shell

Et ass ganz kloer datt d'Benotzung Makefile mécht d'Aarbecht mat Container vill méi einfach!

Aarbecht Beispill

Baséierend op dem uewe genannte Projetdiagramm erstellen mir déi folgend Datei 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

Fir d'Docker Compose Konfiguratioun ze managen an mat de Container ze interagéieren déi se beschreift, erstellen mir déi folgend Datei 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

Déi meescht vun de Kommandoen, déi hei beschriwwe ginn, gëllen fir all Container, awer mat der Optioun c= erlaabt Iech den Ëmfang vun engem Kommando op ee Container ze limitéieren.

Nodeem Makefile prett, Dir kënnt et esou benotzen:

  • make help - eng Lëscht vun all verfügbare Kommandoen erausginn make.

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles
Hëllef op verfügbare Kommandoen

  • make build - Zesummesetzung vun engem Bild aus Dockerfile. An eisem Beispill hu mir existéierend Biller benotzt timescale и ping. Awer d'Bild api mir wëllen lokal sammelen. Dëst ass genau wat gemaach gëtt nodeems Dir dëse Kommando ausféiert.

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles
En Docker Container bauen

  • make start - lancéiert all Container. Fir just ee Container ze starten, kënnt Dir e Kommando benotzen wéi make start c=timescale.

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles
Lafen der Zäitskala Container

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles
Lafen e Ping Container

  • make login-timescale - Login op d'Bash Sessioun vum Container timescale.

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles
Lafen Bash an engem Zäitskala Container

  • make db-shell - Entrée an psql an engem Container timescale fir SQL Ufroen géint d'Datebank auszeféieren.

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles
Lafen psql an engem timescaledb Container

  • make stop - Stoppen Container.

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles
Stoppen engem Zäitskala Container

  • make down - Behälter stoppen an ewechhuelen. Fir e spezifesche Container ze läschen, kënnt Dir dëse Kommando benotze fir de gewënschten Container ze spezifizéieren. Zum Beispill - make down c=timescale oder make down c=api.

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles
Stoppen an läschen all Container

Resultater

Och wann Docker Compose eis e räiche Set vu Befehle gëtt fir Container ze managen, heiansdo kënnen dës Befehle laang a schwéier ze erënneren.

Method vun benotzen Makefile gehollef eis séier an einfach Interaktioun mat Container aus enger Datei z'etabléieren docker-compose.yml. Mir schwätzen nämlech iwwer déi folgend:

  • Den Entwéckler interagéiert nëmme mat de Projetbehälter beschriwwen an docker-compose.yml, Aarbecht gëtt net vun anere Lafen Container gestéiert.
  • Am Fall wou e bestëmmte Kommando vergiess ass, kënnt Dir de Kommando ausféieren make help a kritt Hëllef iwwer verfügbare Kommandoen.
  • Dir musst net laang Lëschte vun Argumenter erënneren fir Aktiounen auszeféieren, wéi zum Beispill déi lescht Log-Entréen ze kréien oder an e System aloggen. Zum Beispill, e Kommando wéi docker-compose -f docker-compose.yml exec timescale psql -Upostgres gëtt an make db-shell.
  • Fichier Makefile Dir kënnt et flexibel upassen wéi de Projet wiisst. Zum Beispill ass et einfach e Kommando ze addéieren fir eng Datebank Backup ze kreéieren oder all aner Handlung auszeféieren.
  • Wann eng grouss Equipe vun Entwéckler benotzt déi selwecht Makefile, dëst streamlines Zesummenaarbecht a reduzéiert Feeler.

PS An eiser Maartplaz et gëtt e Bild Docker, déi an engem Klick installéiert ka ginn. Dir kënnt d'Operatioun vun Container kontrolléieren op VPS. All nei Clientë kréien 3 Deeg Tester gratis.

Léif Lieser! Wéi automatiséiert Dir Docker Compose?

Docker Compose: Vereinfacht Är Aarbecht mat Makefiles

Source: will.com

Setzt e Commentaire