Muutaman vuoden välein ohjelmistokehitysteollisuus käy läpi paradigman muutoksen. Yksi näistä ilmiöistä voidaan tunnistaa kasvavana kiinnostuksena mikropalvelujen käsitettä kohtaan. Vaikka mikropalvelut eivät ole uusin tekniikka, niiden suosio on noussut kirjaimellisesti pilviin vasta viime aikoina.
Suuret monoliittiset palvelut korvataan nyt itsenäisillä, itsenäisillä mikropalveluilla. Mikropalvelua voidaan pitää sovelluksena, joka palvelee yhtä ja hyvin erityistä tarkoitusta. Se voi olla esimerkiksi relaatiotietokantajärjestelmä, Express-sovellus tai Solr-palvelu.
Nykyään on vaikea kuvitella uuden ohjelmistojärjestelmän kehittämistä ilman mikropalveluita. Ja tämä tilanne puolestaan johtaa meidät Docker-alustalle.
Satamatyöläinen
Foorumi
Docker Compose
Технология
Kun työskentelet Docker Composen kanssa, YAML-tiedostoa käytetään sovelluspalvelujen määrittämiseen ja niiden keskinäisen vuorovaikutuksen järjestämiseen. Docker Compose on siksi työkalu monisäilöisten Docker-sovellusten kuvaamiseen ja suorittamiseen.
Kaksi konttia käynnissä isäntäjärjestelmässä
GNU-merkki
Ohjelma make
, on pohjimmiltaan työkalu ohjelmien ja kirjastojen rakentamisen automatisointiin lähdekoodista. Yleisesti ottaen voimme sanoa niin make
koskee kaikkia prosesseja, joissa suoritetaan mielivaltaisia komentoja joidenkin syöttömateriaalien muuntamiseksi johonkin tulostusmuotoon jotakin tarkoitusta varten. Meidän tapauksessamme komennot docker-compose
muunnetaan abstrakteiksi tavoitteiksi (
Kerro ohjelmalle make
siitä, mitä haluamme siltä, tarvitsemme tiedoston Makefile
.
Meidän Makefile
sisältää säännöllisiä komentoja docker
и docker-compose
, jotka on suunniteltu ratkaisemaan monia ongelmia. Puhumme nimittäin kontin kokoamisesta, käynnistämisestä, pysäyttämisestä, uudelleenkäynnistämisestä, käyttäjien kirjautumisen järjestämisestä konttiin, konttilokien kanssa työskentelystä ja muiden vastaavien ongelmien ratkaisemisesta.
Docker Composen tyypillisiä käyttötapauksia
Kuvitellaan tavallinen verkkosovellus, jossa on seuraavat komponentit:
- TimescaleDB-tietokanta (Postgres).
- Express.js-sovellus.
- Ping (vain kontti, ei tee mitään erityistä).
Tämä sovellus tarvitsee 3 Docker-säiliötä ja tiedoston docker-compose
, joka sisältää ohjeet näiden säilöjen hallintaan. Jokaisella säiliöllä on erilaiset kosketuspisteet. Esimerkiksi säiliöllä timescale
on mahdollista työskennellä suunnilleen samalla tavalla kuin tietokantojen kanssa. Nimittäin sen avulla voit suorittaa seuraavat toiminnot:
- Kirjautuminen Postgres-kuoreen.
- Pöytien tuonti ja vienti.
- luominen
pg_dump
taulukoita tai tietokantoja.
Express.js-sovellussäilö, expressjs
, voi sisältää seuraavat ominaisuudet:
- Tuoreiden tietojen toimittaminen järjestelmälokista.
- Kirjaudu sisään komentotulkkiin suorittaaksesi tiettyjä komentoja.
Vuorovaikutus säilöjen kanssa
Kun olemme määrittäneet viestinnän säilöjen välillä Docker Composella, on aika kommunikoida näiden säiliöiden kanssa. Docker Compose -järjestelmässä on komento docker-compose
, tukivaihtoehto -f
, jonka avulla voit siirtää tiedoston järjestelmään docker-compose.yml
.
Tämän vaihtoehdon ominaisuuksien avulla voit rajoittaa vuorovaikutusta järjestelmän kanssa vain tiedostossa mainittuihin säilöihin docker-compose.yml
.
Katsotaanpa, miltä vuorovaikutus säilöjen kanssa näyttää komentoja käytettäessä docker-compose
. Jos kuvittelemme, että meidän on kirjauduttava kuoreen psql
, vastaavat komennot voivat näyttää tältä:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Sama komento, jota ei käytetä suorittamiseen docker-compose
Ja docker
, saattaa näyttää tältä:
docker exec -it edp_timescale_1 psql -Upostgres
Huomaa, että tällaisissa tapauksissa on aina parempi käyttää komentoa docker
, ja komento docker-compose
, koska tämä poistaa tarpeen muistaa säilöjen nimiä.
Molemmat yllä olevat komennot eivät ole niin vaikeita. Mutta jos käytimme "käärettä" muodossa Makefile
, joka antaisi meille käyttöliittymän yksinkertaisten komentojen muodossa ja kutsuisi itse samanlaisia pitkiä komentoja, niin samat tulokset voitaisiin saavuttaa näin:
make db-shell
On aivan selvää, että käyttö Makefile
tekee konttien kanssa työskentelystä paljon helpompaa!
Toimiva esimerkki
Yllä olevan projektikaavion perusteella luomme seuraavan tiedoston 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
Luomme seuraavan tiedoston, jotta voimme hallita Docker Compose -kokoonpanoa ja olla vuorovaikutuksessa sen kuvaamien säilöjen kanssa 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
Suurin osa tässä kuvatuista komennoista koskee kaikkia säilöjä, mutta käyttämällä vaihtoehtoa c=
voit rajoittaa komennon laajuuden yhteen säilöön.
Jälkeen Makefile
valmis, voit käyttää sitä näin:
make help
— antaa luettelon kaikista käytettävissä olevista komennoistamake
.
Ohje käytettävissä oleviin komentoihin
make build
- kuvan kokoaminenDockerfile
. Esimerkissämme käytimme olemassa olevia kuviatimescale
иping
. Mutta kuvaapi
haluamme kerätä paikallisesti. Juuri näin tehdään tämän komennon suorittamisen jälkeen.
Docker-kontin rakentaminen
make start
— kaikkien konttien laskeminen vesille. Jos haluat käynnistää vain yhden säilön, voit käyttää komentoa, kutenmake start c=timescale
.
Suoritetaan aikaskaalaussäilöä
Ping-säiliön käyttäminen
make login-timescale
— kirjaudu sisään säilön bash-istuntoontimescale
.
Suoritetaan bashia aikaskaalaussäiliössä
make db-shell
- sisäänkäyntipsql
säiliössätimescale
suorittaa SQL-kyselyitä tietokantaa vastaan.
Psql:n suorittaminen timescaledb-säiliössä
make stop
— konttien pysäyttäminen.
Aikataulukontin pysäyttäminen
make down
— säiliöiden pysäyttäminen ja poistaminen. Voit poistaa tietyn säilön tällä komennolla määrittämällä haluamasi säilön. Esimerkiksi -make down c=timescale
taimake down c=api
.
Kaikkien säilöjen pysäyttäminen ja poistaminen
Tulokset
Vaikka Docker Compose antaa meille runsaasti komentoja säilöjen hallintaan, näistä komennoista voi joskus tulla pitkiä ja vaikeita muistaa.
Käyttötapa Makefile
auttoi meitä luomaan nopean ja helpon vuorovaikutuksen tiedostojen säilöjen kanssa docker-compose.yml
. Puhumme nimittäin seuraavista:
- Kehittäjä on vuorovaikutuksessa vain kohdassa kuvattujen projektisäilöjen kanssa
docker-compose.yml
, muut käynnissä olevat kontit eivät häiritse työtä. - Jos jokin komento unohtuu, voit suorittaa komennon
make help
ja saat apua käytettävissä oleviin komentoihin. - Sinun ei tarvitse muistaa pitkiä argumenttiluetteloita suorittaaksesi toimia, kuten uusimpien lokimerkintöjen hankkimista tai järjestelmään kirjautumista. Esimerkiksi komento kuten
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
muuttuumake db-shell
. - tiedosto
Makefile
Voit mukautua siihen joustavasti projektin kasvaessa. On esimerkiksi helppo lisätä komento tietokannan varmuuskopion luomiseksi tai minkä tahansa muun toiminnon suorittamiseksi. - Jos suuri joukko kehittäjiä käyttää samaa
Makefile
, tämä virtaviivaistaa yhteistyötä ja vähentää virheitä.
PS. Meidän
Hyvä lukijat! Kuinka automatisoit Docker Composen?
Lähde: will.com