Nasadenie D2000 aplikácie v Dockeri pozostáva z viacerých kontajnerov, medzi ktorými sú určité závislosti. Preto sa na konfiguráciu nasadenia používa Docker Compose. Príklad nasadenia D2000 aplikácie cez Docker Compose pozostáva zo súborov definujúcich premenné (.env a db.env) heslá (db_admin_password.txt, eda_password.txt), licenčný súbor D2000 (LicenceRun.code) a samotného compose.yaml.
Súbor .env sa využíva na interpoláciu - v ňom definované premenné je možné použiť v compose.yaml. Okrem toho sa premenné z tohto súboru spolu s premennými definovanými v db.env posielajú ako premenné prostredia do inicializačného kontajnera. Ich význam je bližšie popísaný v dokumentácii inicializačného kontajnera D2000.
D2APP=docker_compose # Názov vytváranej aplikácie (odporúčané malými písmenami) D2APPDESC=Docker D2000 application # Popis vytváranej aplikácie D2ARCHIVES=self # Voliteľne, čiarkou oddelený zoznam archívov #D2REDUNDANT_KERNEL=a:2 # Voliteľne, názov a priorita redundantného kernela #D2REDUNDANT_KERNELS=a:d2-knl-a,b:d2-knl-b # Voliteľne, čiarkou oddelený zoznam redundantných kernelov D2TAG=v26.00.082 # Tag/verzia použitých image-ov #EDA_GROUP=EDA # Voliteľne, názov EDA server skupiny #EDA_USER=docker_compose_eda # Voliteľne, názov EDA databázového používateľa IMAGE_REGISTRY=registry.ipesoft.com # Adresa registra image-ov TZ=Europe/Bratislava # Predvolené časové pásmo WDFREQ=60 # Frekvencia watchdog-ov v sekundách
D2APPDB=postgres # Voliteľne, názov existujúcej databázy, ktorá bude využívaná ako aplikačná PGHOST=127.0.0.1 # Adresa bežiaceho PostgreSQL servera PGPORT=5432 # Port bežiaceho PostgreSQL servera PGUSER=postgres # Meno databázového administrátora
Súbor compose.yaml pozostáva z troch základných sekcií:
- x-service-templates: Obsahuje šablóny D2000 služieb (kontajnerov/procesov)
- services: Obsahuje definície samotných služieb.
- secrets: Obsahuje zoznam súborov s heslami, ktoré sú mapované do kontajnerov.
Šablóny služieb
Šablóna d2-service je základná šablóna D2000 procesu, kde je potrebné v sekcii volumes definovať mapovanie vybraných adresárov v kontajneri na perzistentné úložisko. Ďalej, v sekcii environment je potrebné definovať časové pásmo v premennej TZ (zoznam časových pásiem), inak celý kontajner pobeží v časovom pásme UTC. Táto sekcia definuje spoločné premenné prostredia pre kontajnery vychádzajúce z tejto šablóny. Okrem premennej TZ je tu možné podľa potreby doplniť ďalšie premenné.
# Definícia perzistentného úložiska mapovaného na adresárovú štruktúru hostiteľského stroja (/srv/docker/d2000/*)
volumes:
- type: bind
source: /srv/docker/d2000/${D2APP}.config
target: /config
- type: bind
source: /srv/docker/d2000
target: /opt/d2000/app
- type: bind
source: /srv/docker/d2000/${D2APP}.logs
target: /opt/d2000/log
Šablóna d2-service-depends_on-knl vychádza zo šablóny d2-service a definuje závislosť behu služby na zdraví služby d2-knl, ktorá reprezentuje proces D2000 server. Služba vychádzajúca z tejto šablóny teda bude naštartovaná až keď beži D2000 server a hlási sa ako "healthy".
Definície služieb
Každý D2000 process je reprezenovaný jednou službou v docker compose definovanou v sekcii services. Cez meno služby je v rámci Docker siete dostupný každý kontajner. Preddefinované názvoslovie služieb vychádza z názvu D2000 procesu s malými písmenami: d2-<prípona procesu>-<meno procesu>. Službe sa definuje image, ktorý má byť použitý na štart kontajnera a parametre štartovaného procesu (atribút command). Šablóna, z ktorej služba vychádza, je učená syntaxou <<: <*názov šablóny>. Kompletný popis syntaxe je možné nájsť v dokumentácii fragmentov.
services:
d2-evh-test:
image: ${IMAGE_REGISTRY}/ipesoft/d2/event_java:${D2TAG}
<<: *d2-service-depends_on-knl
command: [ "/C${D2APP}", "/Sd2-knl", "/F${WDFREQ}", "/WTEST" ]
Pre procesy, ktoré otvárajú porty, je potrebné ich vymenovať v atribútoch expose a ports. Takýmto procesom je možné definovať aj jednoduchý health check kontrolou otvorenosti daného portu.
healthcheck: # Overuje pripojenie na port 3119 test: [ "CMD", "/bin/bash", "-c", "(echo -n> /dev/tcp/127.0.0.1/3119) &> /dev/null" ] start_period: 2m # Prve 2 minúty od štartu kontajnera skúša každých 5 (start_interval) sekúnd, až kým neuspeje - služba je healthy. start_interval: 5s interval: 1m # Potom kontroluje každú minútu retries: 1 # a už pri prvom zlyhaní je "unhealthy".
Procesom vyžadujúcim špeciálne povolenia capabilities sa tieto zadávajú atribútom cap_add.
Špeciálnou službou je inicializačný kontajner d2-init, ktorý ako jediný zo služieb nemá povolený automatický reštart, pretože sa má vykonať len raz, pri štarte. Do svojich premenných prostredia vkladá premenné definované v .env súbore aj v db.env. Okrem toho využíva aj heslá definované v secret súboroch.
Definície hesiel
Heslá sú definované v sekcii secrets, kde sú načítavané zo súborov umiestených v rovnakom adresári ako samotný compose.yaml. Medzi preddefinované secrets patrí licenčný súbor D2000 (LicenceRun.code), heslo databázového administrátora (db_admin_password.txt) a voliteľne heslo EDA používateľa (eda_password.txt). Použitie hesla kontajnerom sa definuje v sekcii secrets príslušnej definíce služby. Docker compose automaticky zabezpečí mapovanie hesla do súboru v kontajneri na ceste /run/secrets/<secret>. Inicializačný kontajner potrebuje všetky heslá. Jediný proces D2000 používajúci heslo zo secret (konkrétne eda_password) je EDA server, ktorému sa súbor s heslom do databázy odovzdáva ako štartovací parameter.
# EDA server využíva secret eda_password mapovaný ako súbor v kontajneri /run/secrets/eda_password
d2-eds-self:
image: ${IMAGE_REGISTRY}/ipesoft/d2/edaserver_odbc:${D2TAG}
<<: *d2-service-depends_on-knl
command: [ "/C${D2APP}", "/Sd2-knl", "/F${WDFREQ}", "/EDAG${EDA_GROUP}", "/EDAP3121", "/EDADSN${D2APP}.APPDB", "/EDAUSR${EDA_USER}", "/EDAFPWD/run/secrets/eda_password" ]
secrets:
- eda_password
# ...
Súvisiace stránky
Pridať komentár