VM vai Docker?

Kuinka ymmärtää, että tarvitset Dockerin etkä virtuaalikonetta? Sinun on määritettävä, mitä tarkalleen haluat eristää. Jos haluat eristää järjestelmän taatuilla resursseilla ja virtuaalisella laitteistolla, valinnan tulee jäädä virtuaalikoneelle. Jos sinun on eristettävä käynnissä olevat sovellukset erillisinä järjestelmäprosesseina, tarvitset Dockerin.

Joten mitä eroa on Docker-säilöillä ja virtuaalikoneilla?

Virtuaalikone (VM) on virtuaalitietokone, jossa on kaikki virtuaalilaitteet ja virtuaalinen kiintolevy, jolle on asennettu uusi itsenäinen käyttöjärjestelmä virtuaalisten laiteajureiden, muistinhallinnan ja muiden komponenttien kanssa. Eli saamme abstraktion fyysisestä laitteistosta, jonka avulla voit ajaa useita virtuaalisia tietokoneita yhdellä tietokoneella.
Asennettu VM voi viedä levytilaa eri tavoin:

  • kiinteä kiintolevytila, joka mahdollistaa nopeamman pääsyn virtuaaliselle kiintolevylle ja välttää tiedostojen pirstoutumisen;
  • dynaaminen muistin varaus. Lisäsovelluksia asennettaessa muistia varataan dynaamisesti niille, kunnes se saavuttaa sille varatun enimmäismäärän.

Mitä enemmän virtuaalikoneita palvelimella on, sitä enemmän ne vievät tilaa ja vaativat myös jatkuvan ympäristön tuen, jota sovelluksesi tarvitsee toimiakseen.

Satamatyöläinen on ohjelmisto konttipohjaisten sovellusten rakentamiseen. Säilöillä ja virtuaalikoneilla on samanlaiset edut, mutta ne toimivat eri tavalla. Kontit vievät vähemmän tilaa, koska käyttää liikaa isäntäjärjestelmän jaettuja resursseja kuin VM, koska toisin kuin VM, tarjoaa virtualisoinnin käyttöjärjestelmätasolla, ei laitteistotasolla. Tämä lähestymistapa tarjoaa vähemmän muistitilaa, nopeamman käyttöönoton ja helpomman skaalauksen.

Säiliö tarjoaa tehokkaamman mekanismin sovellusten kapseloimiseen tarjoamalla tarvittavat rajapinnat isäntäjärjestelmään. Tämä ominaisuus sallii säilöjen jakaa järjestelmän ytimen, jossa jokainen säilö toimii erillisenä pääkäyttöjärjestelmän prosessina, jolla on oma joukko muistialueita (oma virtuaalinen osoiteavaruus). Koska kunkin kontin virtuaalinen osoiteavaruus on oma, eri muistialueille kuuluvia tietoja ei voi muuttaa.
Dockerin alkuperäinen käyttöjärjestelmä on Linux (Dockeria voidaan käyttää myös Windowsissa ja MacOS:ssa), se käyttää tärkeimpiä etujaan, joiden avulla se voi järjestää jaetun ytimen. Docker-säiliöiden julkaisu Windowsissa tapahtuu Linux-virtuaalikoneen sisällä, koska kontit jakavat isäntäjärjestelmän käyttöjärjestelmän ja niiden pääkäyttöjärjestelmä on Linux.

Kontti - miten se toimii?

Astia on sovellustason abstraktio, joka yhdistää koodin ja riippuvuudet. Säilöt luodaan aina kuvista lisäämällä kirjoitettava yläkerros ja alustamalla erilaisia ​​parametreja. Koska säilöllä on oma kirjoituskerros ja kaikki muutokset tallennetaan tähän tasoon, useat säilöt voivat jakaa pääsyn samaan pääkuvaan.

Jokainen säilö voidaan määrittää tiedoston kautta docker-compose-projektissa, joka sisältyy pääratkaisuun, docker-compose.yml. Siellä voit asettaa erilaisia ​​parametreja, kuten kontin nimen, portit, tunnisteet, resurssirajoitukset, riippuvuudet muiden säiliöiden välillä. Jos et määritä säilön nimeä asetuksissa, Docker luo uuden säilön joka kerta ja antaa sille nimen satunnaisesti.

Kun säilö käynnistetään kuvasta, Docker liittää luku-/kirjoitustiedostojärjestelmän alla olevien kerrosten päälle. Täällä suoritetaan kaikki prosessit, jotka haluamme Docker-säilön ajavan.

Kun Docker käynnistää säilön ensimmäisen kerran, alkuperäinen luku-/kirjoituskerros on tyhjä. Kun muutoksia tapahtuu, niitä sovelletaan kyseiseen kerrokseen; Jos esimerkiksi haluat muokata tiedostoa, tiedosto kopioidaan alla olevasta vain luku -tasosta luku-kirjoitustasolle.
Tiedoston vain luku -versio on edelleen olemassa, mutta se on nyt piilotettu kopion alle. Tilavuuksia käytetään tietojen tallentamiseen säiliön elinkaaresta riippumatta. Volyymit alustetaan, kun säilö luodaan.

Miten kuva liittyy säilöön?

kuva - kunkin säiliön pääelementti. Kuva luodaan projektiin lisätystä Docker-tiedostosta, ja se on joukko tiedostojärjestelmiä (tasoja), jotka on kerrostettu päällekkäin ja ryhmitelty yhteen, vain luettavissa; kerrosten enimmäismäärä on 127.

Jokaisen kuvan ytimessä on peruskuva, jonka määrittää FROM-komento - aloituspiste Dockerfile-kuvaa luotaessa. Jokainen kerros on vain luku -taso, ja sitä edustaa yksi Docker-tiedostoon kirjoitettu komento, joka muokkaa tiedostojärjestelmää.
Näiden tasojen yhdistämiseksi yhdeksi kuvaksi Docker käyttää edistynyttä monikerroksista Union-tiedostojärjestelmää (AuFS on rakennettu UnionFS:n päälle), jolloin eri tiedostotasojen tiedostot ja hakemistot voivat mennä läpinäkyvästi päällekkäin ja luoda niihin liittyvän tiedostojärjestelmän.

Tasot sisältävät metatietoja, joiden avulla voit tallentaa asiaan liittyviä tietoja kustakin tasosta suoritus- ja rakennusaikana. Jokainen kerros sisältää linkin seuraavaan tasoon. Jos tasossa ei ole linkkiä, tämä on kuvan ylin kerros.

Dockerfile voi sisältää komentoja, kuten:

  • FROM - sisääntulopiste kuvan muodostuksessa;
  • MAINAINER - kuvan omistajan nimi;
  • RUN - komennon suoritus kuvan kokoonpanon aikana;
  • ADD - isäntätiedoston kopioiminen uuteen kuvaan, jos määrität URL-tiedoston, Docker lataa sen määritettyyn hakemistoon;
  • ENV - ympäristömuuttujat;
  • CMD - aloittaa uuden säilön luomisen kuvan perusteella;
  • ENTRYPOINT - Komento suoritetaan, kun kontti käynnistetään.
  • WORKDIR on työhakemisto CMD-komennon suorittamista varten.
  • KÄYTTÄJÄ – Asettaa kuvasta luodun säilön UID:n.
  • VOLUME - Liittää isäntähakemiston säilöön.
  • EXPOSE on joukko portteja, joita kuunnellaan säiliössä.

Miten UnionFS toimii?

UnionFS - palvelupinotiedostojärjestelmä (FS) Linuxille ja FreeBSD:lle. Tämä FS toteuttaa kopiointi-kirjoitusmekanismin (Copy-On-Write, COW). UnionFS:n työyksikkö on kerros, jokaista kerrosta tulee pitää erillisenä täysimittaisena tiedostojärjestelmänä, jolla on hakemistohierarkia itse juuresta. UnionFS luo union mountin muille tiedostojärjestelmille ja antaa sinun yhdistää läpinäkyvästi tiedostoja ja hakemistoja eri tiedostojärjestelmistä (jota kutsutaan haaraksi) yhdeksi linkitetyksi tiedostojärjestelmäksi, joka on läpinäkyvä käyttäjälle.

Hakemistojen, joilla on samat polut, sisältö näytetään yhdessä yhdessä yhdistetyssä hakemistossa (samassa nimiavaruudessa) tuloksena olevassa tiedostojärjestelmässä.

UnionFS yhdistää kerrokset seuraavien periaatteiden mukaisesti:

  • yhdestä kerroksesta tulee ylimmän tason kerros, toisesta ja sitä seuraavista kerroksista tulee alemman tason kerroksia;
  • kerrosobjektit ovat käyttäjän ulottuvilla "ylhäältä alas", ts. jos pyydetty objekti on "ylemmässä" kerroksessa, se palautetaan riippumatta siitä, onko samanniminen objekti "alemmassa" tasossa; muussa tapauksessa "alempi" kerroksen objekti palautetaan; jos pyydettyä objektia ei ole siellä eikä siellä, palautetaan virhe "Ei tällaista tiedostoa tai hakemistoa";
  • työkerros on "ylempi", eli kaikki käyttäjän toimet tietojen muuttamiseksi näkyvät vain ylimmän tason kerroksessa vaikuttamatta alemman tason kerrosten sisältöön.

Docker on yleisin teknologia konttien käyttämiseen sovellustyössä. Siitä on tullut standardi tällä alueella, ja se perustuu Linux-ytimen tarjoamiin c-ryhmiin ja nimiavaruuksiin.

Dockerin avulla voimme ottaa nopeasti käyttöön sovelluksia ja hyödyntää tiedostojärjestelmää parhaalla mahdollisella tavalla jakamalla käyttöjärjestelmäytimen kaikkien säiliöiden kesken, jotka toimivat erillisinä käyttöjärjestelmäprosesseina.

Lähde: will.com

Lisää kommentti