Хэдэн жил тутам програм хангамж хөгжүүлэх салбар парадигмын өөрчлөлтийг хийдэг. Эдгээр үзэгдлүүдийн нэг нь микро үйлчилгээний үзэл баримтлалыг сонирхож байгаа явдал гэж хүлээн зөвшөөрч болно. Хэдийгээр бичил үйлчилгээ нь хамгийн сүүлийн үеийн технологи биш ч саяхан түүний нэр хүнд огцом өссөн.
Том цул үйлчилгээнүүд одоо бие даасан, бие даасан бичил үйлчилгээнүүдээр солигдож байна. Микро үйлчилгээг нэг бөгөөд маш тодорхой зорилготой програм гэж ойлгож болно. Жишээлбэл, энэ нь харилцааны DBMS, Express application, Solr үйлчилгээ байж болно.
Өнөө үед микро үйлчилгээ ашиглахгүйгээр шинэ програм хангамжийн системийг хөгжүүлэхийг төсөөлөхөд бэрх юм. Энэ байдал нь эргээд биднийг Docker платформ руу хөтөлж байна.
Docker
Платформ
Доктор зохиох
Технологи
Docker Compose-тэй ажиллахдаа YAML файлыг програмын үйлчилгээг тохируулах, тэдгээрийн харилцан үйлчлэлийг зохион байгуулахад ашигладаг. Тиймээс Docker Compose нь олон контейнерт Docker програмуудыг тайлбарлах, ажиллуулах хэрэгсэл юм.
Хост систем дээр ажиллаж байгаа хоёр контейнер
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
.
Боломжтой командуудын тусламж
make build
-аас зураг угсрахDockerfile
. Бидний жишээн дээр бид одоо байгаа зургуудыг ашигласанtimescale
иping
. Гэхдээ зурагapi
Бид орон нутгаас цуглуулахыг хүсч байна. Энэ тушаалыг гүйцэтгэсний дараа яг ийм зүйл хийх болно.
Docker контейнер барьж байна
make start
- бүх савыг ажиллуулж байна. Зөвхөн нэг контейнер ажиллуулахын тулд та дараах тушаалыг ашиглаж болноmake start c=timescale
.
Цагийн хуваарийн савыг ажиллуулж байна
Пинг контейнер ажиллуулж байна
make login-timescale
- контейнерийн bash сесс руу нэвтэрнэ үүtimescale
.
Цагийн хуваарийн саванд bash ажиллуулж байна
make db-shell
- орохpsql
савандtimescale
өгөгдлийн сангийн эсрэг SQL асуулга явуулах.
Timescaledb саванд psql-г ажиллуулж байна
make stop
- савыг зогсоох.
Цагийн хэмжигдэхүүнийг зогсоож байна
make down
- савыг зогсоох, зайлуулах. Тодорхой савыг арилгахын тулд та энэ командыг ашиглан хүссэн савыг зааж өгч болно. Жишээлбэл -make down c=timescale
буюуmake down c=api
.
Бүх савыг зогсоох, устгах
Үр дүн
Хэдийгээр 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 Compose-г хэрхэн автоматжуулах вэ?
Эх сурвалж: www.habr.com