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 popísaný v dokumentácii inicializačného kontajnera D2000.

.env
D2APP=docker_compose                         # Názov vytváranej aplikácie
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
db.env
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 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.

Šablony 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é.

Š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 "healty".

Definície služieb

Každý D2000 process je reprezenovaný jednou službou v docker compose. 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.

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.

Health check pre D2000 server
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. Inicializačný kontajner potrebuje všetky heslá. Jediný proces D2000 používajúci heslo zo secret (eda_password) je EDA server, ktorému sa súbor s heslom odovzdáva ako štartovací parameter.

EDA server
# 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
  # ...


Napíšte komentár