VM aŭ Docker?

Kiel vi scias ĉu vi bezonas Docker kaj ne VM? Vi devas determini kion precize vi volas izoli. Se vi volas izoli sistemon kun garantiitaj dediĉitaj rimedoj kaj virtuala aparataro, tiam la elekto estu VM. Se vi bezonas izoli rulajn aplikojn kiel apartajn sistemajn procezojn, vi bezonos Docker.

Do kio estas la diferenco inter Docker-ujoj kaj VM-oj?

Virtuala maŝino (VM) estas virtuala komputilo kun ĉiuj virtualaj aparatoj kaj virtuala malmola disko sur kiu nova sendependa OS estas instalita kune kun virtualaj aparataj ŝoforoj, memoradministrado kaj aliaj komponentoj. Tio estas, ni ricevas abstraktadon de fizika aparataro, kiu permesas al ni ruli multajn virtualajn komputilojn sur unu komputilo.
Instalita VM povas okupi spacon sur la disko de via komputilo en malsamaj manieroj:

  • fiksita malmola disko, kiu permesas pli rapidan aliron al la virtuala malmola disko kaj evitas dosierfragmentiĝon;
  • dinamika memora atribuo. Instalante pliajn aplikaĵojn, memoro estos dinamike asignita por ili ĝis ĝi atingos la maksimuman kvanton asignitan al ĝi.

Ju pli da virtualaj maŝinoj po servilo, des pli da spaco ili okupas, kaj ankaŭ postulas konstantan subtenon por la medio necesa por ke via aplikaĵo rulu.

Docker estas programaro por krei ujo-bazitajn aplikaĵojn. Ujoj kaj virtualaj maŝinoj havas similajn avantaĝojn, sed funkcias malsame. Ujoj okupas malpli da spaco ĉar... reuzi pli da komunaj rimedoj de la gastiga sistemo ol la VM, ĉar male al VM, ĝi disponigas virtualigon ĉe la OS-nivelo, ne sur la aparataro. Ĉi tiu aliro rezultigas pli malaltan memorpiedsignon, pli rapidan deplojon kaj pli facilan skaladon.

La ujo disponigas pli efikan mekanismon por enkapsuligado de aplikoj disponigante la necesajn interfacojn al la gastiga sistemo. Ĉi tiu funkcio permesas al ujoj dividi la kernon de la sistemo, kie ĉiu ujo funkcias kiel aparta mastro-OS-procezo kiu havas sian propran aron de memorareoj (sia propra virtuala adresspaco). Ĉar la virtuala adresspaco de ĉiu ujo estas sia propra, datenoj apartenantaj al malsamaj memorareoj ne povas esti ŝanĝitaj.
La denaska OS por Docker estas Linukso (Docker ankaŭ povas esti uzata ĉe Vindozo kaj MacOS), ĝi utiligas ĝiajn ĉefajn avantaĝojn, kiuj permesas al ĝi organizi la dividon de la kerno. Rulado de Docker-ujoj en Vindozo okazos ene de virtuala maŝino funkcianta Linuksan OS, ĉar ujoj dividas la OS de la gastiga sistemo kaj la ĉefa OS por ili estas Linukso.

Ujo - kiel ĝi funkcias?

Ujo estas apliknivela abstraktaĵo kiu kombinas kodon kaj dependencojn. Ujoj estas ĉiam kreitaj el bildoj, aldonante skribeblan supran tavolon kaj komencante diversajn parametrojn. Ĉar ujo havas sian propran skribtavolon kaj ĉiuj ŝanĝoj estas konservitaj en tiu tavolo, pluraj ujoj povas kunhavi aliron al la sama majstra bildo.

Ĉiu ujo povas esti agordita per dosiero en la projekto docker-compose inkluzivita en la ĉefa solvo - docker-compose.yml. Tie vi povas agordi diversajn parametrojn kiel ujo nomo, havenoj, identigiloj, limoj de rimedoj, dependecoj inter aliaj ujoj. Se vi ne specifas ujon nomon en la agordoj, Docker kreos novan ujon ĉiufoje, donante al ĝi nomon hazarde.

Kiam ujo estas komencita de bildo, Docker muntas lego-skriban dosiersistemon super iuj tavoloj malsupre. Ĉi tie funkcios ĉiuj procezoj, kiujn ni volas, ke nia Docker-ujo kuru.

Kiam Docker unue komencas ujon, la komenca lego-skriba tavolo estas malplena. Kiam ŝanĝoj okazas, ili estas aplikataj al ĉi tiu tavolo; ekzemple, se vi volas ŝanĝi dosieron, tiu dosiero estos kopiita de la nurlegebla tavolo malsupre al la lego-skriba tavolo.
La nurlegebla versio de la dosiero ankoraŭ ekzistos, sed ĝi nun estas kaŝita sub la kopio. Volumoj estas uzataj por stoki datumojn, sendepende de la vivociklo de la ujo. Volumoj estas pravigitaj kiam la ujo estas kreita.

Kiel la bildo rilatas al la ujo?

Bildo — la ĉefa elemento por ĉiu ujo. La bildo estas kreita de Dockerfile aldonita al la projekto kaj estas aro de dosiersistemoj (tavoloj) tavoligitaj unu sur la alia kaj grupigitaj kune, nurlegeblaj; la maksimuma nombro da tavoloj estas 127.

Ĉe la koro de ĉiu bildo estas baza bildo, kiu estas specifita per la FROM-komando - la enirpunkto dum konstruado de la Dockerfile-bildo. Ĉiu tavolo estas nurlegebla tavolo kaj estas reprezentita per ununura komando, kiu modifas la dosiersistemon, skribitan en Dockerfile.
Por kombini ĉi tiujn tavolojn en ununuran bildon, Docker uzas la Altnivelan plurtavolan Union-dosiersistemon (AuFS estas konstruita sur UnionFS), permesante al malsamaj dosieroj kaj dosierujoj de malsamaj dosiertavoloj esti travideble supermetitaj, kreante kohezian dosiersistemon.

Tavoloj enhavas metadatenojn, kiuj permesas vin stoki rilatajn informojn pri ĉiu tavolo dum rultempo kaj konstrutempo. Ĉiu tavolo enhavas ligon al la sekva tavolo; se tavolo ne havas ligon, tiam ĝi estas la plej supra tavolo en la bildo.

La Dockerfile povas enhavi komandojn kiel ekzemple:

  • DE — enirpunkto dum formado de bildo;
  • MAINTAINER - nomo de la bildposedanto;
  • RUN — komanda ekzekuto dum bilda asembleo;
  • ALDONI - kopiante la gastigan dosieron al nova bildo; se vi specifas la URL de la dosiero, Docker elŝutos ĝin al la specifita dosierujo;
  • ENV - mediovariabloj;
  • CMD - komencas la kreadon de nova ujo bazita sur la bildo;
  • ENTRYPOINT - la komando estas efektivigita kiam la ujo komenciĝas.
  • WORKDIR estas la labordosierujo por ekzekuti la komandon CMD.
  • USER - fiksas la UID por la ujo kreita surbaze de la bildo.
  • VOLUME - muntas la gastigan dosierujon en la ujon.
  • EXPOSE estas aro da havenoj aŭskultitaj en la ujo.

Kiel funkcias UnionFS?

UnionFS - utila staka dosiersistemo (FS) por Linukso kaj FreeBSD. Ĉi tiu FS efektivigas kopion-sur-skriban mekanismon (Copy-On-Write, COW). La laborunuo de UnionFS estas tavolo, ĉiu tavolo devus esti konsiderata kiel aparta plenrajta dosiersistemo kun hierarkio de dosierujoj de la radiko mem. UnionFS kreas sindikatmonton por aliaj dosiersistemoj kaj permesas dosierojn kaj dosierujojn de malsamaj dosiersistemoj (nomitaj forkoj) esti kombinitaj en ununuran koheran dosiersistemon, travideble al la uzanto.

La enhavo de dosierujoj kun la samaj vojoj aperos kune en unu unuigita dosierujo (en ununura nomspaco) de la rezulta dosiersistemo.

UnionFS kombinas tavolojn bazitajn sur la sekvaj principoj:

  • unu el la tavoloj fariĝas la supranivela tavolo, la dua kaj postaj tavoloj fariĝas la malsupernivelaj tavoloj;
  • tavolobjektoj estas haveblaj al la uzanto "de supre ĝis malsupre", t.e. se la petita objekto estas en la "supra" tavolo, ĝi estas resendita, sendepende de la ĉeesto de objekto kun la sama nomo en la "malsupra" tavolo; alie la objekto de la "malsupra" tavolo estas resendita; se la petita objekto estas nek tie nek tie, la eraro "Ne tia dosiero aŭ dosierujo" estas resendita;
  • la labortavolo estas la "supra" unu, tio estas, ĉiuj agoj de uzanto por ŝanĝi datumojn reflektas nur sur la supra nivelo, sen tuŝi la enhavon de la tavoloj de pli malaltaj niveloj.

Docker estas la plej ofta teknologio por uzi ujojn por ruli aplikojn. Ĝi fariĝis la normo en la kampo, konstruante sur la cgrupoj kaj nomspacoj provizitaj de la Linukso-kerno.

Docker permesas al ni rapide disfaldi aplikaĵojn kaj fari la plej bonan uzon de la dosiersistemo disigante la OS-kernon inter ĉiuj ujoj, funkciante kiel apartaj OS-procezoj.

fonto: www.habr.com

Aldoni komenton