{"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\/et\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","title":{"rendered":"Kas Docker on m\u00e4nguasi v\u00f5i midagi t\u00f5sist?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere k\u00f5igile!<\/p>\n<p><\/p>\n<p>Tahan kohe teemaga alustada, aga parem on r\u00e4\u00e4kida veidi oma lugu:<\/p>\n<p><\/p>\n<h2>Sissejuhatus<\/h2>\n<p><\/p>\n<p>Olen arendaja, kellel on kogemusi frontend \u00fchekordsete rakenduste, Scala\/Java ja Node.js serveriarendusega. <\/p>\n<p><\/p>\n<p>Pikka aega (ilmselt juba paar-kolm aastat) arvasin, et Docker on t\u00f5eline kingitus ja v\u00e4ga \u00e4ge t\u00f6\u00f6riist, millega iga arendaja peaks oskama t\u00f6\u00f6tada. Seega j\u00e4reldub, et iga\u00fchel peaks olema Docker oma kohalikus arvutis. Mida enam r\u00e4\u00e4kida minu arvamusest, vaadake lihtsalt t\u00f6\u00f6pakkumisi, mis on \u00fcles pandud samaaegselt (hh). Igas teises on mainitud Dockerit ja kui te oskate seda kasutada \u2014 see annab teile konkurentsieelise \ud83d\ude09<\/p>\n<p><\/p>\n<p>Olen kohtunud paljude inimestega, kelle suhtumine Dockerisse ja selle \u00f6kos\u00fcsteemi on erinev. \u00dched \u00fctlevad, et see on mugav asi, mis tagab ristplatvormi. Teised ei m\u00f5ista, miks peaks nad konteinerites t\u00f6\u00f6tama ja milline on sellest kasu, kolmandatele on see t\u00e4ielikult \u00fcksk\u00f5ik ja nad ei muretse (lihtsalt kirjutavad koodi ja l\u00e4hevad koju \u2014 kardan neid isegi \ud83d\ude42)<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Kasutamise p\u00f5hjused<\/h2>\n<p><\/p>\n<p>Miks ma dockerit kasutasin? Ilmselt j\u00e4rgmistel p\u00f5hjustel:<\/p>\n<p><\/p>\n<ul>\n<li>andmebaasi k\u00e4ivitamiseks, 99% rakendustest kasutavad neid<\/li>\n<li>nginx'i k\u00e4ivitamine frontendi jagamiseks ja backend'i proksimiseks<\/li>\n<li>rakenduse saab pakkida docker'i pildiks, nii et minu rakendus t\u00f6\u00f6tab igal pool, kus on docker, ja levitamise probleem on kohe lahendatud<\/li>\n<li>teenuse leidmine on sisseehitatud, saab teha mikroteenuseid, iga konteiner (\u00fchendatud \u00fchise v\u00f5rku) saab teise juurde ligi alias'ega, v\u00e4ga mugav<\/li>\n<li>\u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0438 &#171;\u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f&#187; \u0432 \u043d\u0435\u043c.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Mida ma dockeris alati EI meeldinud:<\/h2>\n<p><\/p>\n<ul>\n<li>et minu rakenduse t\u00f6\u00f6tamiseks on serveris vaja dockerit. Aga miks mulle see vajalik on, kui mu rakendused t\u00f6\u00f6tavad jre v\u00f5i nodejs peal ja need keskkonnad on serveris juba olemas?<\/li>\n<li>kui ma tahan k\u00e4ivitada oma (privaatset) kohapeal koostatud pilti kaugarvutis, siis mul on vaja oma docker'i registrit, registry peab kuskil t\u00f6\u00f6tama ja veel tuleb seada https, sest docker cli t\u00f6\u00f6tab ainult https-i peal. Oh jama\u2026 muidugi on variandid, kuidas pilti kohalikult salvestada l\u00e4bi <code>docker save<\/code> \u0438 \u0447\u0435\u0440\u0435\u0437 scp \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0438\u043d\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u2026 \u041d\u043e \u044d\u0442\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439. \u0418 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 &#171;\u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u044b\u043c&#187; \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/li>\n<li><code>docker-compose<\/code>See on vajalik ainult konteinerite k\u00e4ivitamiseks. Ja k\u00f5ik. Rohkem ta midagi ei oska. <code>Docker-compose<\/code> omab palju versioone oma faile, oma s\u00fcntaksit. \u00dcksk\u00f5ik kui deklareeriv ta olema on, ei taha ma nende dokumentatsiooni lugeda. See ei tule mulle enam kuskil kasuks.<\/li>\n<li>meeskonnas t\u00f6\u00f6tades kirjutavad enamik inimesi Dockerfile v\u00e4ga kehvasti, ei m\u00f5ista, kuidas see vahem\u00e4lus t\u00f6\u00f6tab, lisavad piltidesse k\u00f5ik, mis on vajalik ja mis mitte, p\u00e4rivad piltidelt, mida pole dockerhubis v\u00f5i privaatsetes hoidlates, loovad mingisuguseid <code>docker-compose<\/code> \u0444\u0430\u0439\u043b\u044b \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0438\u0440\u0443\u044e\u0442. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0433\u043e\u0440\u0434\u043e \u0437\u0430\u044f\u0432\u043b\u044f\u044e\u0442, \u0447\u0442\u043e docker \u043a\u0440\u0443\u0442, \u0443 \u043d\u0438\u0445 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0438 HR \u0432\u0430\u0436\u043d\u043e \u043f\u0438\u0448\u0435\u0442 \u0432 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438: &#171;\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c docker \u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u0441 \u0442\u0430\u043a\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b&#187;<\/li>\n<li>siiski kummitavad m\u00f5tted dockerisse k\u00f5iki asju ja k\u00f5ike t\u00f5sta: postgresql, kafka, redis. Kahju, et k\u00f5ik ei t\u00f6\u00f6ta konteinerites, mitte k\u00f5ik pole lihtsad konfigureerida ja k\u00e4ivitada. Seda toetavad kolmandad osalised, mitte tootjad ise. Ja muide, tekib kohe k\u00fcsimus, kui tootjad ei muretse oma toodete toetamise p\u00e4rast dockeris, siis miks need seda ei tee? Kas nad teavad midagi, mida meie ei tea?<\/li>\n<li>kordub k\u00fcsimus konteineri andmete p\u00fcsivusest. Ja siin m\u00f5tled, kas mountida hosti kataloog v\u00f5i luua docker volume v\u00f5i teha data container, mis n\u00fc\u00fcd <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> siis j\u00e4\u00e4vad andmed lihtsalt m\u00f5nesse <code>\/usr\/*<\/code> \u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0441 uid \u0438 gid \u043a\u0430\u043a \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0448\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441: &#171;\u0430 \u0432 \u043a\u0430\u043a\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u0438\u0448\u0435\u0442 \u0444\u0430\u0439\u043b\u044b?&#187;<\/li>\n<\/ul>\n<p>Mulle pole kunagi meeldinud, et dockeriga tuleb liiga kaua tegeleda <strong>alguses<\/strong>: ma m\u00f5tlesin, kuidas konteinerid k\u00e4ivitada, millistelt piltidelt k\u00e4ivitada, tegin Makefile, mis sisaldas l\u00fchendiid pikaid docker k\u00e4ske. Ma ei suutnud kannatada docker-compose, kuna ma ei tahtnud \u00f5ppida veel \u00fchte t\u00f6\u00f6riista docker \u00f6kos\u00fcsteemis. Ja <code>docker-compose up<\/code> m\u00f5i mind, eriti kui seal olid veel <code>build<\/code> konstruktsioonid, mitte juba kokku pandud pildid. K\u00f5ik, mida ma tegelikult tahtsin, oli lihtsalt toote efektiivne ja kiire loomine. Kuid ma ei suutnud kuidagi dockerit lahti seletada.<\/p>\n<p><\/p>\n<h2>Tutvumine Ansible'iga<\/h2>\n<p><\/p>\n<p>Hiljuti (kolme kuu eest) t\u00f6\u00f6tasin DevOps meeskonnas, mille iga liige suhtus dockerisse negatiivselt. P\u00f5hjused:<\/p>\n<p><\/p>\n<ul>\n<li>docker haldab iptables'i (kuigi seda saab daemon.json-is v\u00e4lja l\u00fclitada)<\/li>\n<li>docker on ebastabiilne ja me ei hakka seda tootmises k\u00e4ivitama<\/li>\n<li>kui docker daemon kukub, siis langevad k\u00f5ik konteinerid koos infrastruktuuriga<\/li>\n<li>dockerit pole vaja<\/li>\n<li>miks docker, kui on Ansible ja virtuaalsed masinad<\/li>\n<\/ul>\n<p><\/p>\n<p>Samas t\u00f6\u00f6s kohtusin ma veel \u00fche t\u00f6\u00f6riistaga \u2014 Ansible'iga. Olen sellest varem kuulnud, kuid ei olnud proovinud kirjutada oma m\u00e4ngukavasid. N\u00fc\u00fcd olen hakanud kirjutama oma \u00fclesandeid ja minu n\u00e4gemus on muutunud! Sest ma sain aru: Ansible'il on moodulid, mis v\u00f5imaldavad k\u00e4ivitada samu docker konteinerite, piltide, v\u00f5rkude jne. Samuti saab konteinerid k\u00e4ivitada mitte ainult kohapeal, vaid ka eemal olevatel serveritel! Minu elevus oli piiritu \u2014 ma leidsin NORMAALSE t\u00f6\u00f6riista ja viskasin oma Makefile'i ja docker-compose failid \u00e4ra, need asendati yaml \u00fclesannetega. Kood on v\u00e4henenud konstruktsioonide kasutamise t\u00f5ttu, nagu <code>loop<\/code>, <code>when<\/code>, jne.<\/p>\n<p><\/p>\n<h2>Docker kolmandate osade komponentide, nagu andmebaasi, k\u00e4ivitamiseks<\/h2>\n<p><\/p>\n<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441 ssh \u0442\u0443\u043d\u0435\u043b\u044f\u043c\u0438. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e &#171;\u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u0442\u044c&#187; \u043f\u043e\u0440\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442. \u0423\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043c\u0430\u0448\u0438\u043d\u043e\u0439 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435, \u0442\u0430\u043a \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043e\u0439, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 \u0432 VirtualBox. \u0415\u0441\u043b\u0438 \u043c\u043d\u0435 \u0438\u043b\u0438 \u043c\u043e\u0435\u043c\u0443 \u043a\u043e\u043b\u043b\u0435\u0433\u0435 \u043d\u0443\u0436\u043d\u0430 \u0431\u0434 (\u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442), \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u044d\u0442\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0438 \u0437\u0430\u0433\u0430\u0441\u0438\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. \u041f\u0440\u043e\u0431\u0440\u043e\u0441 \u043f\u043e\u0440\u0442\u043e\u0432 \u0434\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442, \u043a\u0430\u043a \u0438 \u0431\u0434, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u0430\u044f \u0432 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435.<\/p>\n<p><\/p>\n<p>See k\u00e4sk suunab minu kohaliku pordi kaugserverisse, kus on postgresql:<\/p>\n<p><\/p>\n<blockquote><p>ssh -L 9000:localhost:5432 user@example.com<\/p><\/blockquote>\n<p>Kaugserveri kasutamine lahendab arendamise meeskonnas probleemi. Sellist serverit saavad korraga kasutada mitu arendajat, nad ei pea oskama postgresql'i seadistada, Dockerist ja muudest keerukustest aru saama. Kaugserverisse saab paigaldada sama andmebaasi, kui spetsiifilist versiooni on raske seadistada. K\u00f5ik, mida arendajad vajavad, on ssh juurdep\u00e4\u00e4s!<\/p>\n<p><\/p>\n<p>Hiljuti lugesin, et SSH tunnelid on tavalise VPN-i piiratud funktsionaalsus! V\u00f5ib lihtsalt seadistada OpenVPN-i v\u00f5i teisi VPN-i realiseerimisi, seadistada infrastruktuuri ja anda arendajatele kasutamiseks. See on t\u00f5esti lahe!<\/p>\n<p><\/p>\n<p>\u00d5nneks pakuvad AWS, GoogleCloud ja teised aasta tasuta kasutamist, kasutage neid! Need on odavad, kui neid mittet\u00f6\u00f6tamise ajal kinni keerata. Olen alati m\u00f5elnud, mis eesm\u00e4rkidel v\u00f5iksin vajada kaugserverit nagu gcloud, tundub, et olen selle leidnud.<\/p>\n<p><\/p>\n<p>Virtuaalse masina jaoks kohaliku keskkonna t\u00e4itmiseks v\u00f5ib kasutada sama Alpine'i, mida aktiivselt kasutatakse dockerite konteinerites. V\u00f5i m\u00f5ne teise kerge distributsiooni, et masin kiiremini \u00fcles laadida.<\/p>\n<p><\/p>\n<p>Kokkuv\u00f5te: andmebaaside ja muude infrastruktuuri komponentide k\u00e4itamine on v\u00f5imalik ja vajalik eemalserverites v\u00f5i virtualboxis. Dockerit ei ole mulle nende eesm\u00e4rkide saavutamiseks vaja.<\/p>\n<p><\/p>\n<h2>Veidi dockerite piltide ja jaotamisest<\/h2>\n<p><\/p>\n<p>Olen juba kirjutanud <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/443136\/\">artiklile<\/a><\/noindex> selles, et dockerite piltide kasutamine ei anna mingit garantiid. Dockerite pildid on vajalikud ainult dockerite konteinerite loomiseks. Kui sa kasutad dockerit, t\u00e4hendab see, et oled seotud dockerite konteinerite ja ainult nendega.<\/p>\n<p><\/p>\n<p>Kas olete kunagi n\u00e4inud, et tarkvaraarendajad portiksid oma tooteid ainult dockerite pildis?<br \/>\nEnamiku toodete tulemus on binaarfailid konkreetse platvormi jaoks, need lisatakse lihtsalt docker-pildile, mis p\u00e4rib vajaliku platvormi. Kas olete kunagi m\u00f5elnud, miks on dockerhubis nii palju sarnaseid pilte? Otsige n\u00e4iteks nginx, n\u00e4ete 100500 pilti erinevatelt inimestelt. Need inimesed ei ole nginx'i ise loonud, nad on lihtsalt oma docker-pildile lisanud ametliku nginx'i ja kaunistanud seda oma konfigureerimistega konteinerite k\u00e4ivitamise mugavuseks. <\/p>\n<p><\/p>\n<p>\u00dcldiselt saab salvestada lihtsalt tgz formaadis, kui keegi soovib seda dockeris k\u00e4ivitada, siis v\u00f5ib Dockerfile'i lisada tgz, p\u00e4rida vajalikust keskkonnast ja luua lisafunktsioone, mis ei muuda rakendust tgz-s. See, kes loob docker-pilti, teab, mis tgz on ja mida tal t\u00f6\u00f6ks vaja on. Just nii kasutan mina dockeri. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kondaurovDev\/dockerfile\">siin<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Kokkuv\u00f5te: mul ei ole vaja docker registry't, kasutaks m\u00f5nd S3 v\u00f5i lihtsalt failide hoiustamise teenust nagu google drive\/dropbox.<\/p>\n<p><\/p>\n<h2>Docker CI-s<\/h2>\n<p><\/p>\n<p>K\u00f5ik ettev\u00f5tted, kus ma olen t\u00f6\u00f6tanud, on omavahel sarnased. Need on enamasti tooteettev\u00f5tted. See t\u00e4hendab, et neil on mingi \u00fcks rakendus, \u00fcks tehnoloogiate kogum (v\u00f5ib-olla paar-kolm programmeerimiskeelt).<\/p>\n<p><\/p>\n<p>Need hosting that puts developers first? Docker can solve many issues; here\u2019s how it works. Why build projects in Docker containers on your servers? Why not just prepare the environment for building, like writing an Ansible playbook that installs the necessary versions of Node.js, PHP, JDK, copies SSH keys, etc., to the server where the build will occur? <\/p>\n<p><\/p>\n<p>I've come to realize this is self-sabotage because Docker brings no benefits through its isolation. The CI problems I've encountered with Docker include:<\/p>\n<p><\/p>\n<ul>\n<li>You still need a Docker image for the build. You have to find an image or write your own Dockerfile.<\/li>\n<li>There\u2019s a 90% chance you need to pass some SSH keys or secret data that you don\u2019t want to write in the Docker image.<\/li>\n<li>The container creates and dies, losing all caches along with it. The next build will have to download all project dependencies again, which is time-consuming and inefficient, and time is money.<\/li>\n<\/ul>\n<p><\/p>\n<p>Developers don't build projects in Docker containers (I used to be a fan, but I pity my past self xD). In Java, you can have multiple versions and switch with one command to the one you need now. The same applies to Node.js; there's nvm.<\/p>\n<p><\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p><\/p>\n<p>\u042f \u0441\u0447\u0438\u0442\u0430\u044e \u0447\u0442\u043e docker \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u0449\u043d\u044b\u0439 \u0438 \u0433\u0438\u0431\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0432 \u044d\u0442\u043e\u043c \u0435\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a (\u0437\u0432\u0443\u0447\u0438\u0442 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0434\u0430). \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043b\u0435\u0433\u043a\u043e &#171;\u043f\u043e\u0434\u0441\u0430\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f&#187; \u043d\u0430 \u043d\u0435\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0441\u0432\u043e\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u043a\u0430\u043a\u043e\u0435 \u0442\u043e \u0441\u0432\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u043e \u0432\u0441\u0435 \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0442\u0435\u043a\u0430\u0435\u0442 \u0432 CI, \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d. DevOps \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u0438\u0448\u0435\u0442 \u043a\u0430\u043a\u0438\u0435 \u0442\u043e \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u044b \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b.<\/p>\n<p><\/p>\n<p>Kasutage Dockerit ainult <strong>viimasel<\/strong> etapil teie t\u00f6\u00f6s, \u00e4rge tooge seda projekti alguses. See ei lahenda teie \u00e4ri probleeme. See lihtsalt t\u00f5ukab probleemid teisele tasemele ja pakub oma lahendusi, teete topelt t\u00f6\u00f6d.<\/p>\n<p><\/p>\n<p><strong><em>Kui Docker on vajalik<\/em><\/strong>: j\u00f5udsin arusaamale, et Docker on v\u00e4ga hea t\u00f6\u00f6tava protsessi optimeerimises, kuid mitte p\u00f5hifunktsionaalsuse loomises.<\/p>\n<p><\/p>\n<p>Kui te siiski otsustate Dockerit kasutada, siis:<\/p>\n<p><\/p>\n<ul>\n<li>olge \u00e4\u00e4rmiselt ettevaatlikud<\/li>\n<li>\u00e4rge suruge Dockerit arendajatele peale<\/li>\n<li>lokaliseerige selle kasutamine \u00fchte kohta, \u00e4rge levitage seda k\u00f5ikidesse repodesse, Dockefile ja docker-compose<\/li>\n<\/ul>\n<p><\/p>\n<p>PS:<\/p>\n<p><\/p>\n<ul>\n<li>Hiljuti sattusin kokku <noindex><a rel=\"nofollow\" href=\"https:\/\/www.packer.io\/\">packer<\/a><\/noindex> ja r\u00e4\u00e4gib, et see t\u00f6\u00f6tab Ansible'iga v\u00e4ga h\u00e4sti ja v\u00f5imaldab \u00fchtlustada piltide loomise protsessi (sealhulgas docker image'i)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.smashcompany.com\/technology\/docker-is-a-dangerous-gamble-which-we-will-regret\">ka dockerist, huvitav artikkel<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Ait\u00e4h, et lugesite, soovin teile selgeid lahendusi teie tegemistes ja produktiivseid t\u00f6\u00f6p\u00e4evi!<\/p>\n<p>Allikas: <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 4.9.10 - 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 \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\" \/>\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\/et\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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 \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47Kas Docker on m\u00e4nguasi v\u00f5i mitte? V\u00f5i siiski on?","description":"Tere k\u00f5igile! V\u00e4ga tahaks kohe teema kallale asuda, kuid \u00f5igem on r\u00e4\u00e4kida natuke oma loos: Sissejuhatus Olen programmeerija, kellel on kogemus \u00fche lehe rakenduste, Scala\/Java ja Node.js'i arendamisel serveris. Olen juba pikka aega (kindlasti paar \u2013 kolm aastat) arvanud, et docker on taevane kingitus ja t\u00f5eliselt \u00e4ge t\u00f6\u00f6riist, millega v\u00f5iks igal\u00fchel t\u00f6\u00f6d teha.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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 \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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/31641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=31641"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/31641\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=31641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=31641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=31641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}