Docker Compose: Makefiles ашиглан ажлаа хялбарчлах

Хэдэн жил тутам програм хангамж хөгжүүлэх салбар парадигмын өөрчлөлтийг хийдэг. Эдгээр үзэгдлүүдийн нэг нь микро үйлчилгээний үзэл баримтлалыг сонирхож байгаа явдал гэж хүлээн зөвшөөрч болно. Хэдийгээр бичил үйлчилгээ нь хамгийн сүүлийн үеийн технологи биш ч саяхан түүний нэр хүнд огцом өссөн.

Том цул үйлчилгээнүүд одоо бие даасан, бие даасан бичил үйлчилгээнүүдээр солигдож байна. Микро үйлчилгээг нэг бөгөөд маш тодорхой зорилготой програм гэж ойлгож болно. Жишээлбэл, энэ нь харилцааны DBMS, Express application, Solr үйлчилгээ байж болно.

Docker Compose: Makefiles ашиглан ажлаа хялбарчлах

Өнөө үед микро үйлчилгээ ашиглахгүйгээр шинэ програм хангамжийн системийг хөгжүүлэхийг төсөөлөхөд бэрх юм. Энэ байдал нь эргээд биднийг Docker платформ руу хөтөлж байна.

Docker

Платформ Docker, бичил үйлчилгээг хөгжүүлэх, ашиглахад бараг л салбарын стандарт болсон. Төслийн вэбсайтаас та Docker бол байгууллагуудад ямар ч програмыг хялбархан үүсгэх, түүнчлэн эрлийз үүлнээс эхлээд захын систем хүртэл ямар ч орчинд түгээх, ажиллуулах боломжийг олгодог цорын ганц бие даасан контейнержуулалтын платформ гэдгийг олж мэдэх боломжтой.

Доктор зохиох

Технологи Доктор зохиох олон контейнер програмуудыг тохируулах зориулалттай. Docker Compose төсөл нь тухайн төслийг бүтээгчийн хэрэгцээтэй олон Docker контейнер агуулж болно.

Docker Compose-тэй ажиллахдаа YAML файлыг програмын үйлчилгээг тохируулах, тэдгээрийн харилцан үйлчлэлийг зохион байгуулахад ашигладаг. Тиймээс Docker Compose нь олон контейнерт Docker програмуудыг тайлбарлах, ажиллуулах хэрэгсэл юм.

Docker Compose: Makefiles ашиглан ажлаа хялбарчлах
Хост систем дээр ажиллаж байгаа хоёр контейнер

GNU хийх

Хөтөлбөр make, нь үндсэндээ эх кодоос программ болон номын сангуудыг бүтээхийг автоматжуулах хэрэгсэл юм. Ерөнхийдөө бид үүнийг хэлж чадна make Зарим оролтын материалыг ямар нэгэн гаралтын хэлбэрт, ямар нэгэн зорилго болгон хувиргах дурын командуудыг гүйцэтгэх аливаа процесст хамаарна. Манай тохиолдолд тушаалууд docker-compose хийсвэр зорилго болгон хувиргах болно (Утасны зорилтууд).

Хөтөлбөрт хэлэхийн тулд make Бид үүнээс юу хүсч байгаа талаар бидэнд файл хэрэгтэй Makefile.

Д манай Makefile тогтмол тушаалуудыг агуулна docker и docker-compose, эдгээр нь олон асуудлыг шийдвэрлэх зорилготой юм. Тодруулбал, бид савыг угсрах, эхлүүлэх, зогсоох, дахин эхлүүлэх, контейнерт хэрэглэгчийн нэвтрэлтийг зохион байгуулах, контейнерийн бүртгэлтэй ажиллах болон бусад ижил төстэй асуудлуудыг шийдвэрлэх талаар ярьж байна.

Docker Compose-д зориулсан ердийн хэрэглээний тохиолдол

Дараах бүрэлдэхүүн хэсгүүдийг агуулсан ердийн вэб програмыг төсөөлье.

  • TimescaleDB мэдээллийн сан (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-composeболон docker, иймэрхүү харагдаж магадгүй:

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: Makefiles ашиглан ажлаа хялбарчлах
Боломжтой командуудын тусламж

  • make build -аас зураг угсрах Dockerfile. Бидний жишээн дээр бид одоо байгаа зургуудыг ашигласан timescale и ping. Гэхдээ зураг api Бид орон нутгаас цуглуулахыг хүсч байна. Энэ тушаалыг гүйцэтгэсний дараа яг ийм зүйл хийх болно.

Docker Compose: Makefiles ашиглан ажлаа хялбарчлах
Docker контейнер барьж байна

  • make start - бүх савыг ажиллуулж байна. Зөвхөн нэг контейнер ажиллуулахын тулд та дараах тушаалыг ашиглаж болно make start c=timescale.

Docker Compose: Makefiles ашиглан ажлаа хялбарчлах
Цагийн хуваарийн савыг ажиллуулж байна

Docker Compose: Makefiles ашиглан ажлаа хялбарчлах
Пинг контейнер ажиллуулж байна

  • make login-timescale - контейнерийн bash сесс руу нэвтэрнэ үү timescale.

Docker Compose: Makefiles ашиглан ажлаа хялбарчлах
Цагийн хуваарийн саванд bash ажиллуулж байна

  • make db-shell - орох psql саванд timescale өгөгдлийн сангийн эсрэг SQL асуулга явуулах.

Docker Compose: Makefiles ашиглан ажлаа хялбарчлах
Timescaledb саванд psql-г ажиллуулж байна

  • make stop - савыг зогсоох.

Docker Compose: Makefiles ашиглан ажлаа хялбарчлах
Цагийн хэмжигдэхүүнийг зогсоож байна

  • make down - савыг зогсоох, зайлуулах. Тодорхой савыг арилгахын тулд та энэ командыг ашиглан хүссэн савыг зааж өгч болно. Жишээлбэл - make down c=timescale буюу make down c=api.

Docker Compose: Makefiles ашиглан ажлаа хялбарчлах
Бүх савыг зогсоох, устгах

Үр дүн

Хэдийгээр 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: Makefiles ашиглан ажлаа хялбарчлах

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх