Ohjelmointi

Mikä on Docker? Säiliön vallankumouksen kipinä

Docker on ohjelmistoalusta sovellusten rakentamiseen astiat - pienet ja kevyet toteutusympäristöt, jotka käyttävät käyttöjärjestelmän ydintä yhdessä, mutta toimivat muuten erillään toisistaan. Vaikka kontit ovat olleet konseptina jo jonkin aikaa, Docker, vuonna 2013 käynnistetty avoimen lähdekoodin projekti, auttoi teknologiaa popularisoimaan ja on auttanut suuntaamaan kohti kontti ja mikropalvelut ohjelmistokehityksessä, joka on tullut tunnetuksi pilvikehityksenä.

Mitä ovat kontit?

Yksi nykyaikaisen ohjelmistokehityksen tavoitteista on pitää sovellukset samassa isännässä tai klusterissa erillään toisistaan, jotta ne eivät aiheettomasti häiritse toistensa toimintaa tai ylläpitoa. Tämä voi olla vaikeaa niiden suorittamiseen tarvittavien pakettien, kirjastojen ja muiden ohjelmistokomponenttien ansiosta. Yksi ratkaisu tähän ongelmaan on ollut virtuaalikoneet, jotka pitävät saman laitteiston sovellukset täysin erillisinä ja vähentävät ohjelmistokomponenttien välisiä ristiriitoja ja kilpailua laitteistoresursseista minimiin. Mutta virtuaalikoneet ovat suuria - kukin vaatii oman käyttöjärjestelmän, joten se on tyypillisesti gigatavua - ja sitä on vaikea ylläpitää ja päivittää.

Kontit, sen sijaan, eristää sovellusten suoritusympäristöt toisistaan, mutta jaa taustalla oleva käyttöjärjestelmän ydin. Ne mitataan tavallisesti megatavuina, ne käyttävät paljon vähemmän resursseja kuin virtuaalikoneet ja käynnistyvät melkein välittömästi. Ne voidaan pakata paljon tiheämmin samalle laitteistolle ja kehrätä ylös ja alas massoittain paljon vähemmän vaivaa ja yleiskustannuksia. Kontit tarjoavat erittäin tehokkaan ja tarkan mekanismin ohjelmistokomponenttien yhdistämiseksi nykyaikaisessa yrityksessä tarvittaviin sovellus- ja palvelupinoihin sekä näiden ohjelmistokomponenttien päivittämiseen ja ylläpitoon.

Satamatyöläinen

Mikä on Docker?

Docker on avoimen lähdekoodin projekti, jonka avulla konttien ja konttipohjaisten sovellusten luominen on helppoa. Alun perin Linuxille rakennettu Docker toimii nyt myös Windows- ja MacOS-käyttöjärjestelmissä. Jotta ymmärtäisimme Dockerin toiminnan, katsotaanpa joitain komponentteja, joita käyttäisit Docker-konttisovellusten luomiseen.

Docker-tiedosto

Jokainen Docker-kontti alkaa a: lla Docker-tiedosto. Dockerfile on helposti ymmärrettävässä syntaksissa kirjoitettu tekstitiedosto, joka sisältää ohjeet Dockerin rakentamiseen kuva (lisää siitä hetkessä). Dockerfile määrittää käyttöjärjestelmän, joka on kontin taustalla, sekä kielet, ympäristömuuttujat, tiedostojen sijainnit, verkkoportit ja muut tarvitsemansa komponentit - ja tietysti, mitä säilö todella tekee, kun suoritamme sen.

Paige Niedringhaus ITNextissä on antanut hyvän erittelyn Docker-tiedoston syntaksista.

Docker-kuva

Kun olet kirjoittanut Docker-tiedostosi, vedot Dockeriin rakentaa apuohjelma luoda kuva perustuu siihen Docker-tiedostoon. Dockerfile on joukko ohjeita, jotka kertovat rakentaa miten kuva tehdään, Docker-kuva on kannettava tiedosto, joka sisältää tiedot siitä, minkä ohjelmistokomponenttien säilö toimii ja miten. Koska Dockerfile sisältää todennäköisesti ohjeita joidenkin ohjelmistopakettien nappaamisesta verkkovarastoista, sinun on huolehdittava siitä, että määrität nimenomaisesti oikeat versiot, muuten Dockerfile-tiedostosi saattaa tuottaa epäjohdonmukaisia ​​kuvia riippuen siitä, milloin sitä kutsutaan. Mutta kun kuva on luotu, se on staattinen. Codefresh tarjoaa kuvan rakentamisen yksityiskohdat.

Docker-juoksu

Dockerin juosta Utility on komento, joka todella käynnistää säilön. Jokainen kontti on ilmentymä kuvan. Kontit on suunniteltu ohimeneviksi ja väliaikaisiksi, mutta ne voidaan pysäyttää ja käynnistää uudelleen, mikä laukaisee kontin samaan tilaan kuin se pysäytettiin. Lisäksi saman kuvan useita säilöilmentymiä voidaan ajaa samanaikaisesti (kunhan kullakin säilöllä on oma nimi). Koodin tarkistus sisältää suuren erittelyn eri vaihtoehdoista juosta komento, jotta saat tuntuman sen toiminnasta.

Docker Hub

Vaikka konttien rakentaminen on helppoa, älä ymmärrä, että sinun on rakennettava jokainen kuvasi tyhjästä. Docker Hub on SaaS-säilö konttien jakamiseen ja hallintaan, josta löydät virallisia Docker-kuvia avoimen lähdekoodin projekteista ja ohjelmistotoimittajista sekä epävirallisia kuvia suurelta yleisöltä. Voit ladata hyödyllisiä koodeja sisältäviä säilökuvia tai ladata omasi, jakaa niitä avoimesti tai tehdä niistä yksityisiä. Voit myös luoda paikallisen Docker-rekisterin, jos haluat. (Docker Hubilla on aiemmin ollut ongelmia kuvien kanssa, jotka on ladattu sisäänrakennetuilla takaovilla.)

Docker-moottori

Docker Engine on Dockerin, asiakkaan ja palvelimen välisen tekniikan ydin, joka luo ja käyttää kontteja. Yleisesti ottaen, kun joku sanoo Satamatyöläinen yleensä eikä puhu yrityksestä tai kokonaisprojektista, ne tarkoittavat Docker Engineä. Tarjolla on kaksi erilaista Docker Engine -mallia: Docker Engine Enterprise ja Docker Engine Community.

Docker Community Edition

Docker vapautti sen yritysversio vuonna 2017, mutta sen alkuperäinen tarjous, nimeltään Docker Community Edition, on edelleen avoimen lähdekoodin ja ilmainen, eikä se menettänyt mitään ominaisuuksia prosessissa. Sen sijaan Enterprise Edition, joka maksaa 1500 dollaria solmua kohden vuodessa, lisäsi edistyneitä hallintaominaisuuksia, kuten klusteri- ja kuvahallinnan ohjaimet sekä haavoittuvuuden seurannan. BoxBoat-blogi kertoo eri versioiden erot.

Kuinka Docker valloitti konttimaailman

Ajatus siitä, että tietty prosessi voidaan ajaa jossain määrin eristettynä muusta käyttöympäristöstä, on jo vuosikymmenien ajan rakennettu Unix-käyttöjärjestelmiin, kuten BSD ja Solaris. Alkuperäinen Linux-konttitekniikka, LXC, on käyttöjärjestelmän tason virtualisointimenetelmä useiden eristettyjen Linux-järjestelmien ajamiseksi yhdellä isännällä. LXC: n mahdollistivat kaksi Linux-ominaisuutta: nimitilat, jotka käärivät joukon järjestelmäresursseja ja esittävät ne prosessille, jotta näyttää siltä, ​​että ne on omistettu kyseiselle prosessille; ja c-ryhmät, jotka hallitsevat järjestelmän resurssien, kuten suorittimen ja muistin, eristämistä ja käyttöä prosessiryhmälle.

Säiliöt erottavat sovellukset käyttöjärjestelmistä, mikä tarkoittaa, että käyttäjillä voi olla puhdas ja minimaalinen Linux-käyttöjärjestelmä ja suorittaa kaikki muu yhdessä tai useammassa erillisessä säilössä. Ja koska käyttöjärjestelmä on erotettu säilöistä, voit siirtää säilön minkä tahansa Linux-palvelimen yli, joka tukee säilön ajonaikaisia ​​ympäristöjä.

Docker esitteli useita merkittäviä muutoksia LXC: hen, jotka tekevät kontteista kannettavampia ja joustavampia käyttää. Docker-konttien avulla voit ottaa, kopioida, siirtää ja varmuuskopioida työmäärän jopa nopeammin ja helpommin kuin virtuaalikoneita käyttämällä. Docker tuo pilvimaisen joustavuuden mihin tahansa infrastruktuuriin, joka pystyy kuljettamaan kontteja. Dockerin konttikuvatyökalut olivat myös edistysaskel LXC: hen nähden, jolloin kehittäjä pystyi rakentamaan kuvakirjastoja, säveltämään sovelluksia useista kuvista ja käynnistämään kyseiset kontit ja sovellukset paikallisessa tai etäinfrastruktuurissa.

Docker Compose, Docker Swarm ja Kubernetes

Docker helpottaa myös käyttäytymisen koordinointia välillä ja siten rakentaa sovelluspinoja kiinnittämällä kontit yhteen. Docker Compose luotiin Dockerin avulla yksinkertaistamaan monisäiliösovellusten kehittämisprosessia. Se on komentorivityökalu, joka muistuttaa Docker-asiakasta ja joka ottaa käyttöön erityisen muotoilun kuvaustiedoston, joka kokoaa sovellukset useista säilöistä ja suorittaa ne yhdessä yhdessä isännässä. (Katso lisätietoja Docker Compose -oppaasta.)

Kehittyneemmät versiot näistä käyttäytymistavoista - mitä kutsutaan konttiorkesteri- tarjoavat muut tuotteet, kuten Docker Swarm ja Kubernetes. Mutta Docker tarjoaa perusasiat. Vaikka Swarm kasvoi Docker-projektista, Kuberneteksestä on tullut tosiasiallisesti Valittu telakointiasema.

Dockerin edut

Docker-kontit tarjoavat tavan rakentaa yritys- ja toimialasovelluksia, jotka on helpompi koota, ylläpitää ja liikkua kuin perinteiset kollegansa. 

Telakointisäiliöt mahdollistavat eristämisen ja kuristamisen

Docker-kontit pitävät sovellukset erillään paitsi toisistaan, myös taustalla olevasta järjestelmästä. Tämä ei ainoastaan ​​tee puhtaammasta ohjelmistopinosta, vaan myös helpottaa sanelemaan, kuinka tietty konttisovellus käyttää järjestelmäresursseja - CPU, GPU, muisti, I / O, verkko jne. Sen avulla on myös helpompaa varmistaa, että tiedot ja koodi pidetään erillään. (Katso alla oleva kohta ”Docker-kontit ovat valtiottomia ja muuttumattomia.”)

Docker-kontit mahdollistavat siirrettävyyden

Docker-säilö toimii kaikilla koneilla, jotka tukevat säiliön ajo-ympäristöä. Sovelluksia ei tarvitse sitoa isäntäkäyttöjärjestelmään, joten sekä sovellusympäristö että sen taustalla oleva käyttöympäristö voidaan pitää puhtaina ja vähäisinä.

Esimerkiksi MySQL for Linux -kontti toimii useimmissa Linux-järjestelmissä, jotka tukevat kontteja. Kaikki sovelluksen riippuvuudet toimitetaan yleensä samassa säilössä.

Säilöpohjaiset sovellukset voidaan siirtää helposti on-prem -järjestelmistä pilviympäristöihin tai kehittäjien kannettavista tietokoneista palvelimiin, kunhan kohdejärjestelmä tukee Dockeria ja mitä tahansa kolmannen osapuolen työkaluja, jotka saattavat olla sen kanssa käytössä, kuten Kubernetes (katso alla Docker-kontit helpottavat orkestrointia ja skaalausta).

Normaalisti Docker-konttien kuvat on rakennettava tietylle alustalle. Esimerkiksi Windows-säilö ei toimi Linuxissa ja päinvastoin. Aikaisemmin yksi tapa kiertää tämä rajoitus oli käynnistää virtuaalikone, joka juoksi tarvittavan käyttöjärjestelmän ilmentymän, ja suorittaa kontti virtuaalikoneessa.

Docker-tiimi on kuitenkin sittemmin suunnitellut tyylikkäämmän ratkaisun nimeltäilmenee, jotka mahdollistavat useiden käyttöjärjestelmien kuvien pakkaamisen vierekkäin samaan kuvaan. Ilmentymiä pidetään edelleen kokeellisina, mutta ne viittaavat siihen, miten kontteista voi tulla sekä alustojen välinen että ympäristöympäristön ratkaisu. 

Docker-kontit mahdollistavat kokoonpanon

Suurin osa yrityssovelluksista koostuu useista erillisistä komponenteista, jotka on järjestetty pinoksi - verkkopalvelin, tietokanta, muistin välimuisti. Säiliöiden avulla nämä kappaleet voidaan sommitella toimivaksi yksiköksi, jossa on helposti vaihdettavat osat. Jokainen kappale on eri säiliön tarjoama ja sitä voidaan ylläpitää, päivittää, vaihtaa ja muokata muista riippumatta.

Tämä on lähinnä sovellusten suunnittelun mikropalvelumalli. Jakamalla sovellustoiminnot erillisiksi, itsenäisiksi palveluiksi mikropalvelumalli tarjoaa vastalääkkeen perinteisille hitaille kehitysprosesseille ja joustamattomille monoliittisovelluksille. Kevyet ja kannettavat säiliöt helpottavat mikropalveluihin perustuvien sovellusten rakentamista ja ylläpitoa.

Docker-kontit helpottavat orkestrointia ja skaalausta

Koska kontit ovat kevyitä ja aiheuttavat vähän ylimääräisiä kustannuksia, on mahdollista käynnistää paljon enemmän tiettyyn järjestelmään. Säiliöitä voidaan kuitenkin käyttää myös sovelluksen laajentamiseen järjestelmäryhmien välillä ja palvelujen nostamiseen ylös tai alas vastaamaan kysynnän piikkeihin tai säästämään resursseja.

Suurin osa yritysluokan versioista konttien käyttöönotto-, hallinta- ja skaalausvälineistä toimitetaan kolmansien osapuolten projektien kautta. Tärkein heistä on Googlen Kubernetes, järjestelmä, jolla automatisoidaan konttien käyttöönotto ja skaalaus, mutta myös niiden yhdistäminen, kuormituksen tasapainottaminen ja hallinta. Kubernetes tarjoaa myös tapoja luoda ja käyttää uudelleen monisäiliösovellusten määritelmiä tai "Helm-kaavioita", jotta monimutkaiset sovelluspinot voidaan rakentaa ja hallita tarvittaessa.

Dockeriin kuuluu myös oma sisäänrakennettu orkesterijärjestelmä, Swarm-tila, jota käytetään edelleen vähemmän vaativissa tapauksissa. Kuitenkin Kubernetesista on tullut jokin oletusvalinnoista; itse asiassa Kubernetes on mukana Docker Enterprise Editionissa.

Docker varoittaa

Kontit ratkaisevat hyvin monet ongelmat, mutta ne eivät ole parantavia. Jotkut heidän puutteistaan ​​johtuvat suunnittelusta, kun taas toiset ovat niiden suunnittelun sivutuotteita.

Docker-kontit eivät ole virtuaalikoneita

Yleisin käsitteellinen virhe, jonka ihmiset tekevät konttien kanssa, on rinnastaa ne virtuaalikoneisiin. Koska kontit ja virtuaalikoneet käyttävät kuitenkin erilaisia ​​eristysmekanismeja, niillä on selvästi erilaiset edut ja haitat.

Virtuaalikoneet tarjoavat korkean eristyksen prosesseille, koska ne toimivat omassa käyttöjärjestelmässään. Kyseisen käyttöjärjestelmän ei tarvitse olla sama kuin isännällä suoritettava. Windowsin virtuaalikone voi toimia Linux-hypervisorilla ja päinvastoin.

Säiliöt sitä vastoin käyttävät isäntäkäyttöjärjestelmän resurssien hallittuja osia; monilla sovelluksilla on sama käyttöjärjestelmän ydin erittäin hallitulla tavalla. Tämän seurauksena konttiosoitetut sovellukset eivät ole yhtä perusteellisesti eristettyjä kuin virtuaalikoneet, mutta ne tarjoavat riittävän eristämisen suurimmalle osalle työmääriä.

Docker-kontit eivät tarjoa paljaan metallinopeutta

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