Komprenante Docker

Mi uzas Docker jam de kelkaj monatoj por strukturi la disvolviĝon/liveran procezon de retprojektoj. Mi proponas al legantoj de Habrakhabr tradukon de la enkonduka artikolo pri docker - "Komprenante docker".

Kio estas docker?

Docker estas malferma platformo por evoluigado, liverado kaj funkciigado de aplikaĵoj. Docker estas desegnita por liveri viajn aplikojn pli rapide. Kun docker, vi povas malkunligi vian aplikaĵon de via infrastrukturo kaj trakti la infrastrukturon kiel administritan aplikaĵon. Docker helpas vin sendi vian kodon pli rapide, testi pli rapide, sendi aplikojn pli rapide kaj redukti la tempon inter skribado de kodo kaj rulado de kodo. Docker faras tion per malpeza uja virtualiga platformo, uzante procezojn kaj ilojn, kiuj helpas vin administri kaj liveri viajn aplikojn.

Ĉefe, docker permesas ruli preskaŭ ajnan aplikaĵon, sekure izolitan en ujo. Sekura izolado permesas al vi ruli multajn ujojn sur la sama gastiganto samtempe. La malpeza naturo de la ujo, kiu funkcias sen la plia ŝarĝo de hiperviziero, ebligas al vi akiri pli el via aparataro.

La platformo kaj iloj de virtualiga ujo povas esti utilaj en la sekvaj kazoj:

  • paki vian aplikaĵon (kaj la komponantojn, kiujn vi uzas) en docker-ujojn;
  • distribuo kaj livero de ĉi tiuj ujoj al viaj teamoj por disvolviĝo kaj testado;
  • aranĝante ĉi tiujn ujojn sur viaj produktejoj, kaj en datumcentroj kaj en la nuboj.

Por kio mi povas uzi docker?

Rapide publikigu viajn aplikojn

Docker estas bonega por organizi la evoluciklon. Docker permesas al programistoj prizorgi lokajn ujojn kun aplikoj kaj servoj. Kiu poste permesas vin integri kun la procezo de kontinua integriĝo kaj disfalda laborfluo.

Ekzemple, viaj programistoj skribas kodon loke kaj dividas sian disvolvan stakon (aro de Docker-bildoj) kun kolegoj. Kiam ili estas pretaj, ili puŝas la kodon kaj ujojn al la testejo kaj faras ajnajn necesajn provojn. De la testejo, ili povas sendi kodon kaj bildojn al produktado.

Pli facila enmetado kaj disvolvado

La docker-ujo-bazita platformo faciligas porti vian utilan ŝarĝon. Docker-ujoj povas funkcii per via loka maŝino, aŭ reala aŭ sur virtuala maŝino en datumcentro aŭ en la nubo.

La porteblo kaj malpeza naturo de docker faciligas dinamike administri vian laborŝarĝon. Vi povas uzi docker por disfaldi aŭ ĉesigi vian aplikaĵon aŭ servojn. La rapideco de docker permesas tion fari preskaŭ en reala tempo.

Pli altaj ŝarĝoj kaj pli da utilaj ŝarĝoj

Docker estas malpeza kaj rapida. Ĝi disponigas rezisteman, kostefikan alternativon al hiperviziler-bazitaj virtualaj maŝinoj. Ĝi estas precipe utila en altŝarĝaj medioj, ekzemple, kiam vi kreas vian propran nubon aŭ platformon-kiel-servo. Sed ĝi ankaŭ estas utila por malgrandaj kaj mezgrandaj aplikoj, kiam vi volas eltiri pli el la rimedoj, kiujn vi havas.

Ĉefaj Docker Komponantoj

Docker konsistas el du ĉefaj komponentoj:

  • Docker: malfermfonta virtualiga platformo;
  • Docker Hub: Nia platformo-kiel-servo por distribui kaj administri Docker-ujojn.

Notu! Docker estas distribuita sub la permesilo Apache 2.0.

Docker-arkitekturo

Docker uzas klient-servilan arkitekturon. La Docker-kliento komunikas kun la Docker-demono, kiu prenas la ŝarĝon krei, funkcii kaj distribui viajn ujojn. Kaj kliento kaj servilo povas funkcii per la sama sistemo, vi povas konekti la klienton al fora docker-demono. La kliento kaj servilo komunikas per ingo aŭ RESTful API.

Komprenante Docker

Docker-demono

Kiel montrite en la diagramo, la demono funkcias per la gastiga maŝino. La uzanto ne rekte interagas kun la servilo, sed uzas la klienton por tio.

Docker-kliento

La Docker-kliento, la docker-programo, estas la ĉefa interfaco al Docker. Ĝi ricevas komandojn de la uzanto kaj interagas kun la docker-demono.

Interna docker

Por kompreni el kio konsistas docker, vi devas scii pri tri komponantoj:

  • bildoj
  • registro
  • ujoj

Bildoj

La Docker-bildo estas nurlegebla ŝablono. Ekzemple, la bildo povas enhavi la Ubuntu-operaciumon kun Apache kaj aplikaĵon sur ĝi. Bildoj estas uzataj por krei ujojn. Docker faciligas krei novajn bildojn, ĝisdatigi ekzistantajn aŭ vi povas elŝuti bildojn kreitajn de aliaj homoj. Bildoj estas komponantoj de docker-konstruaĵo.

La registro

La Docker-registro konservas bildojn. Estas publikaj kaj privataj registroj, el kiuj vi povas elŝuti aŭ alŝuti bildojn. Publika Docker-registro estas Docker-nabo. Estas grandega kolekto de bildoj konservitaj tie. Kiel vi scias, bildoj povas esti kreitaj de vi aŭ vi povas uzi bildojn kreitajn de aliaj. Registroj estas distribua komponanto.

Ujoj

Ujoj similas al dosierujoj. Ujoj enhavas ĉion, kion la aplikaĵo bezonas por funkcii. Ĉiu ujo estas kreita el bildo. Ujoj povas esti kreitaj, komencitaj, haltigitaj, migritaj aŭ forigitaj. Ĉiu ujo estas izolita kaj provizas sekuran platformon por la aplikaĵo. Ujoj estas komponantoj de la laboro.

Do kiel funkcias Docker?

Ĝis nun ni scias tion:

  • ni povas krei bildojn en kiuj troviĝas niaj aplikaĵoj;
  • ni povas krei ujojn el bildoj por ruli aplikojn;
  • Ni povas distribui bildojn per Docker Hub aŭ alia bilda registro.

Ni vidu kiel ĉi tiuj komponantoj kongruas.

Kiel funkcias la bildo?

Ni jam scias, ke bildo estas nurlegebla ŝablono el kiu kreiĝas ujo. Ĉiu bildo konsistas el aro da niveloj. Docker uzas sindikata dosiersistemo kombini ĉi tiujn nivelojn en unu bildon. Unia dosiersistemo permesas dosierojn kaj dosierujojn de malsamaj dosiersistemoj (malsamaj branĉoj) interkovri travideble, kreante koheran dosiersistemon.

Unu el la kialoj, kial docker estas malpeza, estas ĉar ĝi uzas tavolojn kiel ĉi tion. Kiam vi ŝanĝas la bildon, ekzemple ĝisdatigi aplikaĵon, nova tavolo estas kreita. Do, sen anstataŭigi la tutan bildon aŭ rekonstrui ĝin, kiel vi eble devos fari kun virtuala maŝino, nur la tavolo estas aldonita aŭ ĝisdatigita. Kaj vi ne devas distribui la tutan novan bildon, nur la ĝisdatigo estas distribuita, faciligante kaj pli rapide distribui bildojn.

Ĉe la koro de ĉiu bildo estas baza bildo. Ekzemple, ubuntu, la baza bildo de Ubuntu, aŭ fedora, la baza bildo de la Fedora distribuo. Vi ankaŭ povas uzi bildojn kiel bazon por krei novajn bildojn. Ekzemple, se vi havas apaĉan bildon, vi povas uzi ĝin kiel bazan bildon por viaj retejoj.

Notu! Docker kutime tiras bildojn el la registro de Docker Hub.

Docker-bildoj povas esti kreitaj el ĉi tiuj bazaj bildoj; ni nomas la paŝojn por krei ĉi tiujn bildojn instrukcioj. Ĉiu instrukcio kreas novan bildon aŭ nivelon. La instrukcioj estos la sekvaj:

  • ruli komandon
  • aldonante dosieron aŭ dosierujon
  • kreante mediovariablon
  • instrukcioj pri kio ruli kiam la ujo de ĉi tiu bildo estas lanĉita

Ĉi tiuj instrukcioj estas konservitaj en dosiero Dockerfile. Docker legas ĉi tion Dockerfile, kiam vi konstruas la bildon, plenumas ĉi tiujn instrukciojn kaj resendas la finan bildon.

Kiel funkcias la docker-registro?

La registro estas deponejo por docker-bildoj. Post kiam la bildo estas kreita, vi povas publikigi ĝin al la publika registro de Docker Hub aŭ al via persona registro.

Kun la docker-kliento, vi povas serĉi jam publikigitajn bildojn kaj elŝuti ilin al via docker-maŝino por krei ujojn.

Docker Hub disponigas publikajn kaj privatajn bilddeponejojn. Serĉi kaj elŝuti bildojn el publikaj deponejoj disponeblas por ĉiuj. La enhavo de privataj stokado ne estas inkluzivita en la serĉrezultoj. Kaj nur vi kaj viaj uzantoj povas ricevi ĉi tiujn bildojn kaj krei ujojn el ili.

Kiel funkcias ujo?

Ujo konsistas el operaciumo, uzantdosieroj kaj metadatenoj. Kiel ni scias, ĉiu ujo estas kreita el bildo. Ĉi tiu bildo rakontas al docker kio estas en la ujo, kian procezon komenci, kiam la ujo komenciĝas, kaj aliajn agordajn datumojn. La Docker-bildo estas nurlegebla. Kiam docker lanĉas ujon, ĝi kreas legan/skriban tavolon supre de la bildo (uzante la sindikatan dosiersistemon kiel antaŭe deklarite) en kiu la aplikaĵo povas funkcii.

Kio okazas kiam la ujo komenciĝas?

Aŭ uzante la programon docker, aŭ uzante la RESTful API, la docker-kliento diras al la docker-demono komenci la ujon.

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

Ni rigardu ĉi tiun komandon. La kliento estas lanĉita per la komando docker, kun opcio run, kiu diras ke nova ujo estos lanĉita. La minimumaj postuloj por funkciigi ujon estas la jenaj atributoj:

  • kiun bildon uzi por krei la ujon. En nia kazo ubuntu
  • la komandon, kiun vi volas ruli kiam la ujo estas komencita. En nia kazo /bin/bash

Kio okazas sub la kapuĉo kiam ni kuras ĉi tiun komandon?

Docker, en ordo, faras la jenon:

  • elŝutas la ubuntu-bildon: docker kontrolas la haveblecon de bildoj ubuntu sur la loka maŝino, kaj se ĝi ne estas tie, tiam elŝutu ĝin de Docker-nabo. Se estas bildo, ĝi uzas ĝin por krei ujon;
  • kreas ujon: kiam la bildo estas ricevita, docker uzas ĝin por krei ujon;
  • pravigigas la dosiersistemon kaj muntas la nurlegeblan nivelon: la ujo estas kreita en la dosiersistemo kaj la bildo estas aldonita al la nurlegebla nivelo;
  • pravigigas la reton/ponton: kreas retan interfacon kiu permesas al docker komuniki kun la gastiga maŝino;
  • Agordi la IP-adreson: trovas kaj metas la adreson;
  • Komencas la specifitan procezon: lanĉas vian aplikaĵon;
  • Prilaboras kaj produktas eliron de via aplikaĵo: konektas kaj registras la norman enigaĵon, eliron kaj erarfluon de via aplikaĵo, por ke vi povu spuri kiel funkcias via aplikaĵo.

Vi nun havas funkciantan ujon. Vi povas administri vian ujon, interagi kun via aplikaĵo. Kiam vi decidas ĉesigi la aplikaĵon, forigu la ujon.

Uzitaj teknologioj

Docker estas skribita en Go kaj uzas iujn funkciojn de la Linukso-kerno por efektivigi ĉi-supran funkciecon.

Nomspacoj

Docker uzas teknologion namespaces organizi izolitajn laborspacojn, kiujn ni nomas ujoj. Kiam ni komencas ujon, docker kreas aron da nomspacoj por tiu ujo.

Ĉi tio kreas izolitan tavolon, kie ĉiu aspekto de la ujo funkcias en sia propra nomspaco kaj ne havas aliron al la ekstera sistemo.

Listo de kelkaj nomspacoj kiujn docker uzas:

  • pid: izoli la procezon;
  • reto: por administri retajn interfacojn;
  • ipc: administri IPC-resursojn. (ICP: InterProccess Communication);
  • mnt: administri montopunktojn;
  • utc: por izoli la kernon kaj kontroli version-generadon (UTC: Unix-tempa kundivida sistemo).

Kontrolgrupoj

Docker ankaŭ uzas teknologion cgroups aŭ kontrolgrupoj. La ŝlosilo por ruli aplikaĵon izole estas provizi la aplikaĵon per nur la rimedoj, kiujn vi volas provizi. Ĉi tio certigas, ke la ujoj estos bonaj najbaroj. Kontrolgrupoj permesas vin dividi disponeblajn aparatajn rimedojn kaj, se necese, fiksi limojn kaj limigojn. Ekzemple, limigu la eblan kvanton de memoro por la ujo.

Unia Dosiera Sistemo

Union File Sysem aŭ UnionFS estas dosiersistemo kiu funkcias kreante tavolojn, farante ĝin tre malpeza kaj rapida. Docker uzas UnionFS por krei la blokojn el kiuj la ujo estas konstruita. Docker povas uzi plurajn variaĵojn de UnionFS inkluzive de: AUFS, btrfs, vfs kaj DeviceMapper.

Formatoj de ujoj

Docker kombinas ĉi tiujn komponantojn en envolvaĵon, kiun ni nomas la ujformato. La defaŭlta formato estas nomita libcontainer. Docker ankaŭ subtenas la tradician ujformaton en Linukso uzante LXC. En la estonteco, Docker eble subtenos aliajn ujformatojn. Ekzemple, integriĝante kun BSD Jails aŭ Solaris Zones.

fonto: www.habr.com

Aldoni komenton