Dockerin ymmärtäminen

Olen käyttänyt Dockeria useiden kuukausien ajan web-projektien kehitys-/toimitusprosessin jäsentämiseen. Tarjoan Habrakhabrin lukijoille käännöksen johdantoartikkelista dockerista - "Ymmärtää telakka".

Mikä on docker?

Docker on avoin alusta sovellusten kehittämiseen, toimittamiseen ja käyttöön. Docker on suunniteltu toimittamaan sovelluksesi nopeammin. Dockerin avulla voit irrottaa sovelluksesi infrastruktuurista ja käsitellä infrastruktuuria hallittuna sovelluksena. Docker auttaa sinua lähettämään koodisi nopeammin, testaamaan nopeammin, toimittamaan sovelluksia nopeammin ja lyhentämään koodin kirjoittamisen ja koodin suorittamisen välistä aikaa. Docker tekee tämän kevyen kontin virtualisointialustan avulla käyttämällä prosesseja ja apuohjelmia, jotka auttavat sinua hallitsemaan ja isännöimään sovelluksiasi.

Dockerin ytimessä voit ajaa melkein mitä tahansa sovellusta turvallisesti eristettynä säiliöön. Suojatun eristyksen avulla voit käyttää useita säilöjä samassa isännässä samanaikaisesti. Säiliön kevyt luonne, joka toimii ilman hypervisorin lisätaakkaa, antaa sinun saada enemmän irti laitteistostasi.

Kontin virtualisointialusta ja työkalut voivat olla hyödyllisiä seuraavissa tapauksissa:

  • pakkaa sovelluksesi (ja käyttämäsi komponentit) telakointisäiliöihin;
  • näiden säiliöiden jakelu ja toimitus tiimillesi kehitystä ja testausta varten;
  • asettamalla nämä kontit tuotantolaitoksillesi sekä palvelinkeskuksissa että pilvissä.

Mihin voin käyttää dockeria?

Julkaise sovelluksesi nopeasti

Docker sopii erinomaisesti kehityssyklin organisointiin. Dockerin avulla kehittäjät voivat käyttää paikallisia säiliöitä sovelluksilla ja palveluilla. Tämän ansiosta voit myöhemmin integroida jatkuvan integroinnin ja käyttöönoton työnkulkuun.

Esimerkiksi kehittäjäsi kirjoittavat koodia paikallisesti ja jakavat kehityspinon (joukko Docker-kuvia) kollegoiden kanssa. Kun he ovat valmiita, he työntävät koodin ja säiliöt testialueelle ja suorittavat tarvittavat testit. Testauspaikalta he voivat lähettää koodia ja kuvia tuotantoon.

Helpompi kasata ja avata

Docker-konttipohjainen alusta tekee hyötykuorman siirtämisestä helppoa. Docker-säiliöt voivat toimia paikallisella koneellasi, joko oikealla tai virtuaalikoneella datakeskuksessa tai pilvessä.

Dockerin siirrettävyys ja kevyt luonne helpottaa työtaakan dynaamista hallintaa. Dockerin avulla voit ottaa käyttöön tai sulkea sovelluksesi tai palvelusi. Dockerin nopeus mahdollistaa tämän tekemisen lähes reaaliajassa.

Suuremmat kuormat ja enemmän hyötykuormia

Docker on kevyt ja nopea. Se tarjoaa joustavan, kustannustehokkaan vaihtoehdon hypervisor-pohjaisille virtuaalikoneen. Se on erityisen hyödyllinen korkean kuormituksen ympäristöissä, esimerkiksi luotaessa omaa pilvipalvelua tai alustaa palveluna. Mutta se on hyödyllinen myös pienille ja keskisuurille sovelluksille, kun haluat saada enemmän irti käytettävissä olevista resursseista.

Dockerin pääkomponentit

Docker koostuu kahdesta pääkomponentista:

  • Docker: avoimen lähdekoodin virtualisointialusta;
  • Docker Hub: Alustamme palveluna Docker-konttien jakeluun ja hallintaan.

Huomautus! Dockeria jaetaan Apache 2.0 -lisenssillä.

Docker-arkkitehtuuri

Docker käyttää asiakas-palvelin-arkkitehtuuria. Docker-asiakas kommunikoi Docker-daemonin kanssa, joka ottaa vastuulleen säilöjesi luomisen, suorittamisen ja jakelun. Sekä asiakas että palvelin voivat toimia samassa järjestelmässä, voit yhdistää asiakkaan etätelakka-daemoniin. Asiakas ja palvelin kommunikoivat socketin tai RESTful API:n kautta.

Dockerin ymmärtäminen

Docker-daemon

Kuten kaaviossa näkyy, demoni toimii isäntäkoneessa. Käyttäjä ei ole vuorovaikutuksessa suoraan palvelimen kanssa, vaan käyttää asiakasta tähän.

Docker-asiakas

Docker-asiakas, Docker-ohjelma, on Dockerin pääkäyttöliittymä. Se vastaanottaa komentoja käyttäjältä ja on vuorovaikutuksessa Docker-daemonin kanssa.

Sisätelakka

Ymmärtääksesi, mistä docker koostuu, sinun on tiedettävä kolme osaa:

  • kuvia
  • rekisteri
  • Kontit

kuvakieli

Docker-kuva on vain luku -malli. Kuva voi sisältää esimerkiksi Ubuntu-käyttöjärjestelmän, jossa on Apache ja siinä oleva sovellus. Kuvia käytetään säilöjen luomiseen. Dockerin avulla on helppo luoda uusia kuvia, päivittää olemassa olevia kuvia tai ladata muiden luomia kuvia. Kuvat ovat telakointirakenteen osia.

Rekisteri

Docker-rekisteri tallentaa kuvat. On olemassa julkisia ja yksityisiä rekistereitä, joista voit ladata tai lähettää kuvia. Julkinen Docker-rekisteri on Docker-napa. Siellä on valtava kokoelma kuvia tallennettuna. Kuten tiedät, kuvat voit luoda itse tai voit käyttää muiden luomia kuvia. Rekisterit ovat jakelukomponentti.

kontit

Kontit ovat samanlaisia ​​kuin hakemistot. Säiliöt sisältävät kaiken, mitä sovellus tarvitsee toimiakseen. Jokainen säilö luodaan kuvasta. Säilöjä voidaan luoda, käynnistää, pysäyttää, siirtää tai poistaa. Jokainen säiliö on eristetty ja tarjoaa turvallisen alustan sovellukselle. Kontit ovat työn komponentteja.

Joten miten Docker toimii?

Toistaiseksi tiedämme, että:

  • voimme luoda kuvia, joissa sovelluksemme sijaitsevat;
  • voimme luoda kuvista säilöjä sovellusten suorittamista varten;
  • Voimme jakaa kuvia Docker Hubin tai muun kuvarekisterin kautta.

Katsotaan kuinka nämä komponentit sopivat yhteen.

Miten kuva toimii?

Tiedämme jo, että kuva on vain luku -malli, josta säilö luodaan. Jokainen kuva koostuu joukosta tasoja. Docker käyttää liiton tiedostojärjestelmä yhdistää nämä tasot yhdeksi kuvaksi. Unionitiedostojärjestelmä mahdollistaa eri tiedostojärjestelmien (eri haarojen) tiedostojen ja hakemistojen päällekkäisyyden läpinäkyvästi, mikä luo yhtenäisen tiedostojärjestelmän.

Yksi syy siihen, miksi docker on kevyt, on se, että se käyttää tällaisia ​​kerroksia. Kun muutat kuvaa, kuten päivität sovellusta, uusi taso luodaan. Joten ilman koko kuvan vaihtamista tai uudelleen rakentamista, kuten virtuaalikoneen kanssa, vain kerros lisätään tai päivitetään. Eikä sinun tarvitse levittää koko uutta kuvaa, vain päivitys jaetaan, mikä tekee kuvien jakamisesta helpompaa ja nopeampaa.

Jokaisen kuvan ytimessä on peruskuva. Esimerkiksi ubuntu, Ubuntun peruskuva, tai fedora, Fedora-jakelun peruskuva. Voit myös käyttää kuvia pohjana uusien kuvien luomiseen. Jos sinulla on esimerkiksi apache-kuva, voit käyttää sitä verkkosovellustesi peruskuvana.

Huomautus! Docker hakee yleensä kuvat Docker Hub -rekisteristä.

Docker-kuvia voidaan luoda näistä peruskuvista; kutsumme näiden kuvien luomisvaiheita ohjeiksi. Jokainen ohje luo uuden kuvan tai tason. Ohjeet ovat seuraavat:

  • suorita komento
  • tiedoston tai hakemiston lisääminen
  • ympäristömuuttujan luominen
  • ohjeet siitä, mitä suoritetaan, kun tämän kuvan säilö käynnistetään

Nämä ohjeet tallennetaan tiedostoon Dockerfile. Docker lukee tämän Dockerfile, kun rakennat kuvan, suorittaa nämä ohjeet ja palauttaa lopullisen kuvan.

Miten Docker-rekisteri toimii?

Rekisteri on docker-kuvien arkisto. Kun kuva on luotu, voit julkaista sen julkisessa Docker Hub -rekisterissä tai henkilökohtaisessa rekisterissäsi.

Docker-asiakassovelluksella voit etsiä jo julkaistuja kuvia ja ladata ne telakointikoneellesi konttia varten.

Docker Hub tarjoaa julkisia ja yksityisiä kuvavarastoja. Kuvien hakeminen ja lataaminen julkisista arkistoista on kaikkien saatavilla. Yksityisten varastojen sisältö ei sisälly hakutuloksiin. Ja vain sinä ja käyttäjäsi voitte vastaanottaa nämä kuvat ja luoda niistä säilöjä.

Miten kontti toimii?

Säilö koostuu käyttöjärjestelmästä, käyttäjätiedostoista ja metatiedoista. Kuten tiedämme, jokainen säilö luodaan kuvasta. Tämä kuva kertoo dockerille, mitä säilössä on, mikä prosessi käynnistetään, milloin säilö käynnistyy ja muut määritystiedot. Docker-kuva on vain luku -tilassa. Kun docker käynnistää säilön, se luo kuvan päälle luku/kirjoituskerroksen (käyttämällä union-tiedostojärjestelmää, kuten edellä mainittiin), jossa sovellusta voidaan ajaa.

Mitä tapahtuu, kun säiliö käynnistyy?

Tai ohjelman avulla docker, tai RESTful API:n avulla docker-asiakas käskee Docker-daemonia käynnistämään säilön.

$ sudo docker run -i -t ubuntu /bin/bash

Katsotaanpa tätä komentoa. Asiakas käynnistetään komennolla docker, vaihtoehdolla run, jossa sanotaan, että uusi kontti tuodaan markkinoille. Vähimmäisvaatimukset säilön suorittamiselle ovat seuraavat attribuutit:

  • mitä kuvaa käytetään säilön luomiseen. Meidän tapauksessamme ubuntu
  • komento, jonka haluat suorittaa, kun säilö käynnistetään. Meidän tapauksessamme /bin/bash

Mitä tapahtuu konepellin alla, kun suoritamme tämän komennon?

Docker tekee järjestyksessä seuraavat:

  • lataa ubuntu-kuvan: Docker tarkistaa kuvien saatavuuden ubuntu paikallisella koneella, ja jos sitä ei ole, lataa se osoitteesta Docker-napa. Jos kuva on olemassa, se käyttää sitä säilön luomiseen;
  • luo säilön: kun kuva vastaanotetaan, docker käyttää sitä kontin luomiseen;
  • alustaa tiedostojärjestelmän ja liittää vain luku -tason: säilö luodaan tiedostojärjestelmään ja kuva lisätään vain luku -tasolle;
  • alustaa verkon/sillan: luo verkkoliitännän, jonka avulla telakointiasema voi kommunikoida isäntäkoneen kanssa;
  • IP-osoitteen asettaminen: löytää ja asettaa osoitteen;
  • Käynnistää määritellyn prosessin: käynnistää sovelluksesi;
  • Käsittelee ja tuottaa tulosteita sovelluksestasi: yhdistää ja kirjaa sovelluksesi vakiotulo-, tulos- ja virhevirran, jotta voit seurata sovelluksesi suorituskykyä.

Sinulla on nyt toimiva kontti. Voit hallita säilöäsi ja olla vuorovaikutuksessa sovelluksesi kanssa. Kun päätät pysäyttää sovelluksen, poista säilö.

Käytetyt tekniikat

Docker on kirjoitettu Go-kielellä ja käyttää joitain Linux-ytimen ominaisuuksia yllä olevan toiminnon toteuttamiseen.

Nimiavaruudet

Docker käyttää tekniikkaa namespaces järjestää eristettyjä työtiloja, joita kutsumme konteiksi. Kun käynnistämme säilön, docker luo sille joukon nimiavaruuksia.

Tämä luo eristetyn kerroksen, jossa säilön jokainen osa toimii omassa nimiavaruudessaan ja jolla ei ole pääsyä ulkoiseen järjestelmään.

Luettelo joistakin Dockerin käyttämistä nimiavaruuksista:

  • pid: eristää prosessi;
  • netto: verkkorajapintojen hallintaan;
  • ipc: IPC-resurssien hallintaan. (ICP: InterProccess Communication);
  • mnt: hallita kiinnityspisteitä;
  • UTC: eristää ytimen ja ohjausversion sukupolven (UTC: Unix-aikajakojärjestelmä).

Kontrolliryhmät

Docker käyttää myös tekniikkaa cgroups tai kontrolliryhmiä. Avain sovelluksen suorittamiseen erillään on tarjota sovellukselle vain ne resurssit, jotka haluat tarjota. Tämä varmistaa, että konteista tulee hyviä naapureita. Ohjausryhmien avulla voit jakaa käytettävissä olevia laitteistoresursseja ja tarvittaessa asettaa rajoja ja rajoituksia. Rajaa esimerkiksi säilön mahdollista muistin määrää.

Unionin tiedostojärjestelmä

Union File Sysem tai UnionFS on tiedostojärjestelmä, joka toimii luomalla tasoja, mikä tekee siitä erittäin kevyen ja nopean. Docker luo UnionFS:n avulla lohkot, joista kontti rakennetaan. Docker voi käyttää useita UnionFS-muunnelmia, mukaan lukien: AUFS, btrfs, vfs ja DeviceMapper.

Säilön muodot

Docker yhdistää nämä komponentit kääreeksi, jota kutsumme konttimuodoksi. Oletusmuotoa kutsutaan libcontainer. Docker tukee myös perinteistä konttimuotoa Linuxissa LXC. Jatkossa Docker saattaa tukea muita säilömuotoja. Esimerkiksi integrointi BSD Jailien tai Solaris Zonesin kanssa.

Lähde: will.com

Lisää kommentti