{"id":31641,"date":"2019-10-31T21:42:19","date_gmt":"2019-10-31T18:42:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\/"},"modified":"2019-10-31T21:42:19","modified_gmt":"2019-10-31T18:42:19","slug":"docker-eto-igrushka-ili-net-ili-vsyo-taki-da","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","title":{"rendered":"Docker \u2014 este o juc\u0103rie sau nu? Sau totu\u0219i da?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Salut tuturor!<\/p>\n<p><\/p>\n<p>Mi-ar pl\u0103cea foarte mult s\u0103 \u00eencep direct cu subiectul, dar ar fi mai corect s\u0103 povestesc pu\u021bin despre istoricul meu:<\/p>\n<p><\/p>\n<h2>Introducere<\/h2>\n<p><\/p>\n<p>Sunt programator cu experien\u021b\u0103 \u00een dezvoltarea de aplica\u021bii frontend de tip single-page, scala\/java \u0219i nodejs pe server. <\/p>\n<p><\/p>\n<p>De mult timp (deja cu siguran\u021b\u0103 vreo doi-trei ani), am avut p\u0103rerea c\u0103 Docker este o minune ceresc\u0103 \u0219i o unealt\u0103 foarte tare, iar fiecare developer ar trebui s\u0103 \u0219tie s\u0103 o foloseasc\u0103. \u0218i de aici rezult\u0103 c\u0103 fiecare developer ar trebui s\u0103 aib\u0103 Docker instalat pe ma\u0219ina local\u0103. Ce s\u0103 mai vorbesc despre p\u0103rerea mea, arunca\u021bi o privire la anun\u021burile de munc\u0103 postate pe hh. \u00cen fiecare a doua exist\u0103 o men\u021biune despre Docker \u0219i dac\u0103 st\u0103p\u00e2ni\u021bi acest instrument \u2014 va fi un avantaj competitiv pentru dumneavoastr\u0103 \ud83d\ude09<\/p>\n<p><\/p>\n<p>Pe parcursul c\u0103l\u0103toriei mele, m-am \u00eent\u00e2lnit cu mul\u021bi oameni, fiecare av\u00e2nd o p\u0103rere diferit\u0103 despre Docker \u0219i ecosistemul s\u0103u. Unii spuneau c\u0103 este un lucru convenabil care garanteaz\u0103 cross-platform. Al\u021bii nu \u00een\u021belegeau de ce ar trebui s\u0103 ruleze \u00een containere \u0219i care este beneficiul, altele erau complet indiferente \u0219i nu \u00ee\u0219i f\u0103ceau griji (pur \u0219i simplu scriau cod \u0219i plecau acas\u0103 \u2014 \u00eei invidiez, de altfel \ud83d\ude42 )<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Motivele utiliz\u0103rii<\/h2>\n<p><\/p>\n<p>De ce am folosit Docker? Probabil din urm\u0103toarele motive:<\/p>\n<p><\/p>\n<ul>\n<li>lansarea bazei de date, 99% dintre aplica\u021bii folosesc baze de date<\/li>\n<li>lansarea nginx pentru a distribui frontendul \u0219i a face proxy pe backend<\/li>\n<li>pot \u00eempacheta aplica\u021bia \u00eentr-o imagine Docker, astfel aplica\u021bia mea va func\u021biona oriunde exist\u0103 Docker, problema distribu\u021biei este deja rezolvat\u0103<\/li>\n<li>descoperire de servicii din cutie, se pot face microservicii, fiecare container (conectat la o re\u021bea comun\u0103) poate accesa u\u0219or altul prin alias, foarte convenabil<\/li>\n<li>Este distractiv s\u0103 creezi un container \u0219i s\u0103 \u201ete joci\u201d \u00een el.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Ce nu mi-a pl\u0103cut niciodat\u0103 la Docker:<\/h2>\n<p><\/p>\n<ul>\n<li>pentru ca aplica\u021bia mea s\u0103 func\u021bioneze, am nevoie de Docker pe server. Dar de ce mi-ar trebui asta dac\u0103 aplica\u021biile mele func\u021bioneaz\u0103 pe jre sau pe nodejs \u0219i mediul pentru ele este deja pe server?<\/li>\n<li>dac\u0103 vreau s\u0103 rulez propria imagine (privat\u0103) construit\u0103 local pe un server la distan\u021b\u0103, am nevoie de propriul meu repository Docker, trebuie s\u0103 existe un registry undeva \u0219i trebuie s\u0103 configurez https, deoarece Docker cli func\u021bioneaz\u0103 doar prin https. Oh, Doamne\u2026 exist\u0103 op\u021biuni, desigur, s\u0103 salvezi imaginea local prin <code>docker save<\/code> \u0219i prin scp s\u0103 trimi\u021bi simplu imaginea... Dar sunt at\u00e2t de multe mi\u0219c\u0103ri. \u0218i pare o solu\u021bie \u201e\u00eend\u0103r\u0103tnic\u0103\u201d, p\u00e2n\u0103 nu apare propriul t\u0103u depozit.<\/li>\n<li><code>docker-compose<\/code>. El este necesar doar pentru a rula containere. At\u00e2t. Nu poate face nimic mai mult. <code>Docker-compose<\/code> are o mul\u021bime de versiuni ale fi\u0219ierelor sale, cu propriul s\u0103u sintax\u0103. Oric\u00e2t de declarat ar fi, nu vreau s\u0103 citesc documenta\u021bia lor. Nu am nevoie de ea niciunde altundeva.<\/li>\n<li>\u00een munc\u0103 \u00een echip\u0103, majoritatea oamenilor scriu Dockerfile foarte prost, nu \u00een\u021beleg cum se utilizeaz\u0103 cache-ul, adaug\u0103 \u00een imagine tot ce e necesar \u0219i ce nu, mo\u0219tenesc imagini care nu sunt pe dockerhub sau \u00een un repository privat, creeaz\u0103 anumite <code>docker-compose<\/code> fi\u0219ierele cu bazele de date nu r\u0103m\u00e2n persistente. \u00cen acela\u0219i timp, dezvoltatorii declar\u0103 cu m\u00e2ndrie c\u0103 docker este grozav, totul func\u021bioneaz\u0103 local \u0219i este important pentru resurse umane s\u0103 scrie \u00een anun\u021burile de angajare: \u201eFolosim docker \u0219i avem nevoie de un candidat cu aceast\u0103 experien\u021b\u0103\u201d.<\/li>\n<li>sunt mereu b\u00e2ntuit de g\u00e2nduri despre a ridica \u00een docker tot \u0219i toate: postgresql, kafka, redis. Din p\u0103cate, nu totul func\u021bioneaz\u0103 \u00eencontainere, nu totul este u\u0219or de configurat \u0219i de pornit. Acestea sunt sus\u021binute de dezvoltatori ter\u021bi, nu de proprii furnizori. \u0218i, \u00eentre noi fie vorba, apare imediat \u00eentrebarea, de ce furnizorul nu \u00ee\u0219i face griji cu privire la men\u021binerea produselor sale \u00een docker, poate \u0219tiu ceva?<\/li>\n<li>apare \u00eentotdeauna \u00eentrebarea despre persisten\u021ba datelor din container. \u0218i aici te g\u00e2nde\u0219ti, ar trebui s\u0103 \u00eemi montezi pur \u0219i simplu un director gazd\u0103 sau s\u0103 creezi un volum docker sau s\u0103 fac un container de date care acum <code>este deprecated<\/code>? \u0415\u0441\u043b\u0438 \u044f \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e uid \u0438 gid \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 id \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0438\u043d\u0430\u0447\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 root. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <code>volum<\/code> atunci datele vor fi create pur \u0219i simplu \u00eentr-un anumit <code>\/usr\/*<\/code> \u0219i va fi aceea\u0219i poveste cu uid \u0219i gid ca \u00een primul caz. Dac\u0103 porne\u0219ti un component extern, trebuie s\u0103 te ui\u021bi \u00een documenta\u021bie \u0219i s\u0103 cau\u021bi r\u0103spunsul la \u00eentrebarea: \u201e\u00een ce directoare ale containerului scrie componenta fi\u0219ierele?\u201d.<\/li>\n<\/ul>\n<p>\u00centotdeauna mi-a displ\u0103cut c\u0103 trebuie s\u0103 m\u0103 ocup prea mult de docker. <strong>\u00een etapa ini\u021bial\u0103<\/strong>: \u00eemi inventam cum s\u0103 rulez containere, din ce imagini s\u0103 pornesc, f\u0103ceam Makefile-uri care con\u021bineau aliasuri pentru comenzi docker lungi. Nu suportam docker-compose, pentru c\u0103 nu voiam s\u0103 \u00eenv\u0103\u021b \u00eenc\u0103 un instrument din ecosistemul docker. \u0218i <code>docker-compose up<\/code> m\u0103 enerva, mai ales dac\u0103 mai \u00eent\u00e2lneam <code>build<\/code> construc\u021bii, \u0219i nu imagini deja construite. Tot ce voiam cu adev\u0103rat era s\u0103 fac produsul eficient \u0219i rapid. Dar nu puteam deloc s\u0103-mi pun \u00een ordine utilizarea docker-ului.<\/p>\n<p><\/p>\n<h2>\u00cent\u00e2lnirea cu Ansible<\/h2>\n<p><\/p>\n<p>Recent (about three months ago), I worked with a DevOps team, almost every member of which had a negative attitude towards Docker. The reasons were:<\/p>\n<p><\/p>\n<ul>\n<li>Docker modifies iptables (although it can be disabled in daemon.json)<\/li>\n<li>Docker is buggy, and we won't run it in production<\/li>\n<li>if the Docker daemon crashes, all containers with infrastructure crash as well<\/li>\n<li>there is no need for Docker<\/li>\n<li>why use Docker if we have Ansible and virtual machines<\/li>\n<\/ul>\n<p><\/p>\n<p>At the same job, I got acquainted with another tool \u2014 Ansible. I had heard about it before but never tried writing my own playbooks. Now I've started writing my tasks and my perspective changed completely! Because I realized: Ansible has modules for launching the same Docker containers, building images, networks, etc., and containers can be launched not only locally but also on remote servers! My excitement knew no bounds \u2014 I found a PROPER tool and threw away my Makefile and Docker-compose files, which were replaced with YAML tasks. The code was reduced due to constructs like <code>loop<\/code>, <code>when<\/code>, etc.<\/p>\n<p><\/p>\n<h2>Docker for running third-party components like databases<\/h2>\n<p><\/p>\n<p>Recent am aflat despre tunelurile ssh. S-a dovedit c\u0103 e foarte simplu s\u0103 \u201eprobo\u021bi\u201d un port al serverului remote pe un port local. Serverul remote poate fi at\u00e2t o ma\u0219in\u0103 \u00een cloud, c\u00e2t \u0219i o ma\u0219in\u0103 virtual\u0103, rulat\u0103 \u00een VirtualBox. Dac\u0103 eu sau colegul meu avem nevoie de o baz\u0103 de date (sau de alt component extern), putem pur \u0219i simplu s\u0103 pornim serverul cu acest component \u0219i s\u0103-l oprim atunci c\u00e2nd nu mai este necesar. Proboarea porturilor ofer\u0103 acela\u0219i efect ca \u0219i o baz\u0103 de date rulat\u0103 \u00eentr-un container docker.<\/p>\n<p><\/p>\n<p>This command forwards my local port to a remote server with PostgreSQL:<\/p>\n<p><\/p>\n<blockquote><p>ssh -L 9000:localhost:5432 user@example.com<\/p><\/blockquote>\n<p>Using a remote server addresses the problem of teamwork development. Such a server can be used by several developers at once; they don\u2019t need to know how to set up PostgreSQL, deal with Docker, or other intricacies. On the remote server, the same database can be installed inside Docker if a specific version is difficult to get. All that developers will need is SSH access!<\/p>\n<p><\/p>\n<p>I recently read that SSH tunnels are a limited functionality compared to a regular VPN! You can simply set up OpenVPN or other VPN implementations, configure the infrastructure, and make it available to developers. It's so cool!<\/p>\n<p><\/p>\n<p>Din fericire, AWS, GoogleCloud \u0219i altele ofer\u0103 un an de utilizare gratuit\u0103, a\u0219a c\u0103 profita\u021bi de ele! Sunt foarte ieftine dac\u0103 le folosi\u021bi doar atunci c\u00e2nd ave\u021bi nevoie. M-am \u00eentrebat \u00eentotdeauna pentru ce mi-ar trebui un server remote de tip gcloud, pare c\u0103 am g\u0103sit r\u0103spunsul.<\/p>\n<p><\/p>\n<p>Ca ma\u0219in\u0103 virtual\u0103 pe local, pute\u021bi folosi acela\u0219i Alpine care este folosit activ \u00een containerele docker. Sau alte distribu\u021bii u\u0219oare pentru a \u00eenc\u0103rca mai repede ma\u0219ina.<\/p>\n<p><\/p>\n<p>Concluzie: este bine s\u0103 rula\u021bi baze de date \u0219i alte elemente de infrastructur\u0103 pe servere remote sau \u00een virtualbox. Nu am nevoie de docker pentru aceste scopuri.<\/p>\n<p><\/p>\n<h2>Pu\u021bin despre imaginile docker \u0219i distribu\u021bie<\/h2>\n<p><\/p>\n<p>Am mai scris <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/443136\/\">articol<\/a><\/noindex> \u00een care am vrut s\u0103 subliniez c\u0103 utilizarea imaginilor docker nu ofer\u0103 nicio garan\u021bie. Imaginile docker sunt doar pentru a crea un container docker. Dac\u0103 depinzi de o imagine docker, \u00eenseamn\u0103 c\u0103 depinzi de utilizarea containerelor docker, \u0219i vei fi limitat la acestea.<\/p>\n<p><\/p>\n<p>A\u021bi v\u0103zut vreodat\u0103 dezvoltatori de software care \u0219i-au portat produsele doar \u00een imagini docker?<br \/>\nRezultatul majorit\u0103\u021bii produselor este fi\u0219iere binare pentru o anumit\u0103 platform\u0103; acestea sunt ad\u0103ugate pur \u0219i simplu \u00een imaginea docker care mo\u0219tene\u0219te platforma dorit\u0103. Nu v-a\u021bi \u00eentrebat de ce exist\u0103 at\u00e2t de multe imagini asem\u0103n\u0103toare \u00een dockerhub? Introduce\u021bi de exemplu nginx, ve\u021bi vedea 100500 imagini de la diferite persoane. Ace\u0219tia nu au dezvoltat nginx, ci doar au ad\u0103ugat nginx-ul oficial \u00een imaginea lor docker \u0219i l-au condimentat cu configura\u021biile proprii pentru a facilita lansarea containerelor. <\/p>\n<p><\/p>\n<p>\u00cen general, se poate stoca pur \u0219i simplu \u00een tgz; dac\u0103 cineva are nevoie s\u0103 ruleze asta \u00een docker, s\u0103 adauge tgz \u00een Dockerfile, s\u0103 mo\u0219teneasc\u0103 mediul necesar \u0219i s\u0103 creeze solu\u021bii suplimentare care nu schimb\u0103 aplica\u021bia din tgz. Cel care va crea imaginea docker va \u0219ti ce este tgz-ul \u0219i ce are nevoie pentru func\u021bionare. A\u0219a folosesc eu docker. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kondaurovDev\/dockerfile\">aici<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Concluzie: nu am nevoie de un registru docker, voi folosi un serviciu S3 sau un simplu spa\u021biu de stocare de tip google drive\/dropbox.<\/p>\n<p><\/p>\n<h2>Docker \u00een CI<\/h2>\n<p><\/p>\n<p>Toate companiile \u00een care am lucrat sunt similare \u00eentre ele. Ele sunt de obicei companii de produs. Adic\u0103 au o aplica\u021bie specific\u0103, un set de tehnologii (poate dou\u0103-trei limbaje de programare).<\/p>\n<p><\/p>\n<p>Aceste companii folosesc Docker pe serverele lor, unde se desf\u0103\u0219oar\u0103 procesul CI. \u00centrebarea este: de ce este necesar s\u0103 construie\u0219ti proiecte \u00eentr-un container Docker pe serverele tale? De ce s\u0103 nu preg\u0103te\u0219ti pur \u0219i simplu un mediu de compilare, de exemplu s\u0103 scrii un playbook Ansible care s\u0103 instaleze versiunile necesare de Node.js, PHP, JDK, s\u0103 copieze cheile SSH etc. pe serverul unde se va desf\u0103\u0219ura compilarea? <\/p>\n<p><\/p>\n<p>Acum \u00een\u021beleg c\u0103 este ca o auto-sabotare, deoarece Docker nu aduce niciun profit prin izolarea sa. Problemele cu CI \u00een Docker cu care m-am confruntat sunt:<\/p>\n<p><\/p>\n<ul>\n<li>din nou este nevoie de o imagine Docker pentru compilare. Trebuie s\u0103 cau\u021bi o imagine sau s\u0103 scrii propriul t\u0103u Dockerfile.<\/li>\n<li>90% din cazuri va trebui s\u0103 creezi \u0219i s\u0103 folose\u0219ti chei SSH, date sensibile pe care nu vrei s\u0103 le incluzi \u00een imaginea Docker.<\/li>\n<li>containerul se creeaz\u0103 \u0219i moare, toate cache-urile se pierd odat\u0103 cu el. Urm\u0103toarea compilare va desc\u0103rca din nou toate dependen\u021bele proiectului, ceea ce este lent \u0219i ineficient, iar timpul \u00eenseamn\u0103 bani.<\/li>\n<\/ul>\n<p><\/p>\n<p>Dezvoltatorii nu compileaz\u0103 proiecte \u00een containere Docker (am fost c\u00e2ndva un fan, dar acum \u00eemi pare r\u0103u c\u0103 am fost a\u0219a xD). \u00cen Java exist\u0103 posibilitatea de a avea mai multe versiuni \u0219i de a schimba cu o singur\u0103 comand\u0103 la cea de care ai nevoie acum. La fel este \u0219i \u00een Node.js, exist\u0103 nvm.<\/p>\n<p><\/p>\n<h2>Ie\u0219ire<\/h2>\n<p><\/p>\n<p>Consider c\u0103 docker este un instrument foarte puternic \u0219i flexibil, iar acesta este dezavantajul s\u0103u (sun\u0103 ciudat, nu?). Cu ajutorul s\u0103u, companiile se \u201elipesc\u201d u\u0219or de el, folosit unde trebuie \u0219i unde nu. Dezvoltatorii \u00ee\u0219i pornesc containerele lor, un mediu personal, apoi totul se transform\u0103 gradual \u00een CI, produc\u021bie. Echipa DevOps scrie fel de fel de biciclete pentru a rula aceste containere.<\/p>\n<p><\/p>\n<p>Folosi\u021bi Docker doar \u00een <strong>cea mai recent\u0103<\/strong> etap\u0103 a fluxului vostru de lucru, nu-l introduce\u021bi \u00een proiect de la \u00eenceput. Nu va rezolva problemele voastre de afaceri. Va muta doar problemele la UN ALT nivel \u0219i va oferi propriile solu\u021bii, iar voi ve\u021bi face un dublu efort.<\/p>\n<p><\/p>\n<p><strong><em>C\u00e2nd este necesar Docker<\/em><\/strong>: am ajuns la concluzia c\u0103 Docker este foarte bun pentru optimizarea procesului stabilit, dar nu pentru construirea func\u021bionalit\u0103\u021bii de baz\u0103.<\/p>\n<p><\/p>\n<p>Dac\u0103 totu\u0219i a\u021bi decis s\u0103 folosi\u021bi Docker, atunci:<\/p>\n<p><\/p>\n<ul>\n<li>fi\u021bi extrem de pruden\u021bi<\/li>\n<li>nu impune\u021bi utilizarea Docker dezvoltorilor<\/li>\n<li>localiza\u021bi utilizarea lui \u00eentr-un singur loc, nu dispersa\u021bi Dockerfile-ul \u0219i docker-compose-ul \u00een toate repositoarele<\/li>\n<\/ul>\n<p><\/p>\n<p>PS:<\/p>\n<p><\/p>\n<ul>\n<li>Recent, am dat peste <noindex><a rel=\"nofollow\" href=\"https:\/\/www.packer.io\/\">packer<\/a><\/noindex> \u0218i se spune c\u0103 func\u021bioneaz\u0103 foarte bine cu Ansible \u0219i permite unificarea procesului de construire a imaginilor (inclusiv imaginea Docker)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.smashcompany.com\/technology\/docker-is-a-dangerous-gamble-which-we-will-regret\">De asemenea despre Docker, un articol interesant<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Mul\u021bumesc c\u0103 a\u021bi citit p\u00e2n\u0103 la final, v\u0103 doresc solu\u021bii transparente \u00een afacerile voastre \u0219i zile de munc\u0103 productive!<\/p>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/445914\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, scala\/java \u0438 nodejs \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e (\u0443\u0436\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u0430\u0440\u0443 \u2014 \u0442\u0440\u043e\u0439\u043a\u0443 \u043b\u0435\u0442), \u044f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0441\u044f \u043c\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e docker \u044d\u0442\u043e \u043c\u0430\u043d\u043d\u0430 \u043d\u0435\u0431\u0435\u0441\u043d\u0430\u044f \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31641","post","type-post","status-publish","format-standard","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=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend.\" \/>\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\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\" \/>\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\udd47Docker \u2014 \u044d\u0442\u043e \u0438\u0433\u0440\u0443\u0448\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442? \u0418\u043b\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0434\u0430? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\" \/>\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=\"2019-10-31T18:42:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:42:19+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\udd47Docker este o juc\u0103rie sau nu? Sau totu\u0219i da? | ProHoster","description":"Salut tuturor! Mi-ar pl\u0103cea foarte mult s\u0103 intru imediat \u00een subiect, dar ar fi mai bine s\u0103 povestesc pu\u021bin despre istoria mea: Introducere Sunt programator cu experien\u021b\u0103 \u00een dezvoltarea frontend.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","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\udd47Docker \u2014 \u044d\u0442\u043e \u0438\u0433\u0440\u0443\u0448\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442? \u0418\u043b\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0434\u0430? | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","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":"2019-10-31T18:42:19+00:00","article:modified_time":"2019-10-31T18:42:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31641","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":"2026-01-21 07:08:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:13:28","updated":"2026-01-21 07:08:22","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\/31641","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=31641"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/31641\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=31641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=31641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=31641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}