Saben sawetara taun, industri pangembangan piranti lunak ngalami owah-owahan paradigma. Salah sawijining fenomena kasebut bisa diakoni minangka minat sing tuwuh ing konsep layanan mikro. Senajan microservices dudu teknologi paling anyar, mung bubar popularitase kanthi harfiah skyrocketed.
Layanan monolitik gedhe saiki diganti dening layanan mikro otonom. Layanan mikro bisa dianggep minangka aplikasi sing nduweni tujuan tunggal lan spesifik. Contone, bisa uga DBMS relasional, aplikasi Express, layanan Solr.
Dina iki, angel mbayangno ngembangake sistem piranti lunak anyar tanpa nggunakake layanan mikro. Lan kahanan iki, ndadékaké kita menyang platform Docker.
docker
Platform
Docker Compose
teknologi
Nalika nggarap Docker Compose, file YAML digunakake kanggo ngatur layanan aplikasi lan ngatur interaksi karo saben liyane. Dadi Docker Compose minangka alat kanggo njlentrehake lan mbukak aplikasi Docker multi-kontainer.
Loro kontaner mlaku ing sistem inang
GNU Gawe
Program kasebut make
, ateges alat kanggo ngotomatisasi bangunan program lan perpustakaan saka kode sumber. Umumé, kita bisa ngomong sing make
ditrapake kanggo sembarang proses sing melu nglakokaké printah kasepakatan kanggo ngowahi sawetara bahan input kanggo sawetara wangun output, kanggo sawetara goal. Ing kasus kita, printah docker-compose
bakal diowahi dadi tujuan abstrak (
Kanggo ngandhani program make
bab apa kita arep saka iku, kita kudu file Makefile
.
Ing kita Makefile
bakal ngemot printah biasa docker
и docker-compose
, sing dirancang kanggo ngatasi akeh masalah. Yaiku, kita ngomong babagan ngumpulake wadhah, babagan miwiti, mungkasi, miwiti maneh, babagan ngatur login pangguna menyang wadhah, babagan nggarap log wadhah, lan ngrampungake masalah liyane sing padha.
Kasus Gunakake Khas kanggo Docker Compose
Coba bayangake aplikasi web biasa sing nduweni komponen ing ngisor iki:
- Database TimescaleDB (Postgres).
- aplikasi Express.js.
- Ping (mung wadhah, ora nindakake apa-apa khusus).
Aplikasi iki mbutuhake 3 wadhah Docker lan file docker-compose
, sing ngemot instruksi kanggo ngatur wadhah kasebut. Saben wadhah bakal duwe titik tutul sing beda. Contone, karo wadhah timescale
bakal bisa digunakake kanthi cara sing padha karo database. Yaiku, ngidini sampeyan nindakake tumindak ing ngisor iki:
- Mlebu menyang cangkang Postgres.
- Impor lan ekspor tabel.
- nggawe
pg_dump
tabel utawa database.
Wadah aplikasi Express.js, expressjs
, bisa duwe kapabilitas ing ngisor iki:
- Nyedhiyakake data anyar saka log sistem.
- Mlebu menyang cangkang kanggo nglakokake perintah tartamtu.
Interaksi karo Wadhah
Sawise kita nyiyapake komunikasi antarane kontaner nggunakake Docker Compose, wektune kanggo komunikasi karo kontaner kasebut. Ing sistem Docker Compose ana prentah docker-compose
, opsi ndhukung -f
, sing ngidini sampeyan nransfer file menyang sistem docker-compose.yml
.
Nggunakake kemampuan pilihan iki, sampeyan bisa mbatesi interaksi karo sistem mung kanggo wadhah sing kasebut ing file kasebut. docker-compose.yml
.
Ayo ndeleng apa interaksi karo kontaner katon nalika nggunakake printah docker-compose
. Yen kita mbayangno yen kita kudu mlebu ing cangkang psql
, banjur printah sing cocog bisa katon kaya iki:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Prentah sing padha ora digunakake kanggo nglakokake docker-compose
lan docker
, bisa uga katon kaya iki:
docker exec -it edp_timescale_1 psql -Upostgres
Wigati dimangerteni manawa ing kasus kaya mengkono, luwih becik nggunakake printah kasebut docker
, lan tim docker-compose
, amarga iki ngilangake kudu ngelingi jeneng wadhah.
Loro-lorone prentah ing ndhuwur ora angel banget. Nanging yen kita nggunakake "wrapper" ing wangun Makefile
, sing bakal menehi antarmuka ing wangun printah sing prasaja lan bakal nelpon printah dawa sing padha, banjur asil sing padha bisa digayuh kaya iki:
make db-shell
Iku cukup ketok sing nggunakake Makefile
nggawe nggarap kontaner luwih gampang!
Contoh kerja
Adhedhasar diagram proyek ing ndhuwur, kita bakal nggawe file ing ngisor iki 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
Kanggo ngatur konfigurasi Docker Compose lan sesambungan karo wadhah sing diterangake, kita bakal nggawe file ing ngisor iki 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
Umume prentah sing diterangake ing kene ditrapake kanggo kabeh kontaner, nanging nggunakake pilihan kasebut c=
ngijini sampeyan kanggo matesi orane katrangan saka printah siji wadhah.
Sawise Makefile
siap, sampeyan bisa nggunakake kaya iki:
make help
- nerbitake dhaptar kabeh printah kasedhiya kanggomake
.
Bantuan ing printah kasedhiya
make build
- assembling gambar sakaDockerfile
. Ing conto kita nggunakake gambar sing wis anatimescale
иping
. Nanging gambarapi
kita pengin ngumpulake lokal. Iki persis apa sing bakal ditindakake sawise nglakokake printah iki.
Nggawe wadhah Docker
make start
- ngetokake kabeh kontaner. Kanggo miwiti mung siji wadhah, sampeyan bisa nggunakake printah kayamake start c=timescale
.
Mbukak wadhah skala wektu
Mbukak wadhah ping
make login-timescale
- mlebu menyang sesi bash saka wadhahtimescale
.
Mlaku bash ing wadhah skala wektu
make db-shell
- mlebu menyangpsql
ing wadhahtimescale
kanggo nglakokake pitakon SQL marang database.
Mlaku psql ing wadhah timescaledb
make stop
- mungkasi wadhah.
Mungkasi wadhah skala wektu
make down
- mungkasi lan mbusak kontaner. Kanggo mbusak wadhah tartamtu, sampeyan bisa nggunakake printah iki nemtokake wadhah sing dikarepake. Tuladhane -make down c=timescale
utawamake down c=api
.
Mungkasi lan mbusak kabeh wadhah
Hasil
Senajan Docker Compose menehi kita set sugih saka printah kanggo ngatur wadhah, kadhangkala printah iki bisa dadi dawa lan angel kanggo elinga.
Cara panggunaan Makefile
mbantu kita nggawe interaksi cepet lan gampang karo kontaner saka file docker-compose.yml
. Yaiku, kita ngomong babagan ing ngisor iki:
- Pangembang mung sesambungan karo wadhah proyek sing diterangake ing
docker-compose.yml
, karya ora diganggu dening wadhah mlaku liyane. - Yen prentah tartamtu dilalekake, sampeyan bisa nglakokake perintah kasebut
make help
lan njaluk bantuan ing printah kasedhiya. - Sampeyan ora kudu ngelingi dhaptar argumen sing dawa kanggo nindakake tindakan kayata njupuk entri log paling anyar utawa mlebu menyang sistem. Contone, printah kaya
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
malih dadimake db-shell
. - berkas
Makefile
Sampeyan bisa adaptasi kanthi fleksibel nalika proyek kasebut tuwuh. Contone, gampang nambah printah kanggo nggawe serep database utawa nindakake tindakan liyane. - Yen tim gedhe pangembang nggunakake padha
Makefile
, iki streamlines kolaborasi lan nyuda kasalahan.
PS Ing kita
Para pamaca ingkang kinurmatan! Kepiye cara ngotomatisasi Docker Compose?
Source: www.habr.com