Docker verstoen

Ech hunn Docker fir e puer Méint elo benotzt fir den Entwécklungs-/Liwwerprozess vu Webprojeten ze strukturéieren. Ech bidden Habrakhabr Lieser eng Iwwersetzung vum Aféierungsartikel iwwer Docker - "Docker verstoen".

Wat ass Docker?

Docker ass eng oppe Plattform fir Uwendungen z'entwéckelen, ze liwweren an ze bedreiwen. Docker ass entwéckelt fir Är Uwendungen méi séier ze liwweren. Mat Docker kënnt Dir Är Applikatioun vun Ärer Infrastruktur ofkoppelen an d'Infrastruktur als geréiert Applikatioun behandelen. Docker hëlleft Iech Äre Code méi séier ze verschécken, méi séier ze testen, Uwendungen méi séier ze verschécken, an d'Zäit tëscht Schreiwen vum Code a Lafen Code ze reduzéieren. Docker mécht dëst duerch eng liicht Container Virtualiséierungsplattform, benotzt Prozesser an Utilities déi Iech hëllefen Är Uwendungen ze managen an ze hosten.

Am Kär, Docker erlaabt Iech bal all Applikatioun ze lafen, sécher an engem Container isoléiert. Sécher Isolatioun erlaabt Iech vill Container op de selwechte Host zur selwechter Zäit ze lafen. Déi liicht Natur vum Container, deen ouni zousätzlech Belaaschtung vun engem Hypervisor leeft, erlaabt Iech méi aus Ärer Hardware ze kréien.

D'Containervirtualiséierungsplattform an Tools kënnen an de folgende Fäll nëtzlech sinn:

  • Verpakung Är Applikatioun (an d'Komponenten déi Dir benotzt) an Docker Container;
  • Verdeelung an Liwwerung vun dëse Container un Är Teams fir Entwécklung an Testen;
  • dës Container op Äre Produktiounsplazen auszeleeën, souwuel an Datenzenteren an an de Wolleken.

Fir wat kann ech Docker benotzen?

Verëffentlecht séier Är Uwendungen

Docker ass super fir den Entwécklungszyklus ze organiséieren. Docker erlaabt d'Entwéckler lokal Container mat Uwendungen a Servicer ze lafen. Wat Iech duerno erlaabt Iech mam Prozess vu kontinuéierlecher Integratioun an Deployment Workflow z'integréieren.

Zum Beispill, Är Entwéckler schreiwen Code lokal an deelen hiren Entwécklungsstack (e Set vun Docker Biller) mat Kollegen. Wann se prett sinn, drécke se de Code an d'Container op den Testplaz a lafen all néideg Tester. Vun der Testplaz kënne se Code a Biller op d'Produktioun schécken.

Méi einfach auszeleeën an entfalen

D'Docker Container-baséiert Plattform mécht et einfach Är Notzlaascht ze portéieren. Docker Container kënnen op Ärer lokaler Maschinn lafen, entweder real oder op enger virtueller Maschinn an engem Datenzenter, oder an der Wollek.

D'Portabilitéit a Liichtgewiicht vum Docker mécht et einfach Är Aarbechtslaascht dynamesch ze managen. Dir kënnt Docker benotze fir Är Applikatioun oder Servicer z'installéieren oder auszeschalten. D'Geschwindegkeet vum Docker erlaabt dëst a bal Echtzäit ze maachen.

Méi héich Lasten a méi Notzlaascht

Docker ass liicht a séier. Et bitt eng elastesch, kosteneffektiv Alternativ zu Hypervisor-baséiert virtuelle Maschinnen. Et ass besonnesch nëtzlech an héich-Laascht Ëmfeld, zum Beispill, wann Dir Är eege Cloud oder Plattform-as-Service erstellt. Awer et ass och nëtzlech fir kleng a mëttelgrouss Uwendungen wann Dir méi aus de Ressourcen wëllt kréien, déi Dir hutt.

Main Docker Komponenten

Docker besteet aus zwee Haaptkomponenten:

  • Docker: eng Open Source Virtualiséierungsplattform;
  • Docker Hub: Eis Plattform-as-a-Service fir Docker Container ze verdeelen an ze managen.

Notéiert! Docker gëtt ënner der Apache 2.0 Lizenz verdeelt.

Docker Architektur

Docker benotzt eng Client-Server Architektur. Den Docker Client kommunizéiert mam Docker Daemon, deen d'Belaaschtung iwwerhëlt fir Är Container ze kreéieren, ze lafen an ze verdeelen. Béid Client a Server kënnen um selwechte System lafen, Dir kënnt de Client mat engem Remote Docker Daemon verbannen. De Client an de Server kommunizéieren iwwer e Socket oder e RESTful API.

Docker verstoen

Docker Daemon

Wéi am Diagramm gewisen, leeft den Daemon op der Hostmaschinn. De Benotzer interagéiert net direkt mam Server, awer benotzt de Client dofir.

Docker Client

Den Docker Client, den Docker Programm, ass den Haaptinterface fir Docker. Et kritt Kommandoe vum Benotzer an interagéiert mam Docker Daemon.

Bannen Docker

Fir ze verstoen aus deem Docker besteet, musst Dir iwwer dräi Komponenten wëssen:

  • Biller
  • Enregistrement
  • Container

Biller

D'Docker Bild ass eng liesbare Schabloun. Zum Beispill kann d'Bild den Ubuntu Betriebssystem mat Apache an eng Applikatioun enthalen. Biller gi benotzt fir Container ze kreéieren. Docker mécht et einfach nei Biller ze kreéieren, existéierend ze aktualiséieren, oder Dir kënnt Biller erstallt vun anere Leit eroflueden. Biller sinn Komponente vun engem Docker Build.

Registry

Den Docker Registry späichert Biller. Et gi ëffentlech a privat Registere vun deenen Dir Biller eroflueden oder eropluede kënnt. Eng ëffentlech Docker Registry ass DockerHub. Et gëtt eng rieseg Sammlung vu Biller do gespäichert. Wéi Dir wësst, kënne Biller vun Iech erstallt ginn oder Dir kënnt Biller erstallt vun aneren benotzen. Registries sinn eng Verdeelungskomponent.

Container

Container sinn ähnlech wéi Verzeichnungen. Container enthalen alles wat d'Applikatioun brauch fir ze lafen. All Container gëtt aus engem Bild erstallt. Container kënnen erstallt, gestart, gestoppt, migréiert oder geläscht ginn. All Container ass isoléiert a bitt eng sécher Plattform fir d'Applikatioun. Container sinn Komponente vun der Aarbecht.

Also wéi funktionnéiert Docker?

Bis elo wësse mer dat:

  • mir kënne Biller erstellen an deenen eis Applikatiounen sinn;
  • mir kënnen Container aus Biller erstellen fir Uwendungen ze lafen;
  • Mir kënne Biller iwwer Docker Hub oder en anert Bildregister verdeelen.

Loosst eis kucken wéi dës Komponenten zesumme passen.

Wéi funktionéiert d'Bild?

Mir wësse schonn datt e Bild e Read-only Schabloun ass, aus deem e Container erstallt gëtt. All Bild besteet aus enger Rei vu Niveauen. Docker benotzt Gewerkschaft Fichier System fir dës Niveauen an ee Bild ze kombinéieren. Unioun Dateiesystem erlaabt Dateien a Verzeichnisser aus verschiddene Dateiesystemer (verschidde Filialen) transparent ze iwwerlappen, e kohärent Dateiesystem ze kreéieren.

Ee vun de Grënn firwat Docker liicht ass well et Schichten wéi dëst benotzt. Wann Dir d'Bild ännert, sou wéi d'Aktualiséierung vun enger Applikatioun, gëtt eng nei Layer erstallt. Also, ouni dat ganzt Bild z'ersetzen oder opzebauen, wéi Dir vläicht mat enger virtueller Maschinn ze dinn hutt, gëtt nëmmen d'Schicht derbäigesat oder aktualiséiert. An Dir musst net dat ganzt neit Bild verdeelen, nëmmen den Update gëtt verdeelt, wat et méi einfach a méi séier mécht d'Biller ze verdeelen.

Am Häerz vun all Bild ass e Basisbild. Zum Beispill, ubuntu, d'Basisbild vun Ubuntu, oder Fedora, d'Basisbild vun der Fedora Verdeelung. Dir kënnt och Biller als Basis benotze fir nei Biller ze kreéieren. Zum Beispill, wann Dir en Apache Bild hutt, kënnt Dir et als Basisbild fir Är Webapplikatiounen benotzen.

Notéiert! Docker zitt typesch Biller aus dem Docker Hub Registry.

Docker Biller kënnen aus dëse Basisbiller erstallt ginn; mir nennen d'Schrëtt fir dës Billerinstruktiounen ze kreéieren. All Instruktioun erstellt en neit Bild oder Niveau. D'Instruktioune wäerten déi folgend sinn:

  • lafen Kommando
  • e Fichier oder Verzeechnes derbäi
  • eng Ëmweltvariabel erstellen
  • Instruktioune fir wat ze lafen wann de Container vun dësem Bild lancéiert gëtt

Dës Instruktioune ginn an enger Datei gespäichert Dockerfile. Docker liest dëst Dockerfile, Wann Dir d'Bild baut, féiert dës Instruktiounen aus a bréngt dat lescht Bild zréck.

Wéi funktionnéiert den Docker Registry?

De Registry ass e Repository fir Docker Biller. Wann d'Bild erstallt ass, kënnt Dir et an den ëffentlechen Docker Hub Registry publizéieren oder an Äre perséinleche Registry.

Mam Docker Client kënnt Dir no scho publizéierte Biller sichen an se op Är Docker Maschinn eroflueden fir Container ze kreéieren.

Docker Hub bitt ëffentlech a privat Bildrepositories. Sichen an eroflueden Biller vun ëffentleche Repositories ass fir jiddereen verfügbar. Den Inhalt vu private Späichere sinn net an de Sichresultater abegraff. An nëmmen Dir an Är Benotzer kënnen dës Biller kréien a Container aus hinnen erstellen.

Wéi funktionéiert e Container?

E Container besteet aus engem Betribssystem, Benotzerdateien a Metadaten. Wéi mir wëssen, gëtt all Container aus engem Bild erstallt. Dëst Bild erzielt Docker wat am Container ass, wéi ee Prozess unzefänken, wéini de Container ufänkt, an aner Konfiguratiounsdaten. D'Docker Bild ass nëmme liesen. Wann Docker e Container ufänkt, erstellt eng Lies- / Schreifschicht uewen um Bild (mat der Gewerkschaftsdateisystem wéi virdru gesot) an deem d'Applikatioun ka lafen.

Wat geschitt wann de Container ufänkt?

Oder benotzt de Programm docker, oder mat der RESTful API, seet den Docker Client dem Docker Daemon fir de Container ze starten.

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

Loosst eis dëse Kommando kucken. De Client gëtt mam Kommando gestart docker, mat Optioun run, wat seet, datt en neie Container lancéiert gëtt. D'Mindestfuerderunge fir e Container ze lafen sinn déi folgend Attributer:

  • wéi ee Bild ze benotzen fir de Container ze kreéieren. An eisem Fall ubuntu
  • de Kommando deen Dir wëllt lafen wann de Container gestart ass. An eisem Fall /bin/bash

Wat geschitt ënnert der Hood wa mir dëse Kommando lafen?

Docker, an Uerdnung, mécht déi folgend:

  • luet d'Ubuntu Bild erof: docker kontrolléiert fir Bildverfügbarkeet ubuntu op der lokaler Maschinn, a wann et net do ass, da luet se erof DockerHub. Wann et e Bild gëtt, benotzt se et fir e Container ze kreéieren;
  • erstellt e Container: wann d'Bild kritt ass, benotzt Docker et fir e Container ze kreéieren;
  • initialiséiert de Dateiesystem a montéiert de Read-only Level: de Container gëtt am Dateiesystem erstallt an d'Bild gëtt op de Lies-nëmmen Niveau bäigefüügt;
  • initialiséiert d'Netzwierk / Bréck: erstellt en Netzwierk Interface, deen den Docker erlaabt mat der Hostmaschinn ze kommunizéieren;
  • Astellung vun der IP Adress: fënnt a setzt d'Adress;
  • Fänkt de spezifizéierte Prozess un: lancéiert Är Applikatioun;
  • Veraarbecht a produzéiert Output vun Ärer Applikatioun: verbënnt a protokolléiert Är Applikatioun Standard Input, Output a Fehlerstream fir datt Dir verfollege kënnt wéi Är Applikatioun funktionnéiert.

Dir hutt elo e schaffende Container. Dir kënnt Äre Container verwalten, interagéieren mat Ärer Applikatioun. Wann Dir décidéiert d'Applikatioun ze stoppen, läscht de Container.

Technologien benotzt

Docker ass a Go geschriwwen a benotzt e puer Features vum Linux Kernel fir déi uewe genannte Funktionalitéit ëmzesetzen.

Nummraim

Docker benotzt Technologie namespaces isoléiert Aarbechtsberäicher ze organiséieren, déi mir Container nennen. Wa mir e Container starten, erstellt Docker eng Rei vun Nummraim fir dee Container.

Dëst erstellt eng isoléiert Schicht, mat all Aspekt vum Container a sengem eegene Nummraum leeft an keen Zougang zum externe System huet.

Lëscht vun e puer Nummraim déi den Docker benotzt:

  • pid: de Prozess ze isoléieren;
  • Netz: fir d'Gestioun vun Netzwierkschnëttplazen;
  • ipc: IPC Ressourcen ze verwalten. (ICP: InterProccess Kommunikatioun);
  • mnt: Mount Punkten ze managen;
  • UTC: fir de Kernel ze isoléieren an d'Versiounsgeneratioun ze kontrolléieren (UTC: Unix Timesharing System).

Kontroll Gruppen

Docker benotzt och Technologie cgroups oder Kontrollgruppen. De Schlëssel fir eng Applikatioun isoléiert ze lafen ass d'Applikatioun nëmmen d'Ressourcen ze liwweren déi Dir wëllt ubidden. Dëst garantéiert datt d'Container gutt Noperen sinn. Kontrollgruppen erlaben Iech verfügbar Hardware Ressourcen ze deelen an, wann néideg, Limiten a Restriktiounen ze setzen. Zum Beispill, limitéieren déi méiglech Betrag vun Erënnerung fir de Container.

Unioun Dateisystem

Union File Sysem oder UnionFS ass e Dateiesystem dee funktionnéiert andeems Dir Schichten erstellt, wat et ganz liicht a séier mécht. Docker benotzt UnionFS fir d'Blöcke ze kreéieren aus deenen de Container gebaut gëtt. Docker kann verschidde Varianten vun UnionFS benotzen, dorënner: AUFS, btrfs, vfs an DeviceMapper.

Container Formater

Docker kombinéiert dës Komponenten an e Wrapper dee mir de Containerformat nennen. De Standardformat gëtt genannt libcontainer. Docker ënnerstëtzt och dat traditionellt Containerformat op Linux benotzt LXC. An Zukunft kann Docker aner Containerformater ënnerstëtzen. Zum Beispill, Integratioun mat BSD Jails oder Solaris Zonen.

Source: will.com

Setzt e Commentaire