Docker Compose: ስራዎን በ Makefile ያቃልሉ

በየጥቂት አመታት የሶፍትዌር ልማት ኢንደስትሪ የአስተሳሰብ ለውጥ ያጋጥመዋል። ከእነዚህ ክስተቶች ውስጥ አንዱ በማይክሮ ሰርቪስ ፅንሰ-ሀሳብ ላይ ፍላጎት እያደገ መሄዱ ሊታወቅ ይችላል። ምንም እንኳን ማይክሮ ሰርቪስ አዲሱ ቴክኖሎጂ ባይሆንም ከቅርብ ጊዜ ወዲህ ተወዳጅነቱ በጥሬው ከፍ ብሏል።

ትላልቅ ነጠላ አገልግሎቶች አሁን በገለልተኛ ጥቃቅን አገልግሎቶች እየተተኩ ናቸው። ማይክሮ ሰርቪስ ለአንድ እና በጣም የተለየ ዓላማ የሚያገለግል መተግበሪያ ተደርጎ ሊወሰድ ይችላል። ለምሳሌ፣ ተዛማጅ DBMS፣ Express መተግበሪያ፣ የ Solr አገልግሎት ሊሆን ይችላል።

Docker Compose: ስራዎን በ Makefile ያቃልሉ

በአሁኑ ጊዜ ማይክሮ ሰርቪስ ሳይጠቀሙ አዲስ የሶፍትዌር ስርዓት መፈጠሩን መገመት ከባድ ነው። እና ይህ ሁኔታ, በተራው, ወደ ዶከር መድረክ ይመራናል.

Docker

የመሣሪያ ስርዓት Dockerበጥቃቅን አገልግሎቶች ልማት እና ማሰማራት የኢንዱስትሪ ደረጃ ከሞላ ጎደል ሆኗል። በፕሮጀክቱ ድረ-ገጽ ላይ፣ ዶከር ድርጅቶች ማንኛውንም አፕሊኬሽኖች ያለ ምንም ጥረት እንዲፈጥሩ፣ እንዲሁም በማንኛውም አካባቢ እንዲሰራጭ እና እንዲያካሂዱ የሚያስችል ብቸኛ ገለልተኛ የመያዣ መድረክ መሆኑን መማር ይችላሉ - ከድብልቅ ደመና እስከ ጠርዝ ስርዓቶች።

Docker Compose

ቴክኖሎጂ Docker Compose ባለብዙ-ኮንቴይነር አፕሊኬሽኖችን ለማዋቀር የተነደፈ። Docker Compose ፕሮጀክት የፕሮጀክቱ ፈጣሪ የሚፈልገውን ያህል የዶከር ኮንቴይነሮች ሊኖሩት ይችላል።

ከ Docker Compose ጋር ሲሰሩ፣ የ YAML ፋይል የመተግበሪያ አገልግሎቶችን ለማዋቀር እና እርስ በእርስ ያላቸውን ግንኙነት ለማደራጀት ይጠቅማል። Docker Compose የባለብዙ ኮንቴይነር Docker አፕሊኬሽኖችን ለመግለፅ እና ለማስኬድ መሳሪያ ነው።

Docker Compose: ስራዎን በ Makefile ያቃልሉ
በአስተናጋጅ ስርዓት ላይ የሚሰሩ ሁለት ኮንቴይነሮች

GNU አድርግ

ፕሮግራሙ makeበመሠረቱ የፕሮግራሞችን እና ቤተ-መጻሕፍትን ከምንጩ ኮድ በራስ ሰር የሚገጣጠም መሳሪያ ነው። በአጠቃላይ እንዲህ ማለት ይቻላል። make አንዳንድ የምንጭ ቁሳቁሶችን ወደ አንድ የመጨረሻ ውጤት ወደ አንድ ዓላማ ለመለወጥ የዘፈቀደ ትዕዛዞችን መፈጸምን ለሚያካትት ለማንኛውም ሂደት ተፈጻሚ ይሆናል። በእኛ ሁኔታ, ትዕዛዞች docker-compose ወደ ረቂቅ ኢላማዎች ይቀየራል (የውሸት ኢላማዎች).

ፕሮግራሙን ለመንገር make ከእሷ ስለምንፈልገው, ፋይል እንፈልጋለን Makefile.

በእኛ ውስጥ Makefile የተለመዱ ትዕዛዞችን ይይዛል docker и docker-compose, የተለያዩ ችግሮችን ለመፍታት የተነደፉ ናቸው. ይኸውም ኮንቴይነሩን ስለመገጣጠም፣ ስለ ማስጀመር፣ ስለማቆም፣ እንደገና ስለ ማስጀመር፣ የተጠቃሚውን ወደ መያዣው ውስጥ እንዲገባ ስለማደራጀት፣ ከመያዣ ምዝግብ ማስታወሻዎች ጋር ስለ መሥራት እና ሌሎች ተመሳሳይ ሥራዎችን ስለመፍታት እየተነጋገርን ነው።

ለ Docker Compose የተለመዱ የአጠቃቀም ጉዳዮች

የሚከተሉት ክፍሎች ያሉት አንድ የተለመደ የድር መተግበሪያ አስብ።

  • TimecaleDB የውሂብ ጎታ (Postgres)።
  • Express.js መተግበሪያ.
  • ፒንግ (ምንም ልዩ ነገር የማያደርግ መያዣ ብቻ).

ይህ መተግበሪያ 3 Docker ኮንቴይነሮች እና አንድ ፋይል ያስፈልገዋል docker-composeእነዚህን መያዣዎች ለማስተዳደር መመሪያን የያዘ። እያንዳንዱ መያዣዎች የተለያዩ የመስተጋብር ነጥቦች ይኖራቸዋል. ለምሳሌ, ከእቃ መያዣ ጋር timescale ከመረጃ ቋቶች ጋር ከመስራት ጋር ተመሳሳይ በሆነ መልኩ መሥራት ይቻል ይሆናል። ይኸውም የሚከተሉትን እንዲያደርጉ ይፈቅድልዎታል፡

  • ወደ Postgres ሼል ይግቡ።
  • የጠረጴዛዎች ማስመጣት እና ወደ ውጪ መላክ.
  • ፍጥረት pg_dump ጠረጴዛዎች ወይም የውሂብ ጎታዎች.

Express.js መተግበሪያ መያዣ, expressjs, የሚከተሉት ባህሪያት ሊኖሩት ይችላል:

  • ከስርዓት ምዝግብ ማስታወሻ አዲስ መረጃ መስጠት.
  • የተወሰኑ ትዕዛዞችን ለማስፈጸም ሼል ማስገባት.

ከእቃ መያዣዎች ጋር መስተጋብር

አሁን Docker Composeን በመጠቀም በመያዣዎች መካከል ግንኙነትን አዘጋጅተናል፣ ከእነዚህ ኮንቴይነሮች ጋር ለመገናኘት ጊዜው አሁን ነው። በ Docker Compose ስርዓት ውስጥ ትእዛዝ አለ። docker-compose, አማራጩን በመደገፍ -f, ይህም ፋይሉን ወደ ስርዓቱ ለማስተላለፍ ያስችልዎታል docker-compose.yml.

የዚህን አማራጭ ችሎታዎች በመጠቀም ከስርዓቱ ጋር ያለውን ግንኙነት በፋይሉ ውስጥ በተጠቀሱት መያዣዎች ላይ ብቻ መወሰን ይችላሉ. docker-compose.yml.

ትዕዛዞችን ስንጠቀም ከመያዣዎች ጋር ያሉ ግንኙነቶች ምን እንደሚመስሉ እንመልከት docker-compose. ወደ ቅርፊቱ ውስጥ መግባት እንዳለብን ካሰብን psql, ከዚያ ተጓዳኝ ትዕዛዞች እንደዚህ ሊመስሉ ይችላሉ:

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

ለማስፈጸም ጥቅም ላይ የማይውል ተመሳሳይ ትዕዛዝ docker-composedocker, ይህን ሊመስል ይችላል:

docker exec -it  edp_timescale_1 psql -Upostgres

እንደዚህ ባሉ አጋጣሚዎች ሁልጊዜ ትዕዛዙን አለመጠቀም ይመረጣል docker, እና ትዕዛዙ docker-compose, የመያዣ ስሞችን ማስታወስ አስፈላጊነትን ስለሚያስወግድ.

ከላይ ያሉት ሁለቱም ትዕዛዞች ያን ያህል ውስብስብ አይደሉም። ነገር ግን "መጠቅለያውን" በቅጹ ውስጥ ከተጠቀምን Makefileበቀላል ትዕዛዞች መልክ በይነገጽ ይሰጠናል እና እሱ ራሱ እንደዚህ ያሉ ረጅም ትዕዛዞችን ይጠራዋል ​​፣ ከዚያ ተመሳሳይ ውጤቶች እንደዚህ ሊገኙ ይችላሉ-

make db-shell

አጠቃቀሙ ግልጽ ነው። Makefile ስራውን ከእቃ መያዣዎች ጋር በእጅጉ ያቃልላል!

የሥራ ምሳሌ

ከላይ ባለው የፕሮጀክት እቅድ መሰረት, የሚከተለውን ፋይል እንፈጥራለን 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 ውቅረትን ለማስተዳደር እና ከገለጻቸው መያዣዎች ጋር መስተጋብር ለመፍጠር የሚከተለውን ፋይል እንፍጠር 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

አብዛኛዎቹ እዚህ የተገለጹት ትእዛዞች በሁሉም ኮንቴይነሮች ላይ ተፈጻሚ ይሆናሉ፣ ግን በመጠቀም c= የትዕዛዙን ወሰን በአንድ ኮንቴይነር እንዲገድቡ ይፈቅድልዎታል.

በኋላ Makefile ዝግጁ ፣ እንደሚከተለው ሊጠቀሙበት ይችላሉ-

  • make help - የሚገኙትን ሁሉንም ትዕዛዞች ዝርዝር ማውጣት make.

Docker Compose: ስራዎን በ Makefile ያቃልሉ
ላሉት ትዕዛዞች እገዛ

  • make build - ምስልን ከ Dockerfile. በእኛ ምሳሌ, ነባር ምስሎችን እንጠቀማለን timescale и ping. ግን ምስሉ api በአገር ውስጥ መገንባት እንፈልጋለን. ይህንን ትዕዛዝ ከፈጸሙ በኋላ በትክክል የሚከናወነው ይህ ነው.

Docker Compose: ስራዎን በ Makefile ያቃልሉ
የዶከር ኮንቴይነር መገንባት

  • make start - ሁሉንም መያዣዎች ይጀምሩ. አንድ ኮንቴይነር ብቻ ለማሄድ እንደ ትእዛዝ መጠቀም ይችላሉ። make start c=timescale.

Docker Compose: ስራዎን በ Makefile ያቃልሉ
የጊዜ መለኪያ መያዣውን በማሄድ ላይ

Docker Compose: ስራዎን በ Makefile ያቃልሉ
የፒንግ መያዣን ማካሄድ

  • make login-timescale - ወደ መያዣው የ bash ክፍለ ጊዜ ይግቡ timescale.

Docker Compose: ስራዎን በ Makefile ያቃልሉ
በጊዜ መለኪያ መያዣ ውስጥ የሩጫ bash

  • make db-shell - መግቢያ ወደ psql በእቃ መያዣ ውስጥ timescale በመረጃ ቋቱ ላይ የ SQL ጥያቄዎችን ለማስፈጸም።

Docker Compose: ስራዎን በ Makefile ያቃልሉ
psqlን በጊዜ መጠን በተዘጋጀ መያዣ ውስጥ በማሄድ ላይ

  • make stop - መያዣዎችን ማቆም.

Docker Compose: ስራዎን በ Makefile ያቃልሉ
የጊዜ መለኪያ መያዣውን ማቆም

  • make down - መያዣዎችን ማቆም እና መሰረዝ. አንድ የተወሰነ መያዣን ለማስወገድ, የሚፈለገውን መያዣ በመጥቀስ ይህንን ትዕዛዝ መጠቀም ይችላሉ. ለምሳሌ - make down c=timescale ወይም make down c=api.

Docker Compose: ስራዎን በ Makefile ያቃልሉ
ሁሉንም መያዣዎች ያቁሙ እና ይሰርዙ

ውጤቶች

ምንም እንኳን የ Docker Compose ስርዓት ኮንቴይነሮችን ለማስተዳደር ብዙ ትዕዛዞችን ቢሰጠንም፣ አንዳንድ ጊዜ እነዚህ ትዕዛዞች በዚህ ምክንያት ረጅም እና ለማስታወስ አስቸጋሪ ይሆናሉ።

የአጠቃቀም ዘዴ Makefile ፈጣን እና ቀላል መስተጋብር ከፋይል መያዣዎች ጋር ለመመስረት ረድቶናል። docker-compose.yml. ይኸውም ስለሚከተሉት ነገሮች እየተነጋገርን ነው።

  • ገንቢው የሚገናኘው በተገለጹት የፕሮጀክት ኮንቴይነሮች ብቻ ነው። docker-compose.yml, ሌሎች የሩጫ መያዣዎች በስራ ላይ ጣልቃ አይገቡም.
  • አንድ የተወሰነ ትዕዛዝ ከተረሳ ትዕዛዙን ማከናወን ይችላሉ make help እና በሚገኙ ትዕዛዞች ላይ እገዛን ያግኙ።
  • እንደ ትኩስ የምዝግብ ማስታወሻዎች መግባት ወይም መግባት ያሉ ነገሮችን ለማከናወን ረጅም የክርክር ዝርዝሮችን ማስታወስ አያስፈልግም። ለምሳሌ, እንደ ትእዛዝ docker-compose -f docker-compose.yml exec timescale psql -Upostgres ወደ ይመለሳል make db-shell.
  • ፋይል Makefile ፕሮጀክቱ ሲያድግ በተለዋዋጭነት ማስተካከል ይችላሉ። ለምሳሌ የውሂብ ጎታ ምትኬን ለመፍጠር ወይም ሌላ ማንኛውንም ተግባር ለማከናወን ትእዛዝ በእሱ ላይ ማከል ቀላል ነው።
  • አንድ ትልቅ የእድገት ቡድን ተመሳሳይ ከሆነ Makefileይህ ትብብርን ያመቻቻል እና ስህተቶችን ይቀንሳል።

PS በእኛ ውስጥ የገበያ ቦታ ምስል አለ። Docker, በአንድ ጠቅታ ውስጥ የተጫነ. ኮንቴይነሮችን መስራቱን ማረጋገጥ ይችላሉ VPS. ሁሉም አዲስ ደንበኞች ለ 3 ቀናት የሙከራ ጊዜ በነጻ ይሰጣቸዋል።

ውድ አንባቢዎች! በDocker Compose እንዴት በራስ ሰር መስራት ይችላሉ?

Docker Compose: ስራዎን በ Makefile ያቃልሉ

ምንጭ: hab.com

አስተያየት ያክሉ