{"id":91905,"date":"2020-08-20T07:42:23","date_gmt":"2020-08-20T05:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii"},"modified":"2020-08-20T07:42:23","modified_gmt":"2020-08-20T05:42:23","slug":"chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","title":{"rendered":"Ce este Docker: o scurt\u0103 introducere \u00een istorie \u0219i principalele sale abstractiz\u0103ri","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Pe 10 august a \u00eenceput <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">un curs video despre Docker<\/a><\/noindex>, \u00een care analiz\u0103m totul \u2014 de la principalele abstractiz\u0103ri p\u00e2n\u0103 la parametrii de re\u021bea. <\/p>\n<p><\/p>\n<p>\u00cen acest articol, vom discuta despre istoricul apari\u021biei Docker \u0219i despre principalele sale abstractiz\u0103ri: Image, Cli, Dockerfile. Lec\u021bia este destinat\u0103 \u00eencep\u0103torilor, a\u0219a c\u0103, cu siguran\u021b\u0103, nu va fi interesant\u0103 pentru utilizatorii experimenta\u021bi. Nu vor fi detalii tehnice complexe, doar cele mai de baz\u0103 informa\u021bii.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ce este Docker: o scurt\u0103 introducere \u00een istorie \u0219i principalele sale abstractiz\u0103ri\" src=\"\/wp-content\/uploads\/2020\/08\/f01af417f24c838577b09bdf90f02fb9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"chto-takoe-docker\">Ce este Docker<\/h2>\n<p><\/p>\n<p>S\u0103 arunc\u0103m o privire asupra defini\u021biei Docker de pe Wikipedia.<\/p>\n<p><\/p>\n<blockquote><p>Docker este un software pentru automatizarea desf\u0103\u0219ur\u0103rii \u0219i gestion\u0103rii aplica\u021biilor \u00een medii care suport\u0103 containerizarea.<\/p><\/blockquote>\n<p>Din aceast\u0103 defini\u021bie nu reiese mare lucru. \u00cen special, nu este clar ce \u00eenseamn\u0103 \u201e\u00een medii care suport\u0103 containerizarea\u201d. Pentru a \u00een\u021belege, s\u0103 ne \u00eentoarcem \u00een timp. S\u0103 \u00eencepem cu epoca pe care o numesc \u201eEra Monolitic\u0103\u201d.<\/p>\n<p><\/p>\n<h2 id=\"monolitnaya-era\">Era Monolitic\u0103<\/h2>\n<p><\/p>\n<p>Era Monolitic\u0103 este \u00eenceputul anilor 2000, c\u00e2nd toate aplica\u021biile erau monolitice, cu multe dependen\u021be. Dezvoltarea dura mult timp. \u00cen acela\u0219i timp, serverele nu erau foarte multe, le cuno\u0219team pe nume \u0219i le monitorizam. Exist\u0103 o compara\u021bie amuzant\u0103:<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"Od7e6hqis7A\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Od7e6hqis7A\/hqdefault.jpg\" alt=\"Reda\u021bi video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>Pets \u2014 acestea sunt animale de companie. \u00cen era monolitic\u0103, ne raportam la serverele noastre ca la animale de companie, le \u00eengrijeam \u0219i le protejam, \u00eendep\u0103rt\u00e2nd praful de pe ele. Iar pentru o gestionare mai bun\u0103 a resurselor, foloseam virtualizarea: luam un server \u0219i \u00eel \u00eemp\u0103r\u021beam \u00een mai multe ma\u0219ini virtuale, asigur\u00e2nd astfel izolarea mediului.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-baze-gipervizora\">Sisteme de virtualizare bazate pe hypervisor<\/h2>\n<p><\/p>\n<p>Despre sistemele de virtualizare cu siguran\u021b\u0103 a\u021bi auzit: VMware, VirtualBox, Hyper-V, Qemu KVM etc. Acestea ofer\u0103 izolare pentru aplica\u021bii \u0219i gestionarea resurselor, dar au \u0219i dezavantaje. Pentru a face virtualizare, este necesar un hypervisor. Iar hypervisorul adaug\u0103 un overhead de resurse. Ma\u0219ina virtual\u0103 \u00een sine este, de obicei, destul de voluminoas\u0103 \u2014 o imagine grea, pe care se afl\u0103 sistemul de operare, Nginx, Apache \u0219i posibil \u0219i MySQL. Imaginea este mare, iar operarea cu ma\u0219inile virtuale poate fi incomod\u0103. Ca urmare, lucrul cu virtualiz\u0103rile poate fi lent. Pentru a rezolva aceast\u0103 problem\u0103, au fost create sisteme de virtualizare la nivel de kernel.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-urovne-yadra\">Sisteme de virtualizare la nivel de kernel<\/h2>\n<p><\/p>\n<p>Virtualizarea la nivel de kernel este sus\u021binut\u0103 de sisteme precum OpenVZ, Systemd-nspawn, LXC. Un exemplu reprezentativ de astfel de virtualizare este LXC (Containere Linux). <\/p>\n<p><\/p>\n<p>LXC este un sistem de virtualizare la nivel de sistem de operare pentru a rula mai multe instan\u021be izolate ale sistemului de operare Linux pe un singur nod. LXC nu folose\u0219te ma\u0219ini virtuale, ci creeaz\u0103 un mediu virtual cu propriul s\u0103u spa\u021biu de procese \u0219i stiva de re\u021bea.<\/p>\n<p><\/p>\n<p>Practic, LXC creeaz\u0103 containere. Care este diferen\u021ba \u00eentre ma\u0219inile virtuale \u0219i containere?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ce este Docker: o scurt\u0103 introducere \u00een istorie \u0219i principalele sale abstractiz\u0103ri\" src=\"\/wp-content\/uploads\/2020\/08\/55afdcfd700d4869c9de488033a8e314.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un container nu este potrivit pentru a izola procese: \u00een sistemele de virtualizare la nivel de nucleu se g\u0103sesc vulnerabilit\u0103\u021bi care permit deschiderea containerului c\u0103tre gazd\u0103. Prin urmare, dac\u0103 ave\u021bi nevoie s\u0103 izola\u021bi ceva, este mai bine s\u0103 folosi\u021bi o ma\u0219in\u0103 virtual\u0103.<\/p>\n<p><\/p>\n<p>Diferen\u021bele dintre virtualizare \u0219i containerizare pot fi observate \u00een diagram\u0103.<br \/>\nExist\u0103 hypervizori hardware, hypervizori deasupra sistemului de operare \u0219i containere. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ce este Docker: o scurt\u0103 introducere \u00een istorie \u0219i principalele sale abstractiz\u0103ri\" src=\"\/wp-content\/uploads\/2020\/08\/a0c06e9adc1fab3b4b5e9e1b05b51d66.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hypervizorii \"de fier\" sunt o solu\u021bie excelent\u0103, dac\u0103 dori\u021bi s\u0103 izola\u021bi ceva cu adev\u0103rat. Deoarece exist\u0103 posibilitatea de a izola la nivel de pagini de memorie \u0219i procesoare.<\/p>\n<p><\/p>\n<p>Exist\u0103 hypervizori ca programe \u0219i exist\u0103 containere, despre care vom vorbi mai departe. \u00cen sistemele de containerizare, nu exist\u0103 hypervizor, ci exist\u0103 un Container Engine, care creeaz\u0103 \u0219i gestioneaz\u0103 containere. Aceast\u0103 solu\u021bie este mai u\u0219oar\u0103, de aceea, datorit\u0103 lucrului cu nucleul, overhead-ul este mai mic sau chiar inexistent.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"chto-ispolzuetsya-dlya-konteynerizacii-na-urovne-yadra\">Ce este utilizat pentru containerizarea la nivel de nucleu<\/h2>\n<p>Tehnologiile principale care permit crearea unui container izolat de alte procese sunt Namespaces \u0219i Control Groups.<\/p>\n<p>Namespaces: PID, Networking, Mount \u0219i User. Exist\u0103 \u0219i altele, dar pentru simplificarea \u00een\u021belegerii ne vom opri asupra acestora.<\/p>\n<p>PID Namespace limiteaz\u0103 procesele. C\u00e2nd, de exemplu, cre\u0103m un PID Namespace \u0219i plas\u0103m un proces acolo, acesta devine cu PID 1. De obicei, \u00een sistemele PID 1 este systemd sau init. Astfel, c\u00e2nd plas\u0103m un proces \u00eentr-un nou namespace, acesta prime\u0219te \u0219i el PID 1.<\/p>\n<p>Networking Namespace permite limitarea\/izolarea re\u021belei \u0219i plasarea interfe\u021belor proprii \u00een interior. Mount reprezint\u0103 o limitare a sistemului de fi\u0219iere. User reprezint\u0103 limit\u0103ri pe baza utilizatorilor.<\/p>\n<p>Control Groups: Memorie, CPU, IOPS, Re\u021bea \u2014 \u00een total aproximativ 12 set\u0103ri. Acestea mai sunt cunoscute \u0219i sub numele de Cgroups (\"C grupuri\").<\/p>\n<p>Control Groups gestioneaz\u0103 resursele pentru container. Prin Control Groups putem specifica c\u0103 un container nu trebuie s\u0103 consume mai mult dec\u00e2t o anumit\u0103 cantitate de resurse.<\/p>\n<p>Pentru ca containerizarea s\u0103 func\u021bioneze corespunz\u0103tor, sunt utilizate tehnologii suplimentare: Capabilities, Copy-on-write \u0219i altele.<\/p>\n<p>Capabilities se refer\u0103 la faptul c\u0103 spunem procesului ce poate face \u0219i ce nu poate. La nivelul nucleului, acestea sunt pur \u0219i simplu h\u0103r\u021bi de bi\u021bi cu numeroase parametrii. De exemplu, utilizatorul root are privilegii complete, poate face tot. Serverul de timp poate schimba timpul de sistem: are capabilit\u0103\u021bi pentru Time Capsule, \u0219i at\u00e2t. Prin privilegii, putem configura flexibil restric\u021biile pentru procese \u0219i astfel ne putem proteja.<\/p>\n<p>Sistemul Copy-on-write ne permite s\u0103 lucr\u0103m cu imaginile Docker, folosindu-le mai eficient.<\/p>\n<p><em>\u00cen prezent, Docker are probleme cu compatibilitatea Cgroups v2, de aceea articolul se concentreaz\u0103 asupra Cgroups v1.<\/em><\/p><\/blockquote>\n<p>Dar s\u0103 ne \u00eentoarcem la poveste. <\/p>\n<p><\/p>\n<p>C\u00e2nd au ap\u0103rut sistemele de virtualizare la nivelul nucleului, acestea au \u00eenceput s\u0103 fie utilizate intensiv. Overhead-ul pe hypervizor a disp\u0103rut, dar au r\u0103mas unele probleme:<\/p>\n<p><\/p>\n<ul>\n<li>imaginile mari: \u00een OpenVZ sunt \u00eempinse sistemul de operare, biblioteci, o mul\u021bime de software divers, \u0219i, \u00een cele din urm\u0103, imaginea tot devine destul de mare;<\/li>\n<li>nu exist\u0103 un standard normal pentru ambalare \u0219i livrare, de aceea r\u0103m\u00e2ne problema dependen\u021belor. Exist\u0103 situa\u021bii \u00een care dou\u0103 buc\u0103\u021bi de cod folosesc aceea\u0219i bibliotec\u0103, dar cu versiuni diferite. \u00centre ele poate ap\u0103rea un conflict.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pentru a rezolva toate aceste probleme, a venit urm\u0103toarea er\u0103.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">Era containerelor<\/h2>\n<p><\/p>\n<p>C\u00e2nd a \u00eenceput Era containerelor, filosofia de lucru cu acestea s-a schimbat:<\/p>\n<p><\/p>\n<ul>\n<li>Un proces \u2014 un container.<\/li>\n<li>Toate dependen\u021bele necesare procesului sunt livrate \u00een containerul s\u0103u. Aceasta necesit\u0103 \u00eemp\u0103r\u021birea monolitului \u00een microservicii.<\/li>\n<li>Cu c\u00e2t imaginea este mai mic\u0103, cu at\u00e2t mai bine \u2014 mai pu\u021bine vulnerabilit\u0103\u021bi posibile, se desf\u0103\u0219oar\u0103 mai repede \u0219i a\u0219a mai departe.<\/li>\n<li>Instan\u021bele devin efemere. <\/li>\n<\/ul>\n<p><\/p>\n<p>\u021aine\u021bi minte, am vorbit despre pets vs cattle? \u00cen trecut, instan\u021bele erau asem\u0103n\u0103toare animalelor de companie, iar acum sunt ca \u0219i bovinele \u2014 vite. \u00cen trecut, era un monolit \u2014 o aplica\u021bie. Acum sunt 100 de microservicii, 100 de containere. Unele containere pot avea 2-3 replici. Nu mai este at\u00e2t de important s\u0103 control\u0103m fiecare container. Ce este cu adev\u0103rat important este disponibilitatea serviciului \u00een sine: ceea ce face acest set de containere. Acest lucru schimb\u0103 abord\u0103rile \u00een monitorizare.<\/p>\n<p><\/p>\n<p>\u00centre 2014-2015, a avut loc apogeul Docker \u2014 tehnologia despre care vom vorbi acum.<\/p>\n<p><\/p>\n<p>Docker a schimbat filosofia \u0219i a standardizat ambalarea aplica\u021biilor. Cu ajutorul Docker, putem ambala o aplica\u021bie, o trimitem \u00eentr-un repository, o desc\u0103rc\u0103m de acolo \u0219i o desf\u0103\u0219ur\u0103m. <\/p>\n<p><\/p>\n<p>\u00centr-un container Docker, includem tot ce este necesar, astfel \u00eenc\u00e2t problema dependen\u021belor este rezolvat\u0103. Docker garanteaz\u0103 reproducibilitatea. Cred c\u0103 mul\u021bi s-au confruntat cu probleme de reproducibilitate: la tine totul func\u021bioneaz\u0103, dar c\u00e2nd faci push pe produc\u021bie, acolo nu mai func\u021bioneaz\u0103. Cu Docker, aceast\u0103 problem\u0103 dispare. Dac\u0103 containerul t\u0103u Docker porne\u0219te \u0219i face ceea ce trebuie s\u0103 fac\u0103, atunci cu o probabilitate mare va porni pe produc\u021bie \u0219i acolo va face acela\u0219i lucru.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">O not\u0103 despre overhead<\/h2>\n<p>Exist\u0103 \u00eentotdeauna dispute pe tema overhead-ului. Unii consider\u0103 c\u0103 Docker nu aduce o \u00eenc\u0103rc\u0103tur\u0103 suplimentar\u0103, deoarece folose\u0219te nucleul Linux \u0219i toate procesele sale necesare pentru containerizare. Adic\u0103, \u201edac\u0103 spui c\u0103 Docker este overhead, atunci \u0219i nucleul Linux este overhead\u201d.<\/p>\n<p>Pe de alt\u0103 parte, dac\u0103 ne aprofund\u0103m, exist\u0103 \u00eentr-adev\u0103r c\u00e2teva aspecte \u00een Docker despre care putem spune, cu o anumit\u0103 \u00eentindere, c\u0103 sunt overhead.<\/p>\n<p>Primul este PID namespace. C\u00e2nd plas\u0103m un proces \u00een namespace, i se aloc\u0103 PID 1. \u00cen acela\u0219i timp, acestui proces \u00eei este atribuit \u0219i un alt PID, care se afl\u0103 \u00een namespace-ul gazdei, dincolo de container. De exemplu, am pornit Nginx \u00eentr-un container, acesta a devenit PID 1 (procesul principal). Iar pe gazd\u0103 are PID 12623. \u0218i este greu de spus c\u00e2t de mult reprezint\u0103 asta un overhead.<\/p>\n<p>Al doilea aspect este Cgroups. S\u0103 lu\u0103m Cgroups pentru memorie, adic\u0103 capacitatea de a limita memoria unui container. Atunci c\u00e2nd este activat, se activeaz\u0103 contorii, memory accounting: nucleul trebuie s\u0103 \u00een\u021beleag\u0103 c\u00e2te pagini au fost alocate \u0219i c\u00e2te sunt \u00eenc\u0103 libere pentru acest container. Acesta ar putea fi un overhead, dar nu am \u00eent\u00e2lnit studii precise despre cum influen\u021beaz\u0103 performan\u021ba. \u0218i eu personal nu am observat c\u0103 aplica\u021bia, rulat\u0103 \u00een Docker, ar fi pierdut brusc din performan\u021b\u0103. <\/p>\n<p>\u0218i \u00eenc\u0103 un comentariu despre performan\u021b\u0103. Anumite parametru ai nucleului sunt trecute de la gazd\u0103 \u00een container. \u00cen special, anumi\u021bi parametru de re\u021bea. Prin urmare, dac\u0103 dore\u0219ti s\u0103 rulezi ceva de mare performan\u021b\u0103 \u00een Docker, de exemplu ceva care va utiliza intens re\u021beaua, atunci, cel pu\u021bin, va trebui s\u0103 ajustezi ace\u0219ti parametru. De exemplu, nf_conntrack. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">Despre conceptul Docker<\/h2>\n<p><\/p>\n<p>Docker este compus din mai multe componente: <\/p>\n<p><\/p>\n<ol>\n<li>Docker Daemon \u2014 motorul containerelor; acesta lanseaz\u0103 containere. <\/li>\n<li>Docker CII \u2014 un utilitar pentru gestionarea Docker.<\/li>\n<li>Dockerfile \u2014 instruc\u021biuni pentru construirea unei imagini.<\/li>\n<li>Image \u2014 imaginea din care se desf\u0103\u0219oar\u0103 containerele.<\/li>\n<li>Container.<\/li>\n<li>Docker registry \u2014 un depozit de imagini.<\/li>\n<\/ol>\n<p><\/p>\n<p>Din punct de vedere schematic, arat\u0103 cam a\u0219a:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ce este Docker: o scurt\u0103 introducere \u00een istorie \u0219i principalele sale abstractiz\u0103ri\" src=\"\/wp-content\/uploads\/2020\/08\/73ccc02c14485f72cfd7c64e3074f3b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pe Docker_host func\u021bioneaz\u0103 Docker daemon, care lanseaz\u0103 containere. Exist\u0103 un Client care trimite comenzi: construie\u0219te imaginea, descarc\u0103 imaginea, lanseaz\u0103 containerul. Docker daemon se conecteaz\u0103 la registry \u0219i le execut\u0103. Docker client poate s\u0103 se adreseze \u0219i local (prin unix socket), \u0219i prin TCP de pe un host la distan\u021b\u0103.<\/p>\n<p><\/p>\n<p>S\u0103 parcurgem fiecare component\u0103.<\/p>\n<p><\/p>\n<p><u>Docker daemon (demonul)<\/u> \u2014 partea serverului, acesta func\u021bioneaz\u0103 pe ma\u0219ina gazd\u0103: descarc\u0103 imagini \u0219i lanseaz\u0103 containere din ele, creeaz\u0103 re\u021bea \u00eentre containere, colec\u021bioneaz\u0103 loguri. C\u00e2nd spunem \u201ecreeaz\u0103 imagine\u201d, demonul se ocup\u0103 de aceasta.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2014 partea client a Docker, un utilitar de consol\u0103 pentru lucru cu demonul. O repet, poate func\u021biona nu doar local, ci \u0219i prin re\u021bea. <\/p>\n<p><\/p>\n<p><strong>Comenzile de baz\u0103:<\/strong><\/p>\n<p><\/p>\n<p>docker ps \u2014 arat\u0103 containerele care sunt acum lansate pe Docker host.<br \/>\ndocker images \u2014 arat\u0103 imaginile desc\u0103rcate local.<br \/>\ndocker search  \u2014 c\u0103utare imagine \u00een registry.<br \/>\ndocker pull  \u2014 descarc\u0103 imaginea din registry pe ma\u0219in\u0103.<br \/>\ndocker build &lt;&gt; \u2014 construie\u0219te imaginea.<br \/>\ndocker run  \u2014 lanseaz\u0103 containerul.<br \/>\ndocker rm  \u2014 \u0219terge containerul.<br \/>\ndocker logs  \u2014 logurile containerului<br \/>\ndocker start\/stop\/restart  \u2014 lucrul cu containerul\n<\/p>\n<p>Dac\u0103 st\u0103p\u00e2ni\u021bi aceste comenzi \u0219i le folosi\u021bi cu \u00eencredere, atunci considera\u021bi c\u0103 a\u021bi st\u0103p\u00e2nit Docker la nivel de utilizator \u00een propor\u021bie de 70%.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2014 instruc\u021biuni pentru crearea imaginii. Practic fiecare comand\u0103 din instruc\u021biune este un nou strat. S\u0103 vedem exemplul.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ce este Docker: o scurt\u0103 introducere \u00een istorie \u0219i principalele sale abstractiz\u0103ri\" src=\"\/wp-content\/uploads\/2020\/08\/4d61b58d0d0d8b2e4ddbbfe573f34f7e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A\u0219a arat\u0103 un Dockerfile: pe st\u00e2nga sunt comenzile, pe dreapta \u2014 argumentele. Fiecare comand\u0103 de aici (\u0219i \u00een general scris\u0103 \u00een Dockerfile) creeaz\u0103 un nou strat \u00een Image. <\/p>\n<p><\/p>\n<p>Chiar \u0219i uit\u00e2ndu-ne la partea st\u00e2ng\u0103, putem \u00een\u021belege aproximativ ce se \u00eent\u00e2mpl\u0103. Spunem: \u201ecreeaz\u0103-ne un folder\u201d \u2013 acesta este un strat. \u201eFace folderul activ\u201d \u2013 acesta este un alt strat, \u0219i tot a\u0219a. Tortul stratificat face via\u021ba mai u\u0219oar\u0103. Dac\u0103 voi crea un alt Dockerfile \u0219i \u00een ultima linie voi schimba ceva \u2013 nu voi rula \u201epython\u201d \u201emain.py\u201d, ci ceva diferit, sau voi instala dependen\u021be dintr-un alt fi\u0219ier \u2013 atunci straturile anterioare vor fi reutilizate, ca un cache.<\/p>\n<p><\/p>\n<p><u>Imagine<\/u> \u2014 este un pachet de containere, din imagine pornesc containere. Dac\u0103 privim Docker din perspectiva unui manager de pachete (de parc\u0103 am lucra cu pachete deb sau rpm), imaginea este practic un pachet rpm. Prin yum install putem instala aplica\u021bii, le putem \u0219terge, le putem c\u0103uta \u00een depozit, desc\u0103rca. Aici este cam la fel: din imagine pornesc containere, acestea sunt stocate \u00een Docker registry (analog cu yum, \u00een depozit), iar fiecare imagine are un hash SHA-256, un nume \u0219i un tag.<\/p>\n<p><\/p>\n<p>Imaginea este construit\u0103 conform instruc\u021biunii din Dockerfile. Fiecare instruc\u021biune din Dockerfile creeaz\u0103 un nou strat. Straturile pot fi reutilizate.<\/p>\n<p><\/p>\n<p><u>Docker registry<\/u> \u2014 este un depozit de imagini Docker. Analog cu sistemele de operare, Docker are un registru standard public \u2014 dockerhub. Dar se poate construi propriul depozit, propriul Docker registry. <\/p>\n<p><\/p>\n<p><u>Container<\/u> \u2014 este ceea ce se lanseaz\u0103 din imagine. Conform instruc\u021biunii din Dockerfile am construit imaginea, apoi o lans\u0103m din aceast\u0103 imagine. Acest container este izolat de celelalte containere, ar trebui s\u0103 con\u021bin\u0103 tot ce este necesar pentru func\u021bionarea aplica\u021biei. Totodat\u0103, un container este un singur proces. Se \u00eent\u00e2mpl\u0103 s\u0103 fie necesar s\u0103 facem dou\u0103 procese, dar aceasta contravine oarecum ideologiei Docker.<\/p>\n<p><\/p>\n<p>Cerinta \u201eun container \u2014 un proces\u201d este legat\u0103 de PID Namespace. C\u00e2nd \u00een Namespace se lanseaz\u0103 un proces cu PID 1, dac\u0103 acesta moare, atunci \u00eentregul container moare \u0219i el. Dac\u0103 acolo sunt lansate dou\u0103 procese: unul tr\u0103ie\u0219te, iar al doilea a murit, containerul tot continu\u0103 s\u0103 tr\u0103iasc\u0103. Dar acest lucru este legat de cele mai bune practici, despre care vom discuta \u00een alte materiale.<\/p>\n<p><\/p>\n<p>Pentru a studia mai detaliat caracteristicile \u0219i programul complet al cursului, pute\u021bi accesa linkul: \u201e<noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">Curs video despre Docker<\/a><\/noindex>\u00bb. <\/p>\n<p><\/p>\n<p><em>Autor: Marcel Ibraev, administrator Kubernetes certificat, inginer practicant la Southbridge, speaker \u0219i dezvoltator de cursuri Sloerm.<\/em><\/p>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/515508\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f Docker \u0438 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u0445: Image, Cli, Dockerfile. \u041b\u0435\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c. \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u043e\u0432\u0438, \u0430\u043f\u043f\u0435\u043d\u0434\u0438\u043a\u0441\u0430 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91906,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91905","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Ce este Docker: o scurt\u0103 incursiune \u00een istorie \u0219i \u00een principalele abera\u021bii | ProHoster","description":"Pe 10 august a \u00eenceput la Sloerm un curs video despre Docker, \u00een care discut\u0103m complet \u2014 de la abera\u021biile de baz\u0103 p\u00e2n\u0103 la parametrii re\u021belei.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster","og:description":"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-20T05:42:23+00:00","article:modified_time":"2020-08-20T05:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91905","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:18:28","updated":"2022-10-01 05:09:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/91905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=91905"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/91905\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/91906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=91905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=91905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=91905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}