Verstaan ​​Docker

Ek gebruik Docker nou al vir 'n paar maande om die ontwikkeling/afleweringsproses van webprojekte te struktureer. Ek bied aan Habrakhabr-lesers 'n vertaling van die inleidende artikel oor docker - "Verstaan ​​docker".

Wat is docker?

Docker is 'n oop platform vir die ontwikkeling, lewering en bedryf van toepassings. Docker is ontwerp om jou toepassings vinniger te lewer. Met docker kan u u toepassing van u infrastruktuur ontkoppel en die infrastruktuur as 'n bestuurde toepassing behandel. Docker help jou om jou kode vinniger te stuur, vinniger te toets, toepassings vinniger te stuur en die tyd tussen die skryf van kode en lopende kode te verminder. Docker doen dit deur 'n liggewig-houervirtualiseringsplatform, met behulp van prosesse en nutsprogramme wat u help om u toepassings te bestuur en te huisves.

In sy kern laat docker jou toe om byna enige toepassing te laat loop, veilig geïsoleer in 'n houer. Veilige isolasie laat jou toe om baie houers op dieselfde gasheer op dieselfde tyd te laat loop. Die liggewig aard van die houer, wat sonder die bykomende las van 'n hypervisor werk, laat jou toe om meer uit jou hardeware te kry.

Die houervirtualiseringsplatform en gereedskap kan nuttig wees in die volgende gevalle:

  • jou toepassing (en die komponente wat jy gebruik) in dokhouerhouers te verpak;
  • verspreiding en aflewering van hierdie houers aan u spanne vir ontwikkeling en toetsing;
  • om hierdie houers op u produksieterreine uit te lê, beide in datasentrums en in die wolke.

Waarvoor kan ek docker gebruik?

Publiseer jou toepassings vinnig

Docker is ideaal om die ontwikkelingsiklus te organiseer. Docker laat ontwikkelaars toe om plaaslike houers met toepassings en dienste uit te voer. Wat u dan in staat stel om te integreer met die proses van deurlopende integrasie en ontplooiingswerkvloei.

Byvoorbeeld, jou ontwikkelaars skryf kode plaaslik en deel hul ontwikkelingstapel ('n stel Docker-beelde) met kollegas. Wanneer hulle gereed is, stoot hulle die kode en houers na die toetsterrein en voer enige nodige toetse uit. Vanaf die toetswebwerf kan hulle kode en beelde na produksie stuur.

Makliker uitlê en ontvou

Die docker-houer-gebaseerde platform maak dit maklik om jou loonvrag oor te dra. Docker-houers kan op u plaaslike masjien werk, hetsy werklik of op 'n virtuele masjien in 'n datasentrum, of in die wolk.

Die draagbaarheid en liggewig aard van docker maak dit maklik om jou werklading dinamies te bestuur. Jy kan docker gebruik om jou toepassing of dienste te ontplooi of af te sluit. Die spoed van docker laat dit toe om in byna reële tyd gedoen te word.

Hoër vragte en meer loonvragte

Docker is liggewig en vinnig. Dit bied 'n veerkragtige, koste-effektiewe alternatief vir hipervisor-gebaseerde virtuele masjiene. Dit is veral nuttig in hoëladingomgewings, byvoorbeeld wanneer u u eie wolk of platform-as-diens skep. Maar dit is ook nuttig vir klein en mediumgrootte toepassings wanneer jy meer uit die hulpbronne wat jy het wil kry.

Hoof Docker-komponente

Docker bestaan ​​uit twee hoofkomponente:

  • Docker: 'n oopbron-virtualiseringsplatform;
  • Docker Hub: Ons platform-as-'n-diens vir die verspreiding en bestuur van Docker-houers.

Let wel! Docker word onder die Apache 2.0-lisensie versprei.

Docker-argitektuur

Docker gebruik 'n kliënt-bediener argitektuur. Die Docker-kliënt kommunikeer met die Docker-demoon, wat die las van die skep, bestuur en verspreiding van u houers opneem. Beide kliënt en bediener kan op dieselfde stelsel loop, jy kan die kliënt koppel aan 'n afgeleë docker daemon. Die kliënt en bediener kommunikeer via 'n sok of 'n RESTful API.

Verstaan ​​Docker

Docker daemon

Soos in die diagram getoon, loop die daemon op die gasheermasjien. Die gebruiker kommunikeer nie direk met die bediener nie, maar gebruik die kliënt hiervoor.

Docker kliënt

Die Docker-kliënt, die docker-program, is die hoofkoppelvlak vir Docker. Dit ontvang opdragte van die gebruiker en interaksie met die docker daemon.

Binne-dokter

Om te verstaan ​​waaruit docker bestaan, moet jy van drie komponente weet:

  • beelde
  • register
  • Houers

beelde

Die Docker-prent is 'n leesalleen-sjabloon. Die prent kan byvoorbeeld die Ubuntu-bedryfstelsel met Apache en 'n toepassing daarop bevat. Beelde word gebruik om houers te skep. Docker maak dit maklik om nuwe beelde te skep, bestaande op te dateer, of jy kan beelde aflaai wat deur ander mense geskep is. Prente is komponente van 'n docker-bou.

Registreer

Die Docker-register stoor beelde. Daar is publieke en private registers waaruit jy beelde kan aflaai of oplaai. 'n Openbare Docker-register is Docker-spilpunt. Daar is 'n groot versameling beelde daar gestoor. Soos u weet, kan beelde deur u geskep word of u kan beelde gebruik wat deur ander geskep is. Registrasies is 'n verspreidingskomponent.

Houers

Houers is soortgelyk aan gidse. Houers bevat alles wat die toepassing nodig het om te loop. Elke houer word uit 'n beeld geskep. Houers kan geskep, begin, gestop, gemigreer of uitgevee word. Elke houer is geïsoleer en bied 'n veilige platform vir die toepassing. Houers is komponente van die werk.

So, hoe werk Docker?

Tot dusver weet ons dat:

  • ons kan beelde skep waarin ons toepassings geleë is;
  • ons kan houers van beelde skep om toepassings te laat loop;
  • Ons kan beelde versprei deur Docker Hub of 'n ander beeldregister.

Kom ons kyk hoe hierdie komponente bymekaar pas.

Hoe werk die beeld?

Ons weet reeds dat 'n prent 'n leesalleen-sjabloon is waaruit 'n houer geskep word. Elke prent bestaan ​​uit 'n stel vlakke. Docker gebruik unie lêerstelsel om hierdie vlakke in een prent te kombineer. Unie-lêerstelsel laat lêers en dopgehou van verskillende lêerstelsels (verskillende takke) toe om deursigtig te oorvleuel, wat 'n samehangende lêerstelsel skep.

Een van die redes waarom docker liggewig is, is omdat dit lae soos hierdie gebruik. Wanneer jy die prent verander, soos om 'n toepassing op te dateer, word 'n nuwe laag geskep. Dus, sonder om die hele prent te vervang of om dit te herbou, soos jy dalk met 'n virtuele masjien te doen het, word slegs die laag bygevoeg of opgedateer. En jy hoef nie die hele nuwe beeld te versprei nie, net die opdatering word versprei, wat dit makliker en vinniger maak om beelde te versprei.

Die kern van elke beeld is 'n basiese beeld. Byvoorbeeld, ubuntu, die basisbeeld van Ubuntu, of fedora, die basisbeeld van die Fedora-verspreiding. Jy kan ook beelde gebruik as 'n basis vir die skep van nuwe beelde. As jy byvoorbeeld 'n Apache-prent het, kan jy dit as 'n basisprent vir jou webtoepassings gebruik.

Let wel! Docker trek gewoonlik beelde uit die Docker Hub-register.

Docker-beelde kan vanaf hierdie basisbeelde geskep word; ons noem die stappe om hierdie beelde instruksies te skep. Elke instruksie skep 'n nuwe beeld of vlak. Die instruksies sal die volgende wees:

  • voer opdrag uit
  • die byvoeging van 'n lêer of gids
  • die skep van 'n omgewingsveranderlike
  • instruksies oor wat om te hardloop wanneer die houer van hierdie prent bekendgestel word

Hierdie instruksies word in 'n lêer gestoor Dockerfile. Docker lees dit Dockerfile, wanneer jy die prent bou, voer hierdie instruksies uit en gee die finale prent terug.

Hoe werk die docker-register?

Die register is 'n bewaarplek vir docker-beelde. Sodra die prent geskep is, kan jy dit publiseer na die openbare Docker Hub-register of na jou persoonlike register.

Met die docker-kliënt kan jy soek na reeds gepubliseerde beelde en dit na jou docker-masjien aflaai om houers te skep.

Docker Hub bied openbare en private beeldbewaarplekke. Dit is vir almal beskikbaar om beelde van publieke bewaarplekke te soek en af ​​te laai. Die inhoud van privaat bergings is nie by die soekresultate ingesluit nie. En net jy en jou gebruikers kan hierdie beelde ontvang en houers daaruit skep.

Hoe werk 'n houer?

'n Houer bestaan ​​uit 'n bedryfstelsel, gebruikerslêers en metadata. Soos ons weet, word elke houer uit 'n beeld geskep. Hierdie prent vertel docker wat in die houer is, watter proses om te begin, wanneer die houer begin, en ander konfigurasiedata. Die Docker-prent is leesalleen. Wanneer docker 'n houer begin, skep dit 'n lees/skryf-laag bo-op die prent (met behulp van die vakbondlêerstelsel soos voorheen genoem) waarin die toepassing uitgevoer kan word.

Wat gebeur wanneer die houer begin?

Of die gebruik van die program docker, of deur die RESTful API te gebruik, sê die docker-kliënt vir die docker-demoon om die houer te begin.

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

Kom ons kyk na hierdie opdrag. Die kliënt word geloods met behulp van die opdrag docker, met opsie run, wat sê dat 'n nuwe houer bekendgestel sal word. Die minimum vereistes om 'n houer te bestuur is die volgende eienskappe:

  • watter prent om te gebruik om die houer te skep. In ons geval ubuntu
  • die opdrag wat jy wil uitvoer wanneer die houer begin word. In ons geval /bin/bash

Wat gebeur onder die enjinkap wanneer ons hierdie opdrag uitvoer?

Docker, in volgorde, doen die volgende:

  • laai die ubuntu-beeld af: docker kyk vir beeldbeskikbaarheid ubuntu op die plaaslike masjien, en as dit nie daar is nie, laai dit dan af van Docker-spilpunt. As daar 'n beeld is, gebruik dit dit om 'n houer te skep;
  • skep 'n houer: wanneer die prent ontvang word, gebruik docker dit om 'n houer te skep;
  • inisialiseer die lêerstelsel en monteer die leesalleen-vlak: die houer word in die lêerstelsel geskep en die prent word op die leesalleenvlak gevoeg;
  • inisialiseer die netwerk/brug: skep 'n netwerkkoppelvlak wat docker toelaat om met die gasheermasjien te kommunikeer;
  • Stel die IP-adres in: vind en stel die adres;
  • Begin die gespesifiseerde proses: begin jou toepassing;
  • Verwerk en produseer uitset vanaf jou toepassing: verbind en teken jou toepassing se standaardinvoer-, uitvoer- en foutstroom aan sodat jy kan naspoor hoe jou toepassing presteer.

Jy het nou 'n werkende houer. Jy kan jou houer bestuur, interaksie met jou toepassing hê. Wanneer jy besluit om die toepassing te stop, vee die houer uit.

Tegnologieë wat gebruik word

Docker is in Go geskryf en gebruik sommige kenmerke van die Linux-kern om die bogenoemde funksionaliteit te implementeer.

Naamruimtes

Docker gebruik tegnologie namespaces om geïsoleerde werkruimtes, wat ons houers noem, te organiseer. Wanneer ons 'n houer begin, skep docker 'n stel naamruimtes vir daardie houer.

Dit skep 'n geïsoleerde laag, met elke aspek van die houer wat in sy eie naamruimte loop en nie toegang tot die eksterne stelsel het nie.

Lys van 'n paar naamruimtes wat docker gebruik:

  • pid: om die proses te isoleer;
  • netto: vir die bestuur van netwerkkoppelvlakke;
  • ipc: om IPC-hulpbronne te bestuur. (TKP: Interproseskommunikasie);
  • mnt: om bergpunte te bestuur;
  • utc: om die kern te isoleer en weergawe-generering te beheer (UTC: Unix-tyddeelstelsel).

Kontrole groepe

Docker gebruik ook tegnologie cgroups of kontrolegroepe. Die sleutel om 'n toepassing in isolasie te laat loop, is om die toepassing slegs van die hulpbronne te voorsien wat u wil verskaf. Dit verseker dat die houers goeie bure sal wees. Beheergroepe laat jou toe om beskikbare hardewarehulpbronne te deel en, indien nodig, limiete en beperkings te stel. Beperk byvoorbeeld die moontlike hoeveelheid geheue vir die houer.

Unie-lêerstelsel

Union File Sysem of UnionFS is 'n lêerstelsel wat werk deur lae te skep, wat dit baie liggewig en vinnig maak. Docker gebruik UnionFS om die blokke te skep waaruit die houer gebou is. Docker kan verskeie variante van UnionFS gebruik, insluitend: AUFS, btrfs, vfs en DeviceMapper.

Houerformate

Docker kombineer hierdie komponente in 'n omhulsel wat ons die houerformaat noem. Die verstekformaat word genoem libcontainer. Docker ondersteun ook die tradisionele houerformaat op Linux gebruik LXC. In die toekoms kan Docker ander houerformate ondersteun. Byvoorbeeld, integrasie met BSD Jails of Solaris Zones.

Bron: will.com

Voeg 'n opmerking