Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin

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.

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin

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 yükvuran, mikroservislərin inkişafı və tətbiqində demək olar ki, sənaye standartına çevrildi. Layihənin veb saytında siz öyrənə bilərsiniz ki, Docker təşkilatlara asanlıqla istənilən proqram yaratmağa, həmçinin onları hibrid buludlardan tutmuş kənar sistemlərə qədər istənilən mühitdə yaymağa və işə salmağa imkan verən yeganə müstəqil konteyner platformasıdır.

Docker tərtib edin

Технология Docker tərtib edin çox konteynerli proqramların konfiqurasiyası üçün nəzərdə tutulmuşdur. Docker Compose layihəsi layihənin yaradıcısının ehtiyac duyduğu qədər Docker konteynerini ehtiva edə bilər.

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.

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin
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 (Telefon hədəfləri).

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-composebir ç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-composedocker, 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əsi make.

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin
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ə etdik timescale и ping. Amma görüntü api yerli olaraq toplamaq istəyirik. Bu əmri yerinə yetirdikdən sonra məhz belə ediləcək.

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin
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ərsiniz make start c=timescale.

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin
Vaxt şkalası konteynerini işə salmaq

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin
Ping konteynerinin işlədilməsi

  • make login-timescale — konteynerin bash sessiyasına daxil olun timescale.

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin
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.

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin
Timescaledb konteynerində psql işlədilir

  • make stop - konteynerlərin dayandırılması.

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin
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ə ya make down c=api.

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin
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 В нашем bazar yeri görüntü var yükvuran, bir kliklə quraşdırılır. Konteynerlərin işini yoxlaya bilərsiniz VPS. Bütün yeni müştərilərə 3 gün pulsuz sınaq müddəti verilir.

Hörmətli oxucular! Docker Compose-u necə avtomatlaşdırırsınız?

Docker Compose: Makefiles istifadə edərək işinizi sadələşdirin

Mənbə: www.habr.com

Добавить комментарий