perjantaina, kesäkuuta 02, 2023

Docker ja YAML-kielen käyttäminen

Docker on suosittu avoin open source ohjelmistoalusta, jolla voidaan hallita ohjelmistoja ns. konttien avulla. Kontti kerää yhteen ohjelmiston osat ja riippuvuudet siten, että ohjelmisto voidaan siirtää sellaisenaan ympäristöstä ja alustasta toiseen ilman että sitä täytyy muokata. Esimerkiksi kehitys voi tapahtua paikallisella koneella ja tuotantoversiota ajetaan pilvessä olevalla palvelimella.

YAML 

YAML (“Yaml ain’t Markup Language”) on standardi merkintäkieli, jolla kuvataan, miten Docker käyttää erilaisia resursseja. YAML on JSON-tiedostomuodosta johdettu standardi, jota on alettu käyttämään erilaisten ohjelmistojen konfigurointiin eli sen asetusten säätämiseen.  Yksi YAML-merkintäkielen etu on se, että se voi sisältää kommenttirivejä, joka tekee siitä ihmiselle helppolukuisemman kuin JSON.

YAML-kielessä sisennys on tärkeää. Jokainen sisennys tehdään käyttäen kahta välilyöntiä, ei tabulaattoria. Määrittelylohkoja ei eroteta toisistaan tunnistemerkillä, kuten puolipiste.

Docker compose on komento, joka kääntää, käynnistää ja hallitsee tai lopulta poistaa erilaisia palveluja. Sen perusosia ovat

  • image eli asennuskuva

  • context eli ajoaikainen ympäristö

  • dockerfile eli määrittelytiedosto

  • args eli parametrit

    • volumet eli looginen levyvaraus

    • environment lei ympäristö

    • verkkoasetukset

Image eli asennuskuva on käännettävän tai ladattavan koontiversion nimi.

Context kertoo, mitä hakemistoa käytetään Docker-määrittelytiedostolle. Se voi olla myös URL-osoite git repositoryyn.

Dockerfile on tekstidokumentti, joka sisältää komennot, joiden avulla käyttäjä voisi komentoriviltä kääntää toimivan koontiversion. Käytännössä se sisältää komennot ja metatietoa, joiden avulla Docker luo ohjelman käännöksen. Oletusnimi on “Dockerfile”, mutta Dockerfile voi olla eri niminen, ja se löytyy Context-määrittelyn osoittamasta paikasta.

Parametrit

Kontin käyttämä portti määritellään docker compose tiedostossa seuraavasti listana

ports:

- ”2000:2000”

- ”3333:3333”

YAML-kielessä lista määritellään antamalla listalle nimi (”ports”) ja kaksoispiste. Sen alla sisennettynä on listan arvot.

Portit tulee kirjoittaa sulkumerkkien sisälle.

Volumet

Volume on levyvaraus (volume), jonka sisältämät tiedot säilyy myös sen jälkeen kun kontti on poistettu. Isäntäympäristön hakemisto voidaan linkittää  kontissa olevaksi hakemistoksi ja kun kontti pysäytetään, sen käsittelemät tiedot tallentuvat tähän hakemistoon.

Ympäristömuuttujat

Ympäristömuuttujat kertovat Dockerille, mitä versionumeroa tai tunnistetta tulee käyttää kun kontissa oleva ohjelma suoritetaan. Ympäristömuuttuja määritellään YAML-tiedostossa käyttäen YAML-listaa

environment:

  - VARIABLE=value

  - APP_VERSION=1.0

Määritellyt ympäristömuuttujat ovat saatavilla kontissa ajettavalle ympäristölle. Ympäristömuuttujia ei tarvitse ympäröidä lainausmerkeillä.

Jos ympäristömuuttujia on runsaasti, ne voidaan lukea tiedostosta. Tämä määritellään env_file-listana

env_file:

  - ./common_variables.env

  - ./settings.env

Docker lukee kyseisen tiedoston listan ja sen sisältämät arvoparit ja ne ovat näkyvissä kontissa ajettavassa ympäristössä. Jos ohjelmisto riippuu toisesta ohjelmistosta, jota ajetaan toisessa kontissa, se voi lukea samat ympäristömuuttujat yhteisestä tiedostosta.

Verkkoasetukset

Jos ohjelmisto käyttää muita palveluita, sen pitää pystyä vaihtamaan tietoja toisten konttien välillä. Sitä varten luodaan Bridge network eli Docker siltaverkko. Määrittely tapahtuu seuraavasti

networks:

  myapp_network:

    driver: bridge

myapp_network on nimi, jonka haluat antaa verkolle, jota konttisi käyttävät.

Palvelulle pitää myös määritellä vastaava lohko

networks:

  - myapp_network

Tämä lista määrittelee, minkä verkkojen osana kyseinen palvelu toimii. Sinulla voi olla ajossa samasta sovelluksesta eri versiot omissa konteissaan, jotka käyttävät samoja asetuksia, mutta omissa verkoissaan.

Käynnistysjärjestys

Jos ohjelmistokomponentti tai palvelu edellyttää jonkin toisen palvelun olemassaoloa, se voidaan määritellä depends-lohkolla.

depends_on:

  - mongodb

Tämä tarkoittaa sitä, että kyseinen kontti käynnistetään vasta, kun mongodb niminen kontti on käynnistetty. Koska kontissa olevan palvelun käynnistäminen vie oman aikansa, täytyy sovelluksen sisältää logiikka, jolla testataan, että palvelu vastaa kyselyihin. 

Ei kommentteja:

Lähetä kommentti

Voit jättää kirjoitukseen liittyvän kommentin.