Docker Compose: Makefiles yordamida ishingizni soddalashtirish

Har bir necha yilda dasturiy ta'minot ishlab chiqish sanoati paradigma o'zgarishiga duch keladi. Ushbu hodisalardan biri mikroservislar kontseptsiyasiga bo'lgan qiziqishning ortib borayotgani sifatida tan olinishi mumkin. Mikroservislar eng yangi texnologiya bo'lmasa-da, yaqinda uning mashhurligi tom ma'noda keskin oshdi.

Yirik monolit xizmatlar endi mustaqil, avtonom mikroservislar bilan almashtirilmoqda. Mikroservisni bitta va juda aniq maqsadga xizmat qiluvchi dastur sifatida qarash mumkin. Masalan, bu relyatsion DBMS, Express ilovasi, Solr xizmati bo'lishi mumkin.

Docker Compose: Makefiles yordamida ishingizni soddalashtirish

Hozirgi kunda mikroservislardan foydalanmasdan yangi dasturiy ta'minot tizimini ishlab chiqishni tasavvur qilish qiyin. Va bu holat, o'z navbatida, bizni Docker platformasiga olib boradi.

Docker

Platformalar Docker, mikroservislarni ishlab chiqish va joylashtirishda deyarli sanoat standartiga aylandi. Loyiha veb-saytida siz Docker tashkilotlarga har qanday dasturni osonlik bilan yaratish, shuningdek, gibrid bulutlardan chekka tizimlargacha bo'lgan har qanday muhitda tarqatish va ishga tushirish imkonini beruvchi yagona mustaqil konteynerlashtirish platformasi ekanligini bilib olishingiz mumkin.

Docker tuzish

texnologiya Docker tuzish ko'p konteynerli ilovalarni sozlash uchun mo'ljallangan. Docker Compose loyihasida loyiha yaratuvchisi kerak bo'lgan miqdorda Docker konteynerlari bo'lishi mumkin.

Docker Compose bilan ishlashda YAML fayli ilova xizmatlarini sozlash va ularning bir-biri bilan oʻzaro aloqalarini tashkil qilish uchun ishlatiladi. Shuning uchun Docker Compose ko'p konteynerli Docker ilovalarini tavsiflash va ishga tushirish uchun vositadir.

Docker Compose: Makefiles yordamida ishingizni soddalashtirish
Xost tizimida ishlaydigan ikkita konteyner

GNU Make

Dastur make, aslida manba kodidan dasturlar va kutubxonalar qurishni avtomatlashtirish vositasidir. Umuman olganda, buni aytishimiz mumkin make ba'zi kiritilgan materiallarni qandaydir chiqish shakliga, qandaydir maqsadga aylantirish uchun ixtiyoriy buyruqlarni bajarishni o'z ichiga olgan har qanday jarayonga taalluqlidir. Bizning holatda, buyruqlar docker-compose mavhum maqsadlarga aylanadi (Telefon maqsadlari).

Dastur aytish uchun make undan nima istayotganimiz haqida bizga fayl kerak Makefile.

Bizning Makefile muntazam buyruqlarni o'z ichiga oladi docker и docker-compose, ular ko'p muammolarni hal qilish uchun mo'ljallangan. Ya'ni, biz konteynerni yig'ish, uni ishga tushirish, to'xtatish, qayta ishga tushirish, konteynerga foydalanuvchi loginini tashkil qilish, konteyner jurnallari bilan ishlash va shunga o'xshash boshqa muammolarni hal qilish haqida gapiramiz.

Docker Compose uchun odatiy foydalanish holatlari

Keling, quyidagi komponentlarga ega oddiy veb-ilovani tasavvur qilaylik:

  • TimescaleDB ma'lumotlar bazasi (Postgres).
  • Express.js ilovasi.
  • Ping (shunchaki konteyner, maxsus hech narsa qilmaydi).

Ushbu ilovaga 3 ta Docker konteyneri va fayl kerak bo'ladi docker-compose, unda ushbu konteynerlarni boshqarish bo'yicha ko'rsatmalar mavjud. Har bir konteyner turli xil aloqa nuqtalariga ega bo'ladi. Masalan, konteyner bilan timescale ular ma'lumotlar bazalari bilan qanday ishlaydi, taxminan xuddi shunday ishlash mumkin bo'ladi. Ya'ni, u quyidagi amallarni bajarishga imkon beradi:

  • Postgres qobig'iga kirish.
  • Jadvallarni import va eksport qilish.
  • yaratilish pg_dump jadvallar yoki ma'lumotlar bazalari.

Express.js dastur konteyneri, expressjs, quyidagi imkoniyatlarga ega bo'lishi mumkin:

  • Tizim jurnalidan yangi ma'lumotlarni taqdim etish.
  • Muayyan buyruqlarni bajarish uchun qobiqqa kiring.

Konteynerlar bilan ishlash

Docker Compose yordamida konteynerlar o‘rtasida aloqa o‘rnatganimizdan so‘ng, bu konteynerlar bilan bog‘lanish vaqti keldi. Docker Compose tizimida buyruq mavjud docker-compose, qo'llab-quvvatlovchi variant -f, bu sizga faylni tizimga o'tkazish imkonini beradi docker-compose.yml.

Ushbu parametrning imkoniyatlaridan foydalanib, siz tizim bilan o'zaro aloqani faqat faylda ko'rsatilgan konteynerlar bilan cheklashingiz mumkin. docker-compose.yml.

Keling, buyruqlardan foydalanganda konteynerlar bilan o'zaro aloqalar qanday bo'lishini ko'rib chiqaylik docker-compose. Agar biz qobiqqa kirishimiz kerakligini tasavvur qilsak psql, keyin tegishli buyruqlar quyidagicha ko'rinishi mumkin:

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

Amalga oshirish uchun ishlatilmaydigan bir xil buyruq docker-composeva docker, shunday ko'rinishi mumkin:

docker exec -it  edp_timescale_1 psql -Upostgres

E'tibor bering, bunday hollarda buyruqni ishlatish har doim afzalroqdir docker, va jamoa docker-compose, chunki bu konteyner nomlarini eslab qolish zaruratini yo'q qiladi.

Yuqoridagi ikkala buyruq ham unchalik qiyin emas. Ammo formada "o'rash" dan foydalansak Makefile, bu bizga oddiy buyruqlar ko'rinishidagi interfeysni beradi va o'zi shunga o'xshash uzun buyruqlar deb atasa, xuddi shunday natijalarga erishish mumkin:

make db-shell

Foydalanish juda aniq Makefile konteynerlar bilan ishlashni ancha osonlashtiradi!

Ishlash namunasi

Yuqoridagi loyiha diagrammasi asosida quyidagi faylni yaratamiz 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 konfiguratsiyasini boshqarish va u tasvirlangan konteynerlar bilan ishlash uchun biz quyidagi faylni yaratamiz. 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

Bu erda tasvirlangan buyruqlarning ko'pchiligi barcha konteynerlar uchun amal qiladi, lekin variantni ishlatadi c= buyruq doirasini bitta konteyner bilan cheklash imkonini beradi.

so'ng Makefile tayyor, siz uni quyidagicha ishlatishingiz mumkin:

  • make help — mavjud bo'lgan barcha buyruqlar ro'yxatini chiqarish make.

Docker Compose: Makefiles yordamida ishingizni soddalashtirish
Mavjud buyruqlar bo'yicha yordam

  • make build - dan tasvirni yig'ish Dockerfile. Bizning misolimizda biz mavjud rasmlardan foydalandik timescale и ping. Lekin tasvir api biz mahalliy yig'ishni xohlaymiz. Bu buyruqni bajargandan so'ng aynan shunday bo'ladi.

Docker Compose: Makefiles yordamida ishingizni soddalashtirish
Docker konteynerini qurish

  • make start — barcha konteynerlarni ishga tushirish. Faqat bitta konteynerni ishga tushirish uchun siz kabi buyruqdan foydalanishingiz mumkin make start c=timescale.

Docker Compose: Makefiles yordamida ishingizni soddalashtirish
Vaqt shkalasi konteynerini ishga tushirish

Docker Compose: Makefiles yordamida ishingizni soddalashtirish
Ping konteynerini ishga tushirish

  • make login-timescale — konteynerning bash sessiyasiga kiring timescale.

Docker Compose: Makefiles yordamida ishingizni soddalashtirish
Vaqt shkalasi konteynerida bash ishga tushirilmoqda

  • make db-shell - kirish psql konteynerda timescale ma'lumotlar bazasiga qarshi SQL so'rovlarini bajarish uchun.

Docker Compose: Makefiles yordamida ishingizni soddalashtirish
Psql-ni timescaledb konteynerida ishga tushirish

  • make stop - konteynerlarni to'xtatish.

Docker Compose: Makefiles yordamida ishingizni soddalashtirish
Vaqt o'lchovi konteynerini to'xtatish

  • make down - idishlarni to'xtatish va olib tashlash. Muayyan konteynerni olib tashlash uchun siz kerakli konteynerni ko'rsatgan holda ushbu buyruqdan foydalanishingiz mumkin. Masalan - make down c=timescale yoki make down c=api.

Docker Compose: Makefiles yordamida ishingizni soddalashtirish
Barcha konteynerlarni to'xtatish va o'chirish

natijalar

Garchi Docker Compose bizga konteynerlarni boshqarish bo'yicha boy buyruqlar to'plamini taqdim etsa ham, ba'zida bu buyruqlar uzoq va eslab qolish qiyin bo'lishi mumkin.

Foydalanish usuli Makefile fayldagi konteynerlar bilan tez va oson oʻzaro aloqa oʻrnatishimizga yordam berdi docker-compose.yml. Ya'ni, biz quyidagilar haqida gapiramiz:

  • Ishlab chiquvchi faqat maqolada tasvirlangan loyiha konteynerlari bilan o'zaro ishlaydi docker-compose.yml, ishga boshqa ishlaydigan konteynerlar xalaqit bermaydi.
  • Agar ma'lum bir buyruq unutilgan bo'lsa, siz buyruqni bajarishingiz mumkin make help va mavjud buyruqlar bo'yicha yordam oling.
  • Eng so'nggi jurnal yozuvlarini olish yoki tizimga kirish kabi amallarni bajarish uchun argumentlarning uzun ro'yxatini eslab qolish shart emas. Masalan, kabi buyruq docker-compose -f docker-compose.yml exec timescale psql -Upostgres aylanadi make db-shell.
  • Fayl Makefile Loyiha o'sib borishi bilan siz unga moslashuvchan tarzda moslashingiz mumkin. Misol uchun, ma'lumotlar bazasi zahirasini yaratish yoki boshqa har qanday amalni bajarish uchun buyruq qo'shish oson.
  • Agar ishlab chiquvchilarning katta jamoasi xuddi shunday foydalansa Makefile, bu hamkorlikni soddalashtiradi va xatolarni kamaytiradi.

PS Bizning bozor tasvir mavjud Docker, uni bir marta bosish bilan o'rnatish mumkin. Konteynerlarning ishlashini quyidagi manzilda tekshirishingiz mumkin VPS. Barcha yangi mijozlarga 3 kunlik bepul sinov beriladi.

Hurmatli o'quvchilar! Docker Composeni qanday avtomatlashtirasiz?

Docker Compose: Makefiles yordamida ishingizni soddalashtirish

Manba: www.habr.com

a Izoh qo'shish