{"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\/sk\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","title":{"rendered":"Je Docker hra\u010dka alebo nie? Alebo predsa len \u00e1no?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ahojte v\u0161etci!<\/p>\n<p><\/p>\n<p>Ve\u013emi sa te\u0161\u00edm, \u017ee m\u00f4\u017eem okam\u017eite prejs\u0165 na t\u00e9mu, ale bude spr\u00e1vnej\u0161ie trochu rozpr\u00e1va\u0165 o mojej hist\u00f3rii:<\/p>\n<p><\/p>\n<h2>\u00davod<\/h2>\n<p><\/p>\n<p>Som program\u00e1tor s sk\u00fasenos\u0165ami v oblasti frontendu jednop\u00e1ginaov\u00fdch aplik\u00e1ci\u00ed, Scala\/Java a Node.js na serveri. <\/p>\n<p><\/p>\n<p>Dlh\u00fa dobu (u\u017e ur\u010dite p\u00e1r \u2013 tri roky) som si myslel, \u017ee Docker je bo\u017esk\u00fd dar a ve\u013emi skvel\u00fd n\u00e1stroj, s ktor\u00fdm by mal vedie\u0165 pracova\u0165 ka\u017ed\u00fd v\u00fdvoj\u00e1r. A z toho vypl\u00fdva, \u017ee by mal ma\u0165 ka\u017ed\u00fd v\u00fdvoj\u00e1r Docker nain\u0161talovan\u00fd na svojom lok\u00e1lnom po\u010d\u00edta\u010di. \u010co sa t\u00fdka m\u00f4jho n\u00e1zoru, prelistujte si ponuky pr\u00e1ce, ktor\u00e9 s\u00fa zverejnen\u00e9 na tom istom hh. V ka\u017edej druhej je zmienka o Dockeri a ak s n\u00edm ovl\u00e1date \u2013 to bude va\u0161a konkuren\u010dn\u00e1 v\u00fdhoda \ud83d\ude09<\/p>\n<p><\/p>\n<p>Na svojej ceste som sa stretol s mnoh\u00fdmi \u013eu\u010fmi a s ich r\u00f4znymi postojmi k Dockeru a jeho ekosyst\u00e9mu. Niektor\u00ed hovorili, \u017ee je to praktick\u00e1 vec, zaru\u010duj\u00faca multiplatformnos\u0165. In\u00ed nech\u00e1pali, pre\u010do by mali sp\u00fa\u0161\u0165a\u0165 aplik\u00e1cie v kontejnere a ak\u00fd z toho m\u00f4\u017eu ma\u0165 zisk, in\u00ed to brali \u00faplne na \u013eahk\u00fa v\u00e1hu a nerobili si s t\u00fdm starosti (jednoducho p\u00edsali k\u00f3d a odch\u00e1dzali domov \u2013 mimochodom, z\u00e1vid\u00edm im \ud83d\ude42)<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>D\u00f4vody pou\u017e\u00edvania<\/h2>\n<p><\/p>\n<p>Pre\u010do som pou\u017e\u00edval Docker? Sn\u00e1\u010f z nasleduj\u00facich d\u00f4vodov:<\/p>\n<p><\/p>\n<ul>\n<li>sp\u00fa\u0161\u0165anie datab\u00e1z, 99% aplik\u00e1ci\u00ed ich vyu\u017e\u00edva<\/li>\n<li>sp\u00fa\u0161\u0165anie Nginx na distrib\u00faciu frontendu a proxy na backend<\/li>\n<li>m\u00f4\u017eem zabali\u0165 aplik\u00e1ciu do Docker obrazu, t\u00fdmto sp\u00f4sobom moja aplik\u00e1cia funguje v\u0161ade, kde je Docker, probl\u00e9m distrib\u00facie je vyrie\u0161en\u00fd hne\u010f<\/li>\n<li>service discovery priamo z krabice, m\u00f4\u017eem robi\u0165 mikroservisy, ka\u017ed\u00fd kontajner (pripojen\u00fd k spolo\u010dnej sieti) sa \u013eahko dostane k in\u00e9mu cez alias, ve\u013emi pohodln\u00e9<\/li>\n<li>Je zauj\u00edmav\u00e9 vytvori\u0165 kontajner a &#171;zahra\u0165 si&#187; s n\u00edm.<\/li>\n<\/ul>\n<p><\/p>\n<h2>\u010co sa mi nikdy nep\u00e1\u010dilo na Dockeri:<\/h2>\n<p><\/p>\n<ul>\n<li>aby moja aplik\u00e1cia fungovala, potrebujem ma\u0165 Docker na serveri. Ale pre\u010do by som to mal potrebova\u0165, ke\u010f moje aplik\u00e1cie funguj\u00fa na JRE alebo na Node.js a prostredie pre ne u\u017e na serveri existuje?<\/li>\n<li>ak chcem spusti\u0165 svoj (priv\u00e1tny) lok\u00e1lne zostaven\u00fd obraz na vzdialenom serveri, potrebujem si vytvori\u0165 svoj Docker repozit\u00e1r, potrebujem, aby niekde fungoval registry a e\u0161te potrebujem nastavi\u0165 HTTPS, preto\u017ee Docker CLI pracuje iba cez HTTPS. Ach, do riti... s\u00fa mo\u017enosti, samozrejme, ulo\u017ei\u0165 obraz lok\u00e1lne cez <code>docker save<\/code> A cez scp jednoducho prenies\u0165 obraz... Ale to si vy\u017eaduje to\u013eko krokov. A navy\u0161e to vyzer\u00e1 &#171;ako ob\u00eddenie&#187; probl\u00e9mu, k\u00fdm sa neobjav\u00ed vlastn\u00fd repozit\u00e1r.<\/li>\n<li><code>docker-compose<\/code>Je potrebn\u00fd len na sp\u00fa\u0161\u0165anie kontajnerov. A to je v\u0161etko. Ni\u010d in\u00e9 nedok\u00e1\u017ee. <code>Docker-compose<\/code> m\u00e1 mno\u017estvo verzi\u00ed svojich s\u00faborov, svoj syntax. Ak\u00fdko\u013evek deklarat\u00edvny bol, nechcem \u010d\u00edta\u0165 ich dokument\u00e1ciu. U\u017e ju nepotrebujem nikde inde.<\/li>\n<li>pri pr\u00e1ci v t\u00edme v\u00e4\u010d\u0161ina \u013eud\u00ed p\u00ed\u0161e Dockerfile ve\u013emi zle, nerozumej\u00fa, ako sa to cache-uje, prid\u00e1vaj\u00fa do obrazu v\u0161etko potrebn\u00e9 a nepotrebn\u00e9, dedi\u010dia od obrazov, ktor\u00e9 nie s\u00fa na dockerhub alebo v s\u00fakromnom repozit\u00e1ri, vytv\u00e1raj\u00fa nejak\u00e9 <code>docker-compose<\/code> S\u00fabory s datab\u00e1zami a ni\u010d sa neperzist\u00ed. Pri tom v\u00fdvoj\u00e1ri hrdlohlasne tvrdia, \u017ee docker je super, v\u0161etko im funguje lok\u00e1lne a HR d\u00f4le\u017eito p\u00ed\u0161e v inzer\u00e1toch: &#171;Pou\u017e\u00edvame docker a potrebujeme kandid\u00e1ta s takouto sk\u00fasenos\u0165ou&#187;.<\/li>\n<li>neust\u00e1le sa im v hlave honia my\u0161lienky o sp\u00fa\u0161\u0165an\u00ed v dockeri v\u0161etk\u00e9ho a ka\u017ed\u00e9ho: postgresql, kafka, redis. Je smutn\u00e9, \u017ee nie v\u0161etko funguje v kontajneroch, nie v\u0161etko sa d\u00e1 \u013eahko nakonfigurova\u0165 a spusti\u0165. Podporuj\u00fa to tret\u00ed dod\u00e1vatelia, a nie samotn\u00ed predajcovia. A samozrejme, okam\u017eite vyvst\u00e1va ot\u00e1zka, pre\u010do sa dod\u00e1vatelia nezauj\u00edmaj\u00fa o udr\u017eiavanie svojich produktov v dockeri, \u010do ak vedia nie\u010do, \u010do my nie?<\/li>\n<li>v\u017edy vyvst\u00e1va ot\u00e1zka o perzistencii \u00fadajov kontajnera. A tu si hovor\u00ed\u0161, m\u00e1m jednoducho pripoji\u0165 adres\u00e1r hostite\u013ea alebo vytvori\u0165 docker volume alebo vytvori\u0165 data container, ktor\u00fd teraz <code>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>volume<\/code> tak \u00fadaje bud\u00fa jednoducho vytvoren\u00e9 niekde <code>\/usr\/*<\/code> A bude to rovnak\u00fd pr\u00edbeh s uid a gid ako v prvom pr\u00edpade. Ak sp\u00fa\u0161\u0165a\u0161 extern\u00fa zlo\u017eku, mus\u00ed\u0161 si pre\u010d\u00edta\u0165 dokument\u00e1ciu a h\u013eada\u0165 odpove\u010f na ot\u00e1zku: &#171;Do ak\u00fdch adres\u00e1rov kontajner nap\u00ed\u0161e s\u00fabory?&#187;<\/li>\n<\/ul>\n<p>V\u017edy sa mi nep\u00e1\u010dilo, \u017ee mus\u00edm s dockerom tr\u00e1vi\u0165 pr\u00edli\u0161 ve\u013ea \u010dasu <strong>v po\u010diato\u010dnej f\u00e1ze<\/strong>: vym\u00fd\u0161\u013eal som, ako sp\u00fa\u0161\u0165a\u0165 kontajnery, z ktor\u00fdch obrazov sp\u00fa\u0161\u0165a\u0165, robil som Makefile, ktor\u00e9 obsahovali aliasy k dlh\u00fdm docker pr\u00edkazom. Nere\u0161pektoval som docker-compose, preto\u017ee som nechcel u\u010di\u0165 \u010fal\u0161\u00ed n\u00e1stroj ekosyst\u00e9mu dockera. A <code>docker-compose up<\/code> som mal obavy, najm\u00e4 ak sa tam objavili <code>build<\/code> kon\u0161trukcie a nie u\u017e postaven\u00e9 obrazy. V\u0161etko, \u010do som naozaj chcel \u2014 bolo jednoducho efekt\u00edvne a r\u00fdchlo robi\u0165 produkt. Ale v\u00f4bec som nemohol da\u0165 dokopy vyu\u017eitie dockera.<\/p>\n<p><\/p>\n<h2>Zozn\u00e1menie s Ansible<\/h2>\n<p><\/p>\n<p>Ned\u00e1vno (pred tromi mesiacmi) som pracoval s DevOps t\u00edmom, takmer ka\u017ed\u00fd \u010dlen ktor\u00e9ho sa negat\u00edvne postavil k dockeru. Z d\u00f4vodov:<\/p>\n<p><\/p>\n<ul>\n<li>Docker riadi iptables (aj ke\u010f to mo\u017eno vypn\u00fa\u0165 v daemon.json)<\/li>\n<li>Docker nie je potrebn\u00fd a v produkcii ho sp\u00fa\u0161\u0165a\u0165 nebudeme<\/li>\n<li>Ak Docker daemon spadne, tak samozrejme spadn\u00fa v\u0161etky kontajnery s infra\u0161trukt\u00farou<\/li>\n<li>V Dockeri nie je potrebn\u00e9<\/li>\n<li>Na\u010do Docker, ke\u010f s\u00fa tu Ansible a virtu\u00e1lne stroje?<\/li>\n<\/ul>\n<p><\/p>\n<p>Na tej istej pr\u00e1ci som sa osobne zozn\u00e1mil s \u010fal\u0161\u00edm n\u00e1strojom \u2014 Ansible. Kdesi som o \u0148om po\u010dul, ale nepok\u00fa\u0161al som sa p\u00edsa\u0165 svoje playbooky. A teraz som za\u010dal p\u00edsa\u0165 svoje \u00falohy a tu sa moje videnie \u00faplne zmenilo! Preto\u017ee som pochopil: Ansible m\u00e1 moduly na sp\u00fa\u0161\u0165anie t\u00fdch ist\u00fdch Docker kontajnerov, skladanie obrazov, siet\u00ed a pod., pri\u010dom kontajnery je mo\u017en\u00e9 spusti\u0165 nielen lok\u00e1lne, ale aj na vzdialen\u00fdch serveroch! M\u00f4j nad\u0161enie nemalo hranice \u2014 na\u0161iel som NORM\u00c1LNY n\u00e1stroj a zahodil svoje Makefile a Docker Compose s\u00fabory, boli nahraden\u00e9 yaml \u00falohami. K\u00f3d bol zredukovan\u00fd v\u010faka pou\u017e\u00edvaniu kon\u0161trukci\u00ed ako <code>loop<\/code>, <code>when<\/code>, at\u010f.<\/p>\n<p><\/p>\n<h2>Docker na sp\u00fa\u0161\u0165anie extern\u00fdch komponentov ako datab\u00e1zy<\/h2>\n<p><\/p>\n<p>Ned\u00e1vno som sa zozn\u00e1mil so ssh tunelmi. Zistil som, \u017ee je ve\u013emi jednoduch\u00e9 &#171;prenies\u0165&#187; port vzdialen\u00e9ho servera na lok\u00e1lny port. Vzdialen\u00fd server m\u00f4\u017ee by\u0165 ako stroj v cloude, tak aj virtu\u00e1lny stroj spusten\u00fd vo VirtualBoxe. Ak ja alebo m\u00f4j kolega potrebujeme datab\u00e1zu (alebo ak\u00fako\u013evek in\u00fa extern\u00fa zlo\u017eku), m\u00f4\u017eeme jednoducho spusti\u0165 server s tou zlo\u017ekou a vypn\u00fa\u0165 ho, ke\u010f server nie je potrebn\u00fd. Pr\u00edstup portov poskytuje rovnak\u00fd efekt, ako by bola datab\u00e1za spusten\u00e1 v docker kontajneri.<\/p>\n<p><\/p>\n<p>Tento pr\u00edkaz pren\u00e1\u0161a m\u00f4j lok\u00e1lny port na vzdialen\u00fd server s PostgreSQL:<\/p>\n<p><\/p>\n<blockquote><p>ssh -L 9000:localhost:5432 user@example.com<\/p><\/blockquote>\n<p>Pou\u017e\u00edvanie vzdialen\u00e9ho servera rie\u0161i probl\u00e9m s v\u00fdvojom v t\u00edme. Tak\u00fd server m\u00f4\u017eu pou\u017e\u00edva\u0165 naraz viacer\u00ed v\u00fdvoj\u00e1ri, nemusia vedie\u0165 nastavi\u0165 PostgreSQL, rozumie\u0165 Dockeru a podobn\u00fdm zlo\u017eitostiam. Na vzdialenom serveri je mo\u017en\u00e9 nain\u0161talova\u0165 t\u00fa ist\u00fa datab\u00e1zu priamo v Dockeri, ak je \u0165a\u017ek\u00e9 nain\u0161talova\u0165 \u0161pecifick\u00fa verziu. V\u0161etko, \u010do v\u00fdvoj\u00e1ri potrebuj\u00fa \u2014 je poskytn\u00fa\u0165 SSH pr\u00edstup!<\/p>\n<p><\/p>\n<p>Ned\u00e1vno som \u010d\u00edtal, \u017ee SSH tunely maj\u00fa obmedzen\u00fa funk\u010dnos\u0165 be\u017en\u00e9ho VPN! M\u00f4\u017eete jednoducho nastavi\u0165 OpenVPN alebo in\u00e9 realiz\u00e1cie VPN, nastavi\u0165 infra\u0161trukt\u00faru a spr\u00edstupni\u0165 ju v\u00fdvoj\u00e1rom. Je to predsa skvel\u00e9!<\/p>\n<p><\/p>\n<p>Na\u0161\u0165astie, AWS, GoogleCloud a in\u00ed pon\u00fakaj\u00fa rok bezplatn\u00e9ho pou\u017e\u00edvania, tak\u017ee ich vyu\u017eite! S\u00fa lacn\u00e9, ak ich vypnete, ke\u010f ich nepou\u017e\u00edvate. V\u017edy som sa zam\u00fd\u0161\u013eal, na \u010do by som potreboval vzdialen\u00fd server typu gcloud, zd\u00e1 sa, \u017ee som ich na\u0161iel.<\/p>\n<p><\/p>\n<p>Ako virtu\u00e1lny stroj v lok\u00e1lnej sieti m\u00f4\u017eete pou\u017ei\u0165 ten ist\u00fd Alpine, ktor\u00fd sa akt\u00edvne pou\u017e\u00edva v docker kontajneroch. Alebo m\u00f4\u017eete zvoli\u0165 in\u00e9 zjednodu\u0161en\u00e9 distrib\u00facie, aby sa stroj sp\u00fa\u0161\u0165al r\u00fdchlej\u0161ie.<\/p>\n<p><\/p>\n<p>Z\u00e1ver: sp\u00fa\u0161\u0165anie datab\u00e1z a \u010fal\u0161\u00edch infra\u0161trukt\u00farnych z\u00e1le\u017eitost\u00ed je mo\u017en\u00e9 a potrebn\u00e9 na vzdialen\u00fdch serveroch alebo vo virtualboxe. Docker na tieto \u00fa\u010dely nepotrebujem.<\/p>\n<p><\/p>\n<h2>Trochu o docker obrazoch a distrib\u00facii<\/h2>\n<p><\/p>\n<p>U\u017e som p\u00edsal <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/443136\/\">\u010dl\u00e1nok<\/a><\/noindex> v ktorom som chcel nazna\u010di\u0165, \u017ee pou\u017e\u00edvanie docker obrazov neposkytuje \u017eiadnu z\u00e1ruku. Docker obrazy s\u00fa potrebn\u00e9 len na vytvorenie docker kontajnera. Ak sa zameriavate na docker obraz, znamen\u00e1 to, \u017ee sa zameriavate na pou\u017e\u00edvanie docker kontajnerov a s nimi budete len pracova\u0165.<\/p>\n<p><\/p>\n<p>Videli ste niekde, aby v\u00fdvoj\u00e1ri softv\u00e9ru portovali svoje produkty len v docker obraze?<br \/>\nV\u00fdsledkom v\u00e4\u010d\u0161iny produktov s\u00fa bin\u00e1rne s\u00fabory pre ur\u010dit\u00fa platformu, presne tie sa jednoducho prid\u00e1vaj\u00fa do docker obrazu, ktor\u00fd vych\u00e1dza z po\u017eadovanej platformy. Neuva\u017eovali ste, pre\u010do je v dockerhub to\u013eko podobn\u00fdch obrazov? Zadajte napr\u00edklad nginx, uvid\u00edte 100500 obrazov od r\u00f4znych \u013eud\u00ed. T\u00edto \u013eudia sami nenavrhovali nginx, oni len pridali ofici\u00e1lny nginx do svojho docker obrazu a ochutili to svojimi konfigur\u00e1ciami pre pohodlnej\u0161ie sp\u00fa\u0161\u0165anie kontajnerov. <\/p>\n<p><\/p>\n<p>Celkovo m\u00f4\u017eete ulo\u017ei\u0165 jednoducho v tgz, ak by niekto chcel sp\u00fa\u0161\u0165a\u0165 toto v dockeri, tak nech v Dockerfile pridaj\u00fa tgz, ded\u00ed od po\u017eadovan\u00e9ho prostredia a vytv\u00e1raj\u00fa \u010fal\u0161ie funkcie, ktor\u00e9 nemenia samotn\u00fa aplik\u00e1ciu v tgz. Ten, kto bude vytv\u00e1ra\u0165 docker obraz, bude vedie\u0165, \u010do to tgz je a \u010do na pr\u00e1cu potrebuje. Presne tak pou\u017e\u00edvam docker. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kondaurovDev\/dockerfile\">tu<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Z\u00e1ver: nepotrebujem docker registry, vyu\u017eijem nejak\u00e9 S3 alebo jednoducho \u00falo\u017eisko s\u00faborov ako google drive\/dropbox.<\/p>\n<p><\/p>\n<h2>Docker v CI<\/h2>\n<p><\/p>\n<p>V\u0161etky spolo\u010dnosti, v ktor\u00fdch som pracoval, s\u00fa si podobn\u00e9. Zvy\u010dajne ide o produktov\u00e9 spolo\u010dnosti. To znamen\u00e1, \u017ee maj\u00fa nejak\u00fa jednu aplik\u00e1ciu, jeden technologick\u00fd stack (mo\u017eno p\u00e1r jazykov programovania).<\/p>\n<p><\/p>\n<p>Tieto spolo\u010dnosti pou\u017e\u00edvaj\u00fa docker na svojich serveroch, kde sa sp\u00fa\u0161\u0165a CI proces. Ot\u00e1zka znie \u2014 pre\u010do je potrebn\u00e9 zostavova\u0165 projekty v docker kontejne neu na svojich serveroch? Pre\u010do jednoducho nepripravi\u0165 prostredie na zostavenie, napr\u00edklad nap\u00edsa\u0165 Ansible playbook, ktor\u00fd nain\u0161taluje potrebn\u00e9 verzie nodejs, php, jdk, skop\u00edruje ssh k\u013e\u00fa\u010de a \u010fal\u0161ie na server, na ktorom prebehne zostavenie? <\/p>\n<p><\/p>\n<p>Teraz ch\u00e1pem, \u017ee je to samovra\u017eda, preto\u017ee docker neprin\u00e1\u0161a \u017eiadny zisk so svojou izol\u00e1ciou. Probl\u00e9my s CI v dockeri, s ktor\u00fdmi som sa stretol:<\/p>\n<p><\/p>\n<ul>\n<li>op\u00e4\u0165 potrebuj\u00fa docker obraz na zostavenie. Je potrebn\u00e9 h\u013eada\u0165 obraz alebo nap\u00edsa\u0165 vlastn\u00fd dockerfile.<\/li>\n<li>90% pravdepodobnos\u0165, \u017ee je potrebn\u00e9 prenies\u0165 nejak\u00e9 ssh k\u013e\u00fa\u010de, tajn\u00e9 \u00fadaje, ktor\u00e9 nechcete p\u00edsa\u0165 do docker obrazu.<\/li>\n<li>kontejner sa vytv\u00e1ra a zomiera, v\u0161etky ke\u0161ovanie sa s n\u00edm str\u00e1ca. \u010eal\u0161ie zostavenie bude musie\u0165 znovu stiahnu\u0165 v\u0161etky z\u00e1vislosti projektu, \u010do je \u010dasovo n\u00e1ro\u010dn\u00e9 a neefekt\u00edvne, a \u010das s\u00fa peniaze.<\/li>\n<\/ul>\n<p><\/p>\n<p>V\u00fdvoj\u00e1ri nezostavuj\u00fa projekty v docker kontejnere (kedysi som bol tak\u00fdm nad\u0161encom, je mi \u013e\u00fato seba v minulosti xD). V jave existuje mo\u017enos\u0165 ma\u0165 viacero verzi\u00ed a zmeni\u0165 ju jedn\u00fdm pr\u00edkazom na t\u00fa, ktor\u00fa teraz potrebujete. V nodejs je to rovnak\u00e9, existuje nvm.<\/p>\n<p><\/p>\n<h2>Z\u00e1ver<\/h2>\n<p><\/p>\n<p>Pova\u017eujem docker za ve\u013emi mocn\u00fd a flexibiln\u00fd n\u00e1stroj, \u010do je z\u00e1rove\u0148 jeho nev\u00fdhoda (znie to zvl\u00e1\u0161tne, \u017ee?). S jeho pomocou sa firmy \u013eahko &#171;prichyt\u00e1vaj\u00fa&#187; na neho, pou\u017e\u00edvaj\u00fa ho, kde treba a kde netreba. V\u00fdvoj\u00e1ri sp\u00fa\u0161\u0165aj\u00fa svoje kontajnery, svoje prostredie, potom sa to v\u0161etko plynule pren\u00e1\u0161a do CI a do produkcie. T\u00edm DevOps p\u00ed\u0161e nejak\u00e9 bicykle, aby spustil tieto kontajnery.<\/p>\n<p><\/p>\n<p>Pou\u017e\u00edvajte docker len na <strong>najnov\u0161om<\/strong> st\u00e1diu vo va\u0161om pracovnom procese, ned\u00e1vajte ho do projektu na za\u010diatku. Nevyrie\u0161i va\u0161e obchodn\u00e9 probl\u00e9my. Iba presunie probl\u00e9my na IN\u00da \u00farove\u0148 a bude pon\u00faka\u0165 svoje mo\u017enosti rie\u0161enia, budete robi\u0165 dvojn\u00e1sobn\u00fa pr\u00e1cu.<\/p>\n<p><\/p>\n<p><strong><em>Ke\u010f je docker potrebn\u00fd<\/em><\/strong>: dospel som k n\u00e1zoru, \u017ee docker je ve\u013emi dobr\u00fd v optimaliz\u00e1cii nastaven\u00e9ho procesu, ale nie v budovan\u00ed z\u00e1kladnej funkcionality.<\/p>\n<p><\/p>\n<p>Ak sa predsa len rozhodnete pou\u017ei\u0165 docker, tak:<\/p>\n<p><\/p>\n<ul>\n<li>bu\u010fte mimoriadne opatrn\u00ed<\/li>\n<li>nevnucujte pou\u017e\u00edvanie dockera v\u00fdvoj\u00e1rom<\/li>\n<li>lokalizujte jeho pou\u017eitie na jednom mieste, neroz\u0161irujte ho po v\u0161etk\u00fdch \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044fch Dockefile a docker-compose<\/li>\n<\/ul>\n<p><\/p>\n<p>PS:<\/p>\n<p><\/p>\n<ul>\n<li>Ned\u00e1vno som narazil na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.packer.io\/\">packer<\/a><\/noindex> a hovor\u00ed, \u017ee ve\u013emi dobre pracuje s Ansible a umo\u017e\u0148uje zjednoti\u0165 proces vytv\u00e1rania obrazov (vr\u00e1tane docker image)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.smashcompany.com\/technology\/docker-is-a-dangerous-gamble-which-we-will-regret\">tie\u017e o dockeri, zauj\u00edmav\u00fd \u010dl\u00e1nok<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>\u010eakujem, \u017ee ste do\u010d\u00edtali, prajem v\u00e1m prieh\u013eadn\u00e9 rie\u0161enia vo va\u0161ich z\u00e1le\u017eitostiach a produkt\u00edvne pracovn\u00e9 dni!<\/p>\n<p>Zdroj: <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.4 - 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\/sk\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\/sk\/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 \u2014 je to hra\u010dka alebo nie? Alebo predsa len \u00e1no? | ProHoster","description":"Ahojte v\u0161etci! Ove\u013ea viac by som chcel okam\u017eite prejs\u0165 k t\u00e9me, ale bude rozumnej\u0161ie trochu poveda\u0165 o mojej hist\u00f3rii: \u00davod Som program\u00e1tor s sk\u00fasenos\u0165ou v oblasti frontendov\u00e9ho v\u00fdvoja.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/31641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=31641"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/31641\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=31641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=31641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=31641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}