Unggal sababaraha taun, industri pamekaran software ngalaman parobahan paradigma. Salah sahiji fénoména ieu tiasa dikenal salaku minat anu ningkat dina konsép microservices. Sanajan microservices sanes téhnologi pang anyarna, ngan nembe geus popularitasnya sacara harfiah skyrocketed.
Ladenan monolitik anu ageung ayeuna diganti ku jasa mikro otonom anu mandiri. A microservice bisa dianggap salaku hiji aplikasi nu boga tujuan tunggal jeung pisan husus. Salaku conto, éta tiasa janten DBMS hubungan, aplikasi Express, jasa Solr.
Dinten ieu, sesah ngabayangkeun ngembangkeun sistem parangkat lunak énggal tanpa nganggo jasa mikro. Sareng kaayaan ieu, giliran kami, nuju ka platform Docker.
Docker
panggung
Docker Tulis
teknologi
Nalika damel sareng Docker Compose, file YAML dianggo pikeun ngonpigurasikeun jasa aplikasi sareng ngatur interaksina. Ku kituna Docker Compose mangrupikeun alat pikeun ngajelaskeun sareng ngajalankeun aplikasi Docker multi-wadah.
Dua peti ngajalankeun dina sistem host
GNU Ngadamel
program make
, dasarna mangrupa alat pikeun ngajadikeun otomatis gedong program jeung perpustakaan tina kode sumber. Sacara umum, urang bisa disebutkeun yen make
manglaku ka sagala prosés nu ngalibatkeun executing paréntah sawenang pikeun transformasi sababaraha bahan input kana sababaraha formulir kaluaran, kana sababaraha tujuan. Dina kasus urang, paréntah docker-compose
bakal dirobah jadi tujuan abstrak (
Pikeun ngabejaan program make
ngeunaan naon urang hayang ti eta, urang peryogi file a Makefile
.
Di urang Makefile
bakal ngandung paréntah biasa docker
и docker-compose
, nu dirancang pikeun ngajawab loba masalah. Nyaéta, urang ngobrolkeun ngeunaan assembling wadahna, ngeunaan ngamimitian éta, ngeureunkeunana, ngamimitian deui, ngeunaan ngatur login pangguna kana wadahna, ngeunaan damel sareng log wadahna, sareng ngeunaan ngarengsekeun masalah anu sami.
Kasus Pamakéan Biasa pikeun Docker Compose
Hayu urang bayangkeun aplikasi wéb biasa anu ngagaduhan komponén ieu:
- Database TimescaleDB (Postgres).
- aplikasi Express.js.
- Ping (ngan wadahna, teu ngalakukeun nanaon husus).
Aplikasi ieu peryogi 3 wadah Docker sareng file docker-compose
, nu ngandung parentah pikeun ngatur peti ieu. Unggal wadah bakal gaduh touchpoints béda. Contona, ku wadah timescale
bakal tiasa dianggo kirang langkung sami sareng aranjeunna tiasa dianggo sareng pangkalan data. Nyaéta, éta ngamungkinkeun anjeun pikeun ngalakukeun tindakan ieu:
- Asup kana cangkang Postgres.
- Impor jeung ékspor tabel.
- ciptaan
pg_dump
tabél atawa database.
Wadah aplikasi Express.js, expressjs
, tiasa gaduh kamampuan di handap ieu:
- Nyadiakeun data anyar tina log sistem.
- Login kana cangkang pikeun ngaéksekusi paréntah anu tangtu.
Interaksi jeung Wadahna
Sakali kami parantos nyetél komunikasi antara wadah nganggo Docker Compose, waktosna pikeun komunikasi sareng wadah éta. Dina sistem Docker Compose aya paréntah docker-compose
, pilihan ngarojong -f
, anu ngamungkinkeun anjeun nransferkeun file kana sistem docker-compose.yml
.
Nganggo kamampuan pilihan ieu, anjeun tiasa ngawates interaksi sareng sistem ngan ukur pikeun wadah anu disebatkeun dina file. docker-compose.yml
.
Hayu urang tingali kumaha interaksi sareng wadahna nalika nganggo paréntah docker-compose
. Upami urang ngabayangkeun yén urang kedah asup kana cangkang psql
, teras paréntah anu saluyu tiasa katingali sapertos kieu:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Paréntah anu sami anu henteu dianggo pikeun ngaéksekusi docker-compose
jeung docker
, sigana sapertos kieu:
docker exec -it edp_timescale_1 psql -Upostgres
Punten dicatet yén dina kasus sapertos kitu langkung saé ngagunakeun paréntah docker
, jeung paréntah docker-compose
, sabab ieu ngaleungitkeun kabutuhan pikeun nginget nami wadahna.
Kadua paréntah di luhur henteu sesah. Tapi lamun urang dipaké "wrapper" dina formulir Makefile
, anu bakal masihan kami antarbeungeut dina bentuk paréntah saderhana sareng nyalira nyauran paréntah panjang anu sami, teras hasil anu sami tiasa dihontal sapertos kieu:
make db-shell
Ieu rada atra yén pamakéan Makefile
ngajadikeun gawé kalawan peti loba gampang!
Conto gawé
Dumasar kana diagram proyék di luhur, urang bakal nyiptakeun file di handap ieu 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
Pikeun ngatur konfigurasi Docker Compose sareng berinteraksi sareng wadah anu dijelaskeun, kami bakal nyiptakeun file di handap ieu 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
Seuseueurna paréntah anu dijelaskeun di dieu manglaku ka sadaya wadah, tapi nganggo pilihan c=
ngidinan Anjeun pikeun ngawatesan lingkup paréntah pikeun hiji wadah.
sanggeus Makefile
siap, anjeun tiasa nganggo sapertos kieu:
make help
- ngaluarkeun daptar sadaya paréntah sadia pikeunmake
.
Pitulung dina paréntah sadia
make build
- assembling hiji gambar tinaDockerfile
. Dina conto urang kami nganggo gambar anu tos ayatimescale
иping
. Tapi gambarapi
urang rék ngumpulkeun lokal. Ieu persis naon anu bakal dilakukeun saatos ngalaksanakeun paréntah ieu.
Ngawangun wadah Docker
make start
- ngaluncurkeun sadaya wadah. Pikeun ngajalankeun ngan hiji wadah, anjeun tiasa nganggo paréntah kawasmake start c=timescale
.
Ngajalankeun wadah skala waktu
Ngajalankeun wadah ping
make login-timescale
- login ka sesi bash wadahnatimescale
.
Ngajalankeun bash dina wadah skala waktu
make db-shell
- lawang kapsql
dina hiji wadahtimescale
pikeun ngaéksekusi queries SQL ngalawan database.
Ngajalankeun psql dina wadah timescaledb
make stop
- eureun wadahna.
Ngeureunkeun wadah skala waktu
make down
- eureun jeung nyoplokkeun wadahna. Pikeun miceun wadahna khusus, anjeun tiasa nganggo paréntah ieu pikeun nangtukeun wadah anu dipikahoyong. Salaku conto -make down c=timescale
atawamake down c=api
.
Ngeureunkeun sareng mupus sadaya wadah
hasil
Sanaos Docker Compose masihan kami seueur paréntah pikeun ngatur wadah, sakapeung paréntah ieu tiasa panjang sareng sesah diinget.
Métode pamakean Makefile
mantuan kami ngadegkeun interaksi gancang jeung gampang jeung peti tina file a docker-compose.yml
. Nyaéta, urang ngobrol ngeunaan di handap ieu:
- Pamekar ngan ukur berinteraksi sareng wadah proyék anu dijelaskeun dina
docker-compose.yml
, pagawean teu diganggu ku wadah ngajalankeun séjén. - Upami aya paréntah anu hilap, anjeun tiasa ngaéksekusi paréntahna
make help
tur meunangkeun pitulung dina Paréntah sadia. - Anjeun teu kedah nginget daptar panjang argumen pikeun ngalakukeun tindakan sapertos kéngingkeun éntri log panganyarna atanapi log in kana sistem. Contona, paréntah kawas
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
kabukti kanamake db-shell
. - file
Makefile
Anjeun tiasa sacara fleksibel adaptasi kana éta nalika proyékna tumbuh. Contona, gampang pikeun nambahkeun paréntah pikeun nyieun cadangan database atawa ngalakukeun sagala aksi séjén. - Lamun tim badag pamekar ngagunakeun sarua
Makefile
, ieu streamlines kolaborasi jeung ngurangan kasalahan.
PS Di urang
Pamiarsa Hadirin! Kumaha anjeun ngajadikeun otomatis Docker Compose?
sumber: www.habr.com