සෑම වසර කිහිපයකට වරක්, මෘදුකාංග සංවර්ධන කර්මාන්තය සුසමාදර්ශී වෙනසකට භාජනය වේ. මෙම සංසිද්ධිවලින් එකක් මයික්රො සර්විස් සංකල්පය කෙරෙහි වැඩෙන උනන්දුව ලෙස හඳුනාගත හැකිය. ක්ෂුද්ර සේවා නවීන තාක්ෂණය නොවුනත්, එහි ජනප්රියත්වය වචනාර්ථයෙන් අහස උසට නැඟී ඇත්තේ මෑතදී පමණි.
විශාල මොනොලිතික් සේවාවන් දැන් ස්වාධීන, ස්වයංක්රීය ක්ෂුද්ර සේවා මගින් ප්රතිස්ථාපනය වේ. ක්ෂුද්ර සේවාවක් තනි සහ ඉතා නිශ්චිත අරමුණක් ඉටු කරන යෙදුමක් ලෙස සැලකිය හැකිය. උදාහරණයක් ලෙස, එය සම්බන්ධක DBMS, Express යෙදුමක්, 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 යෙදුම.
- පිං (කන්ටේනරයක් පමණි, විශේෂ කිසිවක් නොකරයි).
මෙම යෙදුමට Docker බහාලුම් 3ක් සහ ගොනුවක් අවශ්ය වේ docker-compose
, මෙම බහාලුම් කළමනාකරණය සඳහා උපදෙස් අඩංගු වේ. සෑම කන්ටේනරයකම විවිධ ස්පර්ශක ස්ථාන ඇත. උදාහරණයක් ලෙස, කන්ටේනරයක් සමඟ timescale
ඔවුන් දත්ත සමුදායන් සමඟ වැඩ කරන ආකාරයටම වැඩ කිරීමට හැකි වනු ඇත. එනම්, එය ඔබට පහත ක්රියා සිදු කිරීමට ඉඩ සලසයි:
- Postgres කවචයට ඇතුල් වීම.
- වගු ආනයනය සහ අපනයනය.
- නිර්මාණය
pg_dump
වගු හෝ දත්ත සමුදායන්.
Express.js යෙදුම් බහාලුම, expressjs
, පහත හැකියාවන් තිබිය හැක:
- පද්ධති ලොගයෙන් නැවුම් දත්ත සැපයීම.
- ඇතැම් විධානයන් ක්රියාත්මක කිරීමට shell වෙත පිවිසෙන්න.
බහාලුම් සමඟ අන්තර් ක්රියා කිරීම
අපි Docker Compose භාවිතයෙන් බහාලුම් අතර සන්නිවේදනය සැකසූ පසු, එම බහාලුම් සමඟ සන්නිවේදනය කිරීමට කාලයයි. Docker Compose පද්ධතිය තුළ විධානයක් ඇත docker-compose
, උපකාරක විකල්පය -f
, පද්ධතියට ගොනුවක් මාරු කිරීමට ඔබට ඉඩ සලසයි docker-compose.yml
.
මෙම විකල්පයේ හැකියාවන් භාවිතා කරමින්, ඔබට පද්ධතිය සමඟ අන්තර්ක්රියා සීමා කළ හැක්කේ ගොනුවේ සඳහන් කර ඇති බහාලුම්වලට පමණි. docker-compose.yml
.
විධාන භාවිතා කරන විට බහාලුම් සමඟ අන්තර්ක්රියා කෙබඳුදැයි බලමු docker-compose
. අපි හිතුවොත් අපි shell එකට ලොග් වෙන්න ඕනේ කියලා 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
අපට දේශීයව එකතු කිරීමට අවශ්යයි. මෙම විධානය ක්රියාත්මක කිරීමෙන් පසුව සිදු කරනු ලබන්නේ මෙයයි.
ඩොකර් කන්ටේනරයක් තැනීම
make start
- සියලුම බහාලුම් දියත් කිරීම. එක් බහාලුමක් පමණක් දියත් කිරීමට, ඔබට වැනි විධානයක් භාවිතා කළ හැකියmake start c=timescale
.
කාල පරාසයේ බහාලුම් ධාවනය කිරීම
පිං කන්ටේනරයක් ධාවනය කිරීම
make login-timescale
- කන්ටේනරයේ බාෂ් සැසියට පිවිසෙන්නtimescale
.
කාලපරිමාණ කන්ටේනරයක බෂ් ධාවනය කිරීම
make db-shell
- ඇතුල්වීමpsql
කන්ටේනරයකtimescale
දත්ත සමුදායට එරෙහිව SQL විමසුම් ක්රියාත්මක කිරීමට.
කාල පරිමාණයේ බහාලුමක් තුළ 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
, මෙය සහයෝගීතාවය විධිමත් කරන අතර දෝෂ අඩු කරයි.
ප්රාදේශීය සභා අපේ
හිතවත් පා readers කයින්! ඔබ Docker Compose ස්වයංක්රීය කරන්නේ කෙසේද?
මූලාශ්රය: www.habr.com