VM edo Docker?

Nola dakizu Docker behar duzun eta ez VM bat? Zehazki zer isolatu nahi duzun zehaztu behar duzu. Baliabide dedikatu bermatuak eta hardware birtuala dituen sistema isolatu nahi baduzu, orduan aukera VM bat izan beharko litzateke. Exekutatzen diren aplikazioak sistemaren prozesu bereizi gisa isolatu behar badituzu, Docker beharko duzu.

Beraz, zein da Docker edukiontzien eta VM-en arteko aldea?

Makina birtuala (VM) gailu birtual guztiak eta disko gogor birtuala dituen ordenagailu birtuala da, zeinetan OS independente berri bat instalatzen den gailu birtualen kontrolatzaile, memoria kudeaketa eta beste osagai batzuekin batera. Hau da, ordenagailu bakarrean ordenagailu birtual asko exekutatzeko aukera ematen duen hardware fisikoaren abstrakzio bat lortzen dugu.
Instalatutako VM batek zure ordenagailuko diskoan tokia har dezake hainbat modutan:

  • disko gogorreko espazio finkoa, disko gogor birtualera azkarrago sartzea ahalbidetzen duena eta fitxategien zatiketa saihesten duena;
  • memoria dinamikoaren esleipena. Aplikazio gehigarriak instalatzean, memoria dinamikoki esleituko zaie haiei esleitutako gehienezko kopurura iritsi arte.

Zenbat eta makina birtual gehiago zerbitzari bakoitzeko, orduan eta leku gehiago hartzen dute eta, gainera, etengabeko laguntza behar dute zure aplikazioa exekutatzeko beharrezkoa den ingurunerako.

Docker edukiontzietan oinarritutako aplikazioak sortzeko softwarea da. Edukiontziek eta makina birtualek antzeko abantailak dituzte, baina ezberdin funtzionatzen dute. Edukiontziek leku gutxiago hartzen dute, izan ere... VM-a baino ostalari-sistemaren baliabide partekatu gehiago berrerabili, zeren VM ez bezala, birtualizazioa OS mailan eskaintzen du, ez hardware mailan. Planteamendu honek memoria-aztarna txikiagoa, inplementazio azkarragoa eta eskalatzea errazten du.

Edukiontzi horrek aplikazioak kapsulatzeko mekanismo eraginkorragoa eskaintzen du, sistema ostalariari beharrezko interfazeak eskainiz. Ezaugarri honek edukiontziak sistemaren muina partekatzeko aukera ematen die, edukiontzi bakoitza ostalari OS prozesu bereizi gisa exekutatzen delarik, eta bere memoria-eremuen multzoa (bere helbide birtuala) dauka. Edukiontzi bakoitzaren helbide-espazio birtuala berea denez, memoria-eremu ezberdinetako datuak ezin dira aldatu.
Dockerren jatorrizko OSa Linux da (Docker Windows eta MacOS-en ere erabil daiteke), bere abantaila nagusiak erabiltzen ditu, nukleoaren bereizketa antolatzeko aukera ematen dutenak. Windows-en Docker edukiontziak exekutatzen Linux OS exekutatzen duen makina birtual baten barruan egingo da, zeren edukiontziek sistema ostalariaren OS partekatzen dute eta horien OS nagusia Linux da.

Ontzia - nola funtzionatzen du?

edukiontzi kodea eta menpekotasunak konbinatzen dituen aplikazio mailako abstrakzio bat da. Ontziak irudietatik sortzen dira beti, goiko geruza idazgarria gehituz eta hainbat parametro hasieratuz. Edukiontzi batek bere idazketa-geruza duelako eta aldaketa guztiak geruza horretan gordetzen direnez, edukiontzi anitzek irudi nagusi beraren sarbidea parteka dezakete.

Edukiontzi bakoitza soluzio nagusian sartutako docker-compose proiektuko fitxategi baten bidez konfigura daiteke - docker-compose.yml. Bertan hainbat parametro ezar ditzakezu, hala nola edukiontziaren izena, portuak, identifikatzaileak, baliabideen mugak, beste edukiontzien arteko mendekotasunak. Ezarpenetan edukiontzi-izen bat zehazten ez baduzu, Docker-ek edukiontzi berri bat sortuko du bakoitzean, eta ausaz izena emanez.

Edukiontzi bat irudi batetik abiatzen denean, Docker-ek irakurketa-idazketa fitxategi-sistema bat muntatzen du beheko edozein geruzen gainean. Hemen abiaraziko dira gure Docker edukiontzia exekutatzea nahi dugun prozesu guztiak.

Docker-ek edukiontzi bat abiarazten duenean, hasierako irakurketa-idazketa geruza hutsik dago. Aldaketak gertatzen direnean, geruza honi aplikatzen zaizkio; adibidez, fitxategi bat aldatu nahi baduzu, fitxategi hori beheko irakurtzeko soilik den geruzatik irakurri-idazteko geruzara kopiatuko da.
Fitxategiaren irakurtzeko soilik dagoen bertsioa existituko da, baina orain kopiaren azpian ezkutatuta dago. Bolumenak datuak gordetzeko erabiltzen dira, edukiontziaren bizi-zikloa edozein dela ere. Ontzia sortzen denean bolumenak hasieratzen dira.

Nola erlazionatuta dago irudia edukiontziarekin?

irudia β€” edukiontzi bakoitzaren elementu nagusia. Irudia proiektuari gehitutako Dockerfile batetik sortzen da eta bata bestearen gainean geruzatuta dauden fitxategi-sistema (geruzak) multzo bat da, irakurtzeko soilik; gehienezko geruza kopurua 127 da.

Irudi bakoitzaren muinean oinarrizko irudi bat dago, FROM komandoak zehazten duena - Dockerfile irudia eraikitzeko sarrera-puntua. Geruza bakoitza irakurtzeko geruza bat da eta fitxategi-sistema aldatzen duen komando bakar batek adierazten du, Dockerfile batean idatzita.
Geruza hauek irudi bakar batean konbinatzeko, Docker-ek geruza anitzeko Union fitxategi-sistema aurreratua erabiltzen du (AuFS UnionFS-en gainean eraikita dago), fitxategi-geruza ezberdinetako fitxategi eta direktorio desberdinak gardentasunez gainjartzea ahalbidetuz, fitxategi-sistema kohesionatu bat sortuz.

Geruzek metadatuak dituzte, geruza bakoitzari buruzko informazioa exekutatzeko eta eraikitzeko garaian gordetzeko aukera ematen dutenak. Geruza bakoitzak hurrengo geruzarako esteka bat dauka; geruza batek estekarik ez badu, irudiko goiko geruza da.

Dockerfile-k honako komandoak izan ditzake:

  • FROM β€” irudi bat osatzerakoan sarrera-puntua;
  • MANTAINTZAILEA - irudiaren jabearen izena;
  • RUN - komandoa exekuzioa irudia muntatzean;
  • GEHITU - ostalari fitxategia irudi berri batera kopiatzea; fitxategiaren URLa zehazten baduzu, Docker-ek zehaztutako direktoriora deskargatuko du;
  • ENV - ingurune-aldagaiak;
  • CMD - irudian oinarritutako edukiontzi berri bat sortzen hasten da;
  • ENTRYPOINT - komandoa edukiontzia abiarazten denean exekutatzen da.
  • WORKDIR CMD komandoa exekutatzeko lan-direktorioa da.
  • ERABILTZAILEA - irudian oinarrituta sortutako edukiontziaren UID-a ezartzen du.
  • BOLUMEN - ostalariaren direktorioa edukiontzian muntatzen du.
  • EXPOSE edukiontzian entzuten den ataken multzoa da.

Nola funtzionatzen du UnionFS?

UnionFS - Utility pila fitxategi sistema (FS) Linux eta FreeBSDrako. FS honek kopia-idazketa mekanismo bat ezartzen du (Copy-On-Write, COW). UnionFS-ren lan-unitatea geruza bat da; geruza bakoitza fitxategi-sistema oso gisa hartu behar da, errotik bertatik direktorioen hierarkia batekin. UnionFS-k beste fitxategi-sistemetarako batasun-muntaia sortzen du eta fitxategi-sistema ezberdinetako fitxategiak eta direktorioak (forkak izenekoak) fitxategi-sistema koherente bakarrean konbinatzea ahalbidetzen du, erabiltzailearentzat gardentasunez.

Ibilbide berdinak dituzten direktorioen edukiak batera agertuko dira sortutako fitxategi-sistemaren direktorio bateratu batean (izen-espazio bakarrean).

UnionFS-k geruzak konbinatzen ditu printzipio hauetan oinarrituta:

  • geruzetako bat goi-mailako geruza bihurtzen da, bigarren eta ondorengo geruzak behe-mailako geruzak;
  • geruzako objektuak erabiltzailearentzat eskuragarri daude "goitik behera", hau da. eskatutako objektua "goiko" geruzan badago, itzultzen da, "beheko" geruzan izen bereko objektu bat egon arren; bestela β€œbeheko” geruzaren objektua itzultzen da; eskatutako objektua ez badago ez han, "Ez dago fitxategirik edo direktoriorik" errorea itzultzen da;
  • lan-geruza "goiena" da, hau da, erabiltzaileen datuak aldatzeko ekintza guztiak goi-mailako geruzan bakarrik islatzen dira, beheko mailetako geruzen edukietan eragin gabe.

Docker aplikazioak exekutatzeko edukiontziak erabiltzeko teknologia ohikoena da. Arloko estandarra bihurtu da, Linux kernelak eskaintzen dituen cgroups eta namespaces oinarrituta.

Docker-ek aplikazioak azkar zabaltzeko eta fitxategi-sistemaren erabilera onena egiteko aukera ematen digu OS kernel-a edukiontzi guztien artean banatuz, OS prozesu bereizi gisa exekutatzen.

Iturria: www.habr.com

Gehitu iruzkin berria