Bir neçə ildən bir proqram təminatı sənayesi paradiqma dəyişikliyinə məruz qalır. Bu hadisələrdən biri mikroservislər konsepsiyasına artan marağın artması kimi qəbul edilə bilər. Mikroservislər ən yeni texnologiya olmasa da, yalnız bu yaxınlarda onun populyarlığı sözün əsl mənasında yüksəldi.
Böyük monolit xidmətlər indi müstəqil, avtonom mikroservislərlə əvəz olunur. Mikroservisə tək və çox xüsusi bir məqsədə xidmət edən proqram kimi düşünülə bilər. Məsələn, bu, əlaqəli DBMS, Express proqram, Solr xidməti ola bilər.
Bu günlərdə mikroservislərdən istifadə etmədən yeni proqram təminatı sisteminin yaradılmasını təsəvvür etmək çətindir. Və bu vəziyyət öz növbəsində bizi Docker platformasına aparır.
yükvuran
Platforma
Docker tərtib edin
Технология
Docker Compose ilə işləyərkən proqram xidmətlərini konfiqurasiya etmək və onların bir-biri ilə qarşılıqlı əlaqəsini təşkil etmək üçün YAML faylından istifadə olunur. Docker Compose buna görə də çox konteynerli Docker proqramlarını təsvir etmək və işə salmaq üçün bir vasitədir.
Host sistemində işləyən iki konteyner
GNU olun
Proqram make
, mahiyyətcə mənbə kodundan proqramların və kitabxanaların qurulmasını avtomatlaşdırmaq üçün bir vasitədir. Ümumiyyətlə, bunu deyə bilərik make
bəzi giriş materiallarını hansısa çıxış formasına, hansısa məqsədə çevirmək üçün ixtiyari əmrlərin yerinə yetirilməsini nəzərdə tutan istənilən prosesə aiddir. Bizim vəziyyətimizdə əmrlər docker-compose
mücərrəd məqsədlərə çevriləcək (
Proqramı demək üçün make
ondan nə istədiyimiz haqqında bir fayl lazımdır Makefile
.
В нашем Makefile
müntəzəm əmrləri ehtiva edəcəkdir docker
и docker-compose
bir çox problemləri həll etmək üçün nəzərdə tutulmuşdur. Məhz, söhbət konteynerin yığılmasından, işə salınmasından, dayandırılmasından, yenidən işə salınmasından, istifadəçinin konteynerə girişinin təşkilindən, konteyner jurnalları ilə işləməkdən və digər oxşar problemlərin həllindən gedir.
Docker Compose üçün tipik istifadə halları
Aşağıdakı komponentləri ehtiva edən adi bir veb tətbiqini təsəvvür edək:
- TimescaleDB verilənlər bazası (Postgres).
- Express.js tətbiqi.
- Ping (yalnız bir konteyner, xüsusi bir şey etmir).
Bu proqrama 3 Docker konteyneri və bir fayl lazımdır docker-compose
, bu konteynerləri idarə etmək üçün təlimatları ehtiva edir. Hər bir konteynerin fərqli toxunma nöqtələri olacaq. Məsələn, bir konteyner ilə timescale
verilənlər bazası ilə işlədikləri kimi təxminən eyni şəkildə işləmək mümkün olacaq. Məhz, aşağıdakı hərəkətləri yerinə yetirməyə imkan verir:
- Postgres qabığına daxil olmaq.
- Cədvəllərin idxalı və ixracı.
- yaradıcılıq
pg_dump
cədvəllər və ya verilənlər bazası.
Express.js proqram konteyneri, expressjs
, aşağıdakı imkanlara malik ola bilər:
- Sistem jurnalından təzə məlumatların təmin edilməsi.
- Müəyyən əmrləri yerinə yetirmək üçün qabığa daxil olun.
Konteynerlərlə qarşılıqlı əlaqə
Docker Compose istifadə edərək konteynerlər arasında əlaqə qurduqdan sonra həmin konteynerlərlə əlaqə saxlamağın vaxtı gəldi. Docker Compose sistemində bir əmr var docker-compose
, dəstəkləyən seçim -f
, faylı sistemə köçürməyə imkan verir docker-compose.yml
.
Bu seçimin imkanlarından istifadə edərək, sistemlə qarşılıqlı əlaqəni yalnız faylda qeyd olunan konteynerlərlə məhdudlaşdıra bilərsiniz. docker-compose.yml
.
Əmrlərdən istifadə edərkən konteynerlərlə qarşılıqlı əlaqənin necə göründüyünə nəzər salaq docker-compose
. Təsəvvür etsək ki, qabığa daxil olmalıyıq psql
, onda müvafiq əmrlər belə görünə bilər:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
İcra etmək üçün istifadə edilməyən eyni əmr docker-compose
Və docker
, bu kimi görünə bilər:
docker exec -it edp_timescale_1 psql -Upostgres
Nəzərə alın ki, belə hallarda əmrdən istifadə etmək həmişə üstünlük təşkil edir docker
, və komanda docker-compose
, çünki bu, konteyner adlarını yadda saxlamaq ehtiyacını aradan qaldırır.
Yuxarıdakı əmrlərin hər ikisi o qədər də çətin deyil. Ancaq formada "sarğı" istifadə etsək Makefile
, bizə sadə əmrlər şəklində bir interfeys verəcək və özü də oxşar uzun əmrlər adlandıracaqsa, eyni nəticələr aşağıdakı kimi əldə edilə bilər:
make db-shell
İstifadəsi olduqca aydındır Makefile
konteynerlərlə işi çox asanlaşdırır!
İş nümunəsi
Yuxarıdakı layihə diaqramına əsasən, aşağıdakı faylı yaradacağıq 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
Docker Compose konfiqurasiyasını idarə etmək və onun təsvir etdiyi konteynerlərlə qarşılıqlı əlaqə yaratmaq üçün aşağıdakı faylı yaradacağıq. 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
Burada təsvir edilən əmrlərin əksəriyyəti bütün konteynerlərə aiddir, lakin seçimdən istifadə etməklə c=
əmrin əhatə dairəsini bir konteynerlə məhdudlaşdırmağa imkan verir.
Sonra Makefile
hazırdır, onu belə istifadə edə bilərsiniz:
make help
— üçün mövcud olan bütün əmrlərin siyahısının verilməsimake
.
Mövcud əmrlər üzrə kömək
make build
-dən bir təsvirin yığılmasıDockerfile
. Nümunəmizdə mövcud şəkillərdən istifadə etdiktimescale
иping
. Amma görüntüapi
yerli olaraq toplamaq istəyirik. Bu əmri yerinə yetirdikdən sonra məhz belə ediləcək.
Docker konteynerinin qurulması
make start
— bütün konteynerlərin işə salınması. Yalnız bir konteyneri işə salmaq üçün kimi bir əmrdən istifadə edə bilərsinizmake start c=timescale
.
Vaxt şkalası konteynerini işə salmaq
Ping konteynerinin işlədilməsi
make login-timescale
— konteynerin bash sessiyasına daxil oluntimescale
.
Zaman şkalası konteynerində bash işləyir
make db-shell
- girişpsql
bir konteynerdətimescale
verilənlər bazasına qarşı SQL sorğularını yerinə yetirmək üçün.
Timescaledb konteynerində psql işlədilir
make stop
- konteynerlərin dayandırılması.
Zaman şkalası konteynerinin dayandırılması
make down
— qabların dayandırılması və çıxarılması. Müəyyən bir konteyneri çıxarmaq üçün istədiyiniz konteyneri göstərərək bu əmrdən istifadə edə bilərsiniz. Misal üçün -make down c=timescale
və yamake down c=api
.
Bütün konteynerlərin dayandırılması və silinməsi
Nəticələri
Docker Compose konteynerləri idarə etmək üçün bizə zəngin əmrlər toplusunu təqdim etsə də, bəzən bu əmrlər uzun və yadda saxlamaq çətin ola bilər.
İstifadə üsulu Makefile
fayldan konteynerlərlə tez və asan qarşılıqlı əlaqə yaratmağımıza kömək etdi docker-compose.yml
. Məhz, biz aşağıdakılardan danışırıq:
- Tərtibatçı yalnız təsvir olunan layihə konteynerləri ilə qarşılıqlı əlaqə qurur
docker-compose.yml
, işə digər işləyən konteynerlər müdaxilə etmir. - Müəyyən bir əmrin unudulması halında, əmri yerinə yetirə bilərsiniz
make help
və mövcud əmrlər üzrə yardım alın. - Ən son jurnal qeydlərini əldə etmək və ya sistemə daxil olmaq kimi hərəkətləri yerinə yetirmək üçün uzun arqument siyahılarını yadda saxlamağa ehtiyac yoxdur. Məsələn, kimi bir əmr
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
növbədə nəzərəmake db-shell
. - Файл
Makefile
Layihə böyüdükcə ona çevik şəkildə uyğunlaşa bilərsiniz. Məsələn, verilənlər bazası ehtiyat nüsxəsini yaratmaq və ya hər hansı digər hərəkəti yerinə yetirmək üçün əmr əlavə etmək asandır. - Böyük bir inkişaf qrupu eyni istifadə edərsə
Makefile
, bu əməkdaşlığı asanlaşdırır və səhvləri azaldır.
PS В нашем
Hörmətli oxucular! Docker Compose-u necə avtomatlaşdırırsınız?
Mənbə: www.habr.com