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.
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 Compose
Technologie
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.
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 (
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-compose
an 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 erausginnmake
.
Hëllef op verfügbare Kommandoen
make build
- Zesummesetzung vun engem Bild ausDockerfile
. An eisem Beispill hu mir existéierend Biller benotzttimescale
иping
. Awer d'Bildapi
mir wëllen lokal sammelen. Dëst ass genau wat gemaach gëtt nodeems Dir dëse Kommando ausféiert.
En Docker Container bauen
make start
- lancéiert all Container. Fir just ee Container ze starten, kënnt Dir e Kommando benotzen wéimake start c=timescale
.
Lafen der Zäitskala Container
Lafen e Ping Container
make login-timescale
- Login op d'Bash Sessioun vum Containertimescale
.
Lafen Bash an engem Zäitskala Container
make db-shell
- Entrée anpsql
an engem Containertimescale
fir SQL Ufroen géint d'Datebank auszeféieren.
Lafen psql an engem timescaledb Container
make stop
- Stoppen Container.
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
odermake down c=api
.
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 anmake 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
Léif Lieser! Wéi automatiséiert Dir Docker Compose?
Source: will.com