VM oder Docker?

Wéi wësst Dir ob Dir Docker braucht an net e VM? Dir musst bestëmmen wat Dir genau wëllt isoléieren. Wann Dir e System mat garantéierte dedizéierten Ressourcen a virtueller Hardware isoléiere wëllt, da sollt d'Wiel e VM sinn. Wann Dir Lafen Uwendungen als separat Systemprozesser isoléiere musst, braucht Dir Docker.

Also wat ass den Ënnerscheed tëscht Docker Container a VMs?

Virtuell Maschinn (VM) ass e virtuelle Computer mat all virtuellen Apparater an enger virtueller Festplack, op där en neit onofhängegt OS installéiert ass, zesumme mat virtuellen Apparat Chauffeuren, Erënnerungsmanagement an aner Komponenten. Dat ass, mir kréien eng Abstraktioun vu kierperlecher Hardware déi et eis erlaabt vill virtuell Computeren op engem Computer ze lafen.
En installéierten VM kann op verschiddene Weeër Plaz op Ärem Computer senger Disk ophuelen:

  • fix Festplack Plaz, déi méi séier Zougang zu der virtueller Festplack erlaabt an evitéiert Fichier Fragmentatioun;
  • dynamesch Erënnerungsallokatioun. Wann Dir zousätzlech Uwendungen installéiert, gëtt d'Erënnerung dynamesch fir si zougewisen bis et de maximale Betrag erreecht deen et zougewisen ass.

Wat méi virtuell Maschinnen pro Server, dest méi Plaz huelen se op, an erfuerderen och konstant Ënnerstëtzung fir d'Ëmwelt déi néideg ass fir Är Applikatioun ze lafen.

Docker ass Software fir Container-baséiert Uwendungen ze kreéieren. Container a virtuell Maschinnen hunn ähnlech Virdeeler, awer funktionnéieren anescht. Container huelen manner Plaz op well ... weiderbenotzen méi gedeelt Ressourcen vum Hostsystem wéi de VM, well am Géigesaz zu VM bitt et Virtualiséierung um OS Niveau, net um Hardwareniveau. Dës Approche resultéiert am nidderegen Erënnerungsofdrock, méi séier Deployment a méi einfacher Skaléieren.

De Container liwwert e méi effiziente Mechanismus fir d'Applikatiounen ze kapselen andeems se déi néideg Interfaces zum Hostsystem ubidden. Dës Fonktioun erlaabt Container de Kär vum System ze deelen, mat all Container deen als separat Host OS Prozess leeft, deen säin eegene Set vu Gedächtnisberäicher huet (seng eegen virtuell Adressplaz). Well de virtuelle Adressraum vun all Container seng eege ass, kënnen d'Donnéeën, déi zu verschiddene Gedächtnisberäicher gehéieren, net geännert ginn.
Déi gebierteg OS fir Docker ass Linux (Docker kann och op Windows a MacOS benotzt ginn), et benotzt seng Haaptvirdeeler, déi et erlaben d'Kernel Trennung z'organiséieren. Docker Container op Windows lafen wäert an enger virtueller Maschinn stattfannen déi Linux OS leeft, well Container deelen den OS vum Hostsystem an den Haapt OS fir si ass Linux.

Container - wéi funktionnéiert et?

Container ass eng Applikatiounsniveau Abstraktioun déi Code an Ofhängegkeeten kombinéiert. Container ginn ëmmer aus Biller erstallt, eng schreiwenbar Topschicht bäigefüügt a verschidde Parameteren initialiséiert. Well e Container seng eege Schreifschicht huet an all Ännerungen an där Schicht gespäichert sinn, kënne verschidde Container Zougang zum selwechte Masterbild deelen.

All Container kann duerch eng Datei am Docker-compose Projet konfiguréiert ginn, deen an der Haaptléisung abegraff ass - docker-compose.yml. Do kënnt Dir verschidde Parameteren setzen wéi Containernumm, Ports, Identifizéierer, Ressourcelimiten, Ofhängegkeeten tëscht anere Container. Wann Dir kee Containernumm an den Astellunge spezifizéiert, erstellt Docker all Kéier en neie Container, gëtt et zoufälleg en Numm.

Wann e Container vun engem Bild gestart gëtt, montéiert Docker e Lies-Schreif Dateiesystem uewen op all Schichten drënner. Dëst ass wou all Prozesser déi mir wëllen datt eisen Docker Container lafen lafen.

Wann Docker als éischt e Container ufänkt, ass déi initial Lies-Schreifschicht eidel. Wann Ännerungen optrieden, gi se op dës Schicht applizéiert; zum Beispill, wann Dir wëllt e Fichier änneren, datt Fichier gëtt aus der liesen-nëmmen Layer ënnen op d'Lies-Schreiwen Layer kopéiert.
D'Lies-nëmme Versioun vun der Datei gëtt nach ëmmer existéiert, awer se ass elo ënner der Kopie verstoppt. Bänn gi benotzt fir Daten ze späicheren, onofhängeg vum Liewenszyklus vum Container. Bänn sinn initialiséiert wann de Container erstallt gëtt.

Wéi ass d'Bild mam Container verbonnen?

Bild - den Haaptelement fir all Container. D'Bild gëtt aus engem Dockerfile erstallt an de Projet bäigefüügt an ass e Set vu Dateiesystemer (Schichten) openeen openeen a gruppéiert, nëmme liesen; Déi maximal Unzuel u Schichten ass 127.

Am Häerz vun all Bild ass e Basisbild, dat vum FROM Kommando spezifizéiert gëtt - den Entréespunkt beim Bauen vum Dockerfile Bild. All Layer ass eng readonly Layer a gëtt duerch en eenzege Kommando vertrueden, deen den Dateiesystem ännert, geschriwwen an engem Dockerfile.
Fir dës Schichten an een eenzegt Bild ze kombinéieren, benotzt Docker den Advanced Multi-Layer Union Dateisystem (AuFS ass uewen op UnionFS gebaut), wat et erlaabt verschidde Dateien an Verzeechnes aus verschiddene Dateischichten transparent ze iwwerlageren, e kohäsive Dateiesystem ze kreéieren.

Schichten enthalen Metadaten, déi Iech erlaabt Informatioun iwwer all Layer während der Runtime an der Bauzäit ze späicheren. All Layer enthält e Link op déi nächst Layer; wann eng Layer kee Link huet, dann ass et déi iewescht Layer am Bild.

D'Dockerfile kann Kommandoen enthalen wéi:

  • VUN - Entréespunkt wann Dir e Bild bilden;
  • MAINTAINER - Numm vum Bildbesëtzer;
  • RUN - Kommando Ausféierung während Bild Assemblée;
  • ADD - kopéiert d'Hostdatei op en neit Bild; wann Dir d'URL vun der Datei spezifizéiert, wäert Docker se an de spezifizéierte Verzeechnes eroflueden;
  • ENV - Ëmfeld Verännerlechen;
  • CMD - fänkt d'Schafung vun engem neie Container op Basis vum Bild un;
  • ENTRYPOINT - de Kommando gëtt ausgefouert wann de Container ufänkt.
  • WORKDIR ass den Aarbechtsverzeichnis fir de CMD Kommando auszeféieren.
  • USER - setzt d'UID fir de Container erstallt op Basis vum Bild.
  • VOLUME - montéiert den Hostverzeichnis an de Container.
  • EXPOSE ass eng Rei vu Ports déi am Container gelauschtert ginn.

Wéi funktionnéiert UnionFS?

UnionFS - Utility Stack Dateisystem (FS) fir Linux a FreeBSD. Dëse FS implementéiert e Copy-on-Write Mechanismus (Copy-On-Write, COW). D'Aarbechtseenheet vun UnionFS ass eng Schicht; all Layer soll als separat vollwäerteg Dateiesystem mat enger Hierarchie vun Verzeichnisser vun der Root selwer ugesi ginn. UnionFS erstellt e Gewerkschaftsmount fir aner Dateiesystemer an erlaabt Dateien a Verzeichnisser aus verschiddene Dateiesystemer (genannt Gabel) an engem eenzege kohärent Dateiesystem kombinéiert ze ginn, transparent fir de Benotzer.

D'Inhalter vun de Verzeichnisser mat de selwechte Weeër erschéngen zesummen an engem vereenegten Verzeechnes (an engem eenzegen Nummraum) vum resultéierende Dateiesystem.

UnionFS kombinéiert Schichten baséiert op de folgende Prinzipien:

  • eng vun de Schichten gëtt d'Top-Level Schicht, déi zweet a spéider Schichten ginn déi ënnescht Schicht;
  • Layer-Objete sinn dem Benotzer "vun uewe bis ënnen", d.h. wann de ugefrote Objet an der "Top" Layer ass, gëtt et zréck, onofhängeg vun der Präsenz vun engem Objet mam selwechten Numm an der "ënnen" Layer; soss gëtt den Objet vun der "ënnen" Schicht zréck; wann de ugefrote Objet weder do nach do ass, gëtt de Feeler "Keng esou Datei oder Dossier" zréckginn;
  • d'Aarbechtsschicht ass den "Top", dat heescht, all Benotzeraktioune fir Daten z'änneren ginn nëmmen op der Top-Level Schicht reflektéiert, ouni den Inhalt vun de Schichten vun den ënneschten Niveauen ze beaflossen.

Docker ass déi allgemengst Technologie fir Container ze benotzen fir Uwendungen ze lafen. Et ass de Standard am Feld ginn, baut op de cgroups an Namespaces, déi vum Linux Kernel geliwwert ginn.

Docker erlaabt eis séier Uwendungen z'installéieren an déi bescht Notzung vum Dateiesystem ze maachen andeems den OS Kernel tëscht all Container opgedeelt gëtt, als separat OS Prozesser lafen.

Source: will.com

Setzt e Commentaire