Ohjelmointi

Kontit 101: Dockerin perusteet

Docker aloitti toimintansa vuonna 2012 avoimen lähdekoodin projektina, alun perin nimeltään dotcloud, rakentaakseen yhden sovelluksen Linux-kontteja. Siitä lähtien Dockerista on tullut erittäin suosittu kehitystyökalu, jota käytetään yhä enemmän ajonaikaisena ympäristöön. Harvat - jos sellaisia ​​- tekniikoita ovat tarttuneet kehittäjiin yhtä nopeasti kuin Docker.

Yksi syy siihen, että Docker on niin suosittu, on se, että se antaa lupauksen "kehitä kerran, aja mihin tahansa". Docker tarjoaa yksinkertaisen tavan pakata sovellus ja sen ajonaikaiset riippuvuudet yhteen säiliöön; Se tarjoaa myös ajonaikaisen abstraktion, jonka avulla säilö voi ajaa Linux-ytimen eri versioiden yli.

Dockerin avulla kehittäjä voi tehdä konttisovelluksen työasemalleen ja asentaa sen sitten helposti mihin tahansa Docker-yhteensopivaan palvelimeen. Säilöä ei tarvitse testata uudelleen tai virittää palvelinympäristöä varten, joko pilvessä tai tiloissa.

Lisäksi Docker tarjoaa ohjelmistojen jakamis- ja jakelumekanismin, jonka avulla kehittäjät ja operatiiviset ryhmät voivat helposti jakaa ja käyttää uudelleen konttien sisältöä. Tämä jakelumekanismi yhdistettynä koneiden väliseen siirrettävyyteen auttaa selventämään Dockerin suosiota operatiivisten ryhmien ja kehittäjien keskuudessa.

Telakointiaseman komponentit

Docker on sekä kehitystyökalu että ajonaikainen ympäristö. Dockerin ymmärtämiseksi meidän on ensin ymmärrettävä Docker-säilökuvan käsite. Säilö alkaa aina kuvasta ja sitä pidetään kyseisen kuvan instantisaationa. Kuva on staattinen määritys siitä, mitä säilön tulisi olla ajon aikana, mukaan lukien säilön sisällä oleva sovelluskoodi ja ajonaikaiset kokoonpanoasetukset. Docker-kuvat sisältävät vain luku -tasoja, mikä tarkoittaa, että kun kuva on luotu, sitä ei koskaan muuteta.

Kuvassa 1 on esimerkki säiliökuvasta. Tämä kuva kuvaa Ubuntun kuvaa Apache-asennuksella. Kuva on koostumus kolmesta Ubuntu-peruskerroksesta sekä päivityskerros, jonka päällä on Apache-kerros ja mukautettu tiedostokerros.

Käynnissä oleva Docker-säilö on kuvan ilmentymä. Samasta kuvasta johdetut säiliöt ovat keskenään identtisiä sovelluskoodinsa ja ajonaikaisen riippuvuuden suhteen. Mutta toisin kuin vain luku -muodossa olevat kuvat, käynnissä olevat säilöt sisältävät kirjoitettavan kerroksen (säiliökerros) vain luku -sisällön päälle. Suorituksenaikaiset muutokset, mukaan lukien tietojen ja tiedostojen kirjoitukset ja päivitykset, tallennetaan säilötasoon. Siten useilla samanaikaisilla käynnissä olevilla säilöillä, joilla on sama taustakuva, voi olla säiliökerroksia, jotka eroavat olennaisesti.

Kun käynnissä oleva säilö poistetaan, myös kirjoitettava säiliökerros poistetaan eikä se jatku. Ainoa tapa pysyä muutoksissa on tehdä nimenomainen telakka sitoutua -komento ennen säilön poistamista. Kun teet a telakka sitoutua, käynnissä olevan säilön sisältö, mukaan lukien kirjoitettava kerros, kirjoitetaan uuteen säilökuvaan ja tallennetaan levylle. Tästä tulee uusi kuva, joka eroaa kuvasta, jolla säiliö ilmentyi.

Käyttämällä tätä nimenomaista telakka sitoutua komento, voidaan luoda peräkkäinen, erillinen joukko Docker-kuvia, joista kukin on rakennettu edellisen kuvan päälle. Lisäksi Docker käyttää copy-on-write-strategiaa minimoidakseen samojen peruskomponenttien jakavien säiliöiden ja kuvien varastointijalanjäljen. Tämä auttaa optimoimaan tallennustilaa ja minimoimaan kontin aloitusajan.

Kuva 2 kuvaa eroa kuvan ja käynnissä olevan säiliön välillä. Huomaa, että jokaisella käynnissä olevalla säilöllä voi olla erilainen kirjoitettava kerros.

Kuvakonseptin lisäksi Dockerilla on muutamia erityisiä komponentteja, jotka poikkeavat perinteisissä Linux-säiliöissä olevista.

  • Docker-demoni. Tunnetaan myös nimellä Docker Engine, Docker-demoni on ohut kerros konttien ja Linux-ytimen välillä. Docker-demoni on jatkuva ajonaikainen ympäristö, joka hallitsee sovelluskontteja. Mikä tahansa Docker-säilö voi toimia millä tahansa palvelimella, joka on Docker-daemon-käytössä, käyttöjärjestelmästä riippumatta.
  • Docker-tiedosto. Kehittäjät käyttävät Dockerfile-tiedostoja konttikuvien luomiseen, joista tulee sitten konttien käytön perusta. Dockerfile on tekstidokumentti, joka sisältää kaikki kokoonpanotiedot ja komennot, joita tarvitaan säilökuvan kokoamiseen. Docker-tiedostolla Docker-demoni voi rakentaa automaattisesti säilön kuvan. Tämä prosessi yksinkertaistaa huomattavasti konttien luomisen vaiheita.

Tarkemmin sanottuna Docker-tiedostossa määritetään ensin peruskuva, josta rakennusprosessi alkaa. Määrität sitten peräkkäin komennot, joiden jälkeen voidaan luoda uusi säilökuva.

  • Dockerin komentoriviliittymätyökalut. Docker tarjoaa joukon CLI-komentoja kuvapohjaisten säilöjen elinkaaren hallitsemiseksi. Docker-komennot kattavat kehitystoiminnot, kuten koonti-, vienti- ja koodausmerkinnät, sekä ajonaikaiset toiminnot, kuten kontin suorittaminen, poistaminen, käynnistäminen ja pysäyttäminen ja paljon muuta.

Voit suorittaa Docker-komennot tiettyä Docker-daemonia tai rekisteriä vastaan. Esimerkiksi, jos suoritat telakka -ps komento, Docker palauttaa luettelon säiliöistä, jotka toimivat daemonissa.

Sisällön jakelu Dockerin kanssa

Ajonaikaisen ympäristön ja säilömuotojen lisäksi Docker tarjoaa ohjelmistojakelumekanismin, joka tunnetaan yleisesti rekisterinä, joka helpottaa konttien sisällön löytämistä ja jakelua.

Rekisterin käsite on Dockerin menestyksen kannalta kriittinen, koska se tarjoaa joukon apuohjelmia pakkaamaan, lähettämään, tallentamaan, löytämään ja käyttämään uudelleen konttien sisältöä. Docker-yhtiö ylläpitää julkista, ilmaista rekisteriä, jota kutsutaan Docker Hubiksi.

  • Rekisteri. Docker-rekisteri on paikka, jossa säilökuvat julkaistaan ​​ja tallennetaan. Rekisteri voi olla etäinen tai paikallinen. Se voi olla julkinen, joten jokainen voi käyttää sitä tai yksityinen, rajoitettu organisaatioon tai käyttäjäryhmään. Docker-rekisterissä on joukko yleisiä sovellusliittymiä, joiden avulla käyttäjät voivat rakentaa, julkaista, hakea, ladata ja hallita säilökuvia.
  • Docker Hub. Docker Hub on julkinen, pilvipohjainen säilörekisteri, jota Docker hallinnoi. Docker Hub tarjoaa kuvan löytämisen, jakamisen ja yhteistyön työnkulun tuen. Lisäksi Docker Hubilla on joukko virallisia kuvia, jotka Docker on sertifioinut. Nämä ovat kuvia tunnetuilta ohjelmistojulkaisijoilta, kuten Canonical, Red Hat ja MongoDB. Voit käyttää näitä virallisia kuvia perustana omille kuvillesi tai sovelluksillesi.

Kuva 3 kuvaa työnkulkua, jossa käyttäjä rakentaa kuvan ja lataa sen rekisteriin. Muut käyttäjät voivat vetää kuvan rekisteristä valmistamaan tuotantosäiliöitä ja sijoittaa ne Docker-isäntiin missä tahansa.

Docker-konttien muuttumattomuus

Yksi Docker-konttien mielenkiintoisimmista ominaisuuksista on niiden muuttumattomuus ja siitä johtuva konttien valtiottomuus.

Kuten edellisessä osassa kuvailimme, Docker-kuva, kun se on luotu, ei muutu. Kuvasta johdetussa käynnissä olevassa säilössä on kirjoitettava kerros, joka voi väliaikaisesti tallentaa ajonaikaiset muutokset. Jos kontti on sitoutunut ennen poistamista telakka sitoutua, kirjoitettavan kerroksen muutokset tallennetaan uuteen kuvaan, joka eroaa edellisestä.

Miksi muuttumattomuus on hyvä? Muuttamattomat kuvat ja säiliöt johtavat muuttumattomaan infrastruktuuriin, ja muuttumattomalla infrastruktuurilla on monia mielenkiintoisia etuja, joita ei voida saavuttaa perinteisillä järjestelmillä. Näitä etuja ovat seuraavat:

  • Versiohallinta. Vaatimalla nimenomaisia ​​sitoutuksia, jotka tuottavat uusia kuvia, Docker pakottaa sinut suorittamaan versionhallinnan. Voit seurata kuvan peräkkäisiä versioita; palata edelliseen kuvaan (siis edelliseen järjestelmäkomponenttiin) on täysin mahdollista, koska edelliset kuvat säilytetään eikä niitä koskaan muuteta.
  • Puhtaammat päivitykset ja hallittavammat tilamuutokset. Muuttamattoman infrastruktuurin ansiosta sinun ei enää tarvitse päivittää palvelininfrastruktuuria, mikä tarkoittaa, että asetustiedostoja ei tarvitse muuttaa, ei ohjelmistopäivityksiä, ei käyttöjärjestelmän päivityksiä ja niin edelleen. Kun muutoksia tarvitaan, teet yksinkertaisesti uusia astioita ja työnnät ne ulos korvaamaan vanhat. Tämä on paljon erillisempi ja hallittavampi menetelmä tilamuutokseen.
  • Minimoi ajautumisen. Voit välttää ajautumisen päivittämällä säännöllisesti ja ennakoivasti kaikki järjestelmän komponentit varmistaaksesi, että ne ovat uusimmat versiot. Tämä käytäntö on paljon helpompaa säiliöillä, jotka kapseloivat järjestelmän pienemmät komponentit kuin perinteisillä, isoilla ohjelmistoilla.

Dockerin ero

Dockerin kuvamuoto, laajat sovellusliittymät konttien hallintaan ja innovatiivinen ohjelmistojakelumekanismi ovat tehneet siitä suositun alustan sekä kehitys- että operatiivisille ryhmille. Docker tuo nämä merkittävät edut organisaatiolle.

  • Minimaaliset, deklaratiiviset järjestelmät. Docker-kontit ovat parhaimmillaan, jos ne ovat pieniä, yksittäiskäyttöisiä sovelluksia. Tämä synnyttää pienikokoisia kontteja, jotka puolestaan ​​tukevat nopeaa toimitusta, jatkuvaa integrointia ja jatkuvaa käyttöönottoa.
  • Ennakoitavat toiminnot. Järjestelmäkäytön suurin päänsärky on aina ollut infrastruktuurin tai sovellusten näennäisesti satunnainen käyttäytyminen. Pakottamalla sinut tekemään pienempiä, hallittavampia päivityksiä ja tarjoamalla mekanismi järjestelmän ajautumisen minimoimiseksi, Docker auttaa sinua rakentamaan ennustettavampia järjestelmiä. Kun ajautumiset poistetaan, sinulla on varmuus siitä, että ohjelmisto käyttäytyy aina samalla tavalla riippumatta siitä, kuinka monta kertaa käytät sitä.
  • Laaja ohjelmistojen uudelleenkäyttö. Docker-kontit käyttävät uudelleen muiden kuvien kerroksia, mikä luonnollisesti edistää ohjelmistojen uudelleenkäyttöä. Docker-kuvien jakaminen rekisterien kautta on toinen loistava esimerkki komponenttien uudelleenkäytöstä suuressa mittakaavassa.
  • Todellinen multicloud-siirrettävyys. Docker mahdollistaa todellisen alustan riippumattomuuden antamalla konttien liikkua vapaasti eri pilvialustojen, paikallisten infrastruktuurien ja kehitystyöasemien välillä.

Docker muuttaa jo organisaatioiden tapaa rakentaa järjestelmiä ja tarjota palveluja. Se alkaa muotoilla tapaa, jolla ajattelemme ohjelmistosuunnittelua ja ohjelmistotoiminnan taloutta. Ennen kuin nämä muutokset todella juurtuvat, organisaatioiden on ymmärrettävä paremmin, miten Docker-ympäristön tietoturvaa ja käytäntöjä hallitaan. Mutta se on toisen artikkelin aihe.

Chenxi Wang on konttiturvayrityksen Twistlockin strategiajohtaja.

New Tech Forum tarjoaa mahdollisuuden tutkia ja keskustella kehittyvistä yritysteknologioista ennennäkemättömällä syvyydellä ja laajuudella. Valinta on subjektiivinen, perustuu valitsemiemme tekniikoihin, joiden uskomme olevan tärkeitä ja kiinnostavia lukijoille. ei hyväksy markkinointivakuuksia julkaisua varten ja pidättää oikeuden muokata kaikkea lähetettyä sisältöä. Lähetä kaikki tiedustelut osoitteeseen [email protected].

$config[zx-auto] not found$config[zx-overlay] not found