{"id":52071,"date":"2020-02-18T05:34:24","date_gmt":"2020-02-18T02:34:24","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy"},"modified":"2020-02-18T05:34:24","modified_gmt":"2020-02-18T02:34:24","slug":"horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy","title":{"rendered":"M\u00f5elge hoolikalt, enne kui kasutate Docker-in-Docker'i CI v\u00f5i testkeskkonnana","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"M\u00f5elge hoolikalt, enne kui kasutate Docker-in-Docker&#039;i CI v\u00f5i testkeskkonnana\" src=\"\/wp-content\/uploads\/2020\/02\/50b03664f1984b36e1703717dfaa7ecc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDocker-in-Docker on Dockeri virtuaalne keskkond, kus Dockeri deemon t\u00f6\u00f6tab konteineris, et ehitada konteinerite pilte. Docker-in-Dockeri loomise peamine eesm\u00e4rk oli aidata Dockerit arendada. Paljud inimesed kasutavad seda Jenkins CI k\u00e4ivitamiseks. Alguses tundub see normaalne, kuid seej\u00e4rel tekivad probleemid, mida oleks v\u00f5imalik v\u00e4ltida, kui installida Docker Jenkins CI konteinerisse. K\u00e4esolevas artiklis r\u00e4\u00e4gitakse, kuidas seda teha. Kui teid huvitab l\u00f5pplahendus, ilma detailideta, lugege lihtsalt artikli viimatist osa \u201eProbleemi lahendamine\u201d.<\/p>\n<p><img decoding=\"async\" alt=\"M\u00f5elge hoolikalt, enne kui kasutate Docker-in-Docker&#039;i CI v\u00f5i testkeskkonnana\" src=\"\/wp-content\/uploads\/2020\/02\/0fdafa0c0a1768170cff52333e733314.png\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Docker-in-Docker: \"Hea\"<\/h3>\n<p>\n\u00dcle kahe aasta tagasi lisasin Dockerisse <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moby\/moby\/commit\/280901e5fbd0c2dabd14d7a9b69a073f6e8f87e4\">Teised<\/a><\/noindex> --privileged ja kirjutasin <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/commit\/bfbe19c0eec634f66c9f8bac53c6b7c7e0fdb063\">esimese versiooni dind<\/a><\/noindex>. Eesm\u00e4rk oli aidata p\u00f5himeeskonda Dockerit kiiremini arendada. Enne Docker-in-Dockeri ilmumist oli t\u00fc\u00fcpiline arendus-ts\u00fckkel selline:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>ehitamine (build);<\/li>\n<li>k\u00e4ivitatud Docker-deemoni peatamine;<\/li>\n<li>uue Docker-deemoni k\u00e4ivitamine;<\/li>\n<li>testimine;<\/li>\n<li>ts\u00fckli kordamine.<\/li>\n<\/ul>\n<p>\nKui aga soovisite teha ilusat, korduvat ehitust (st konteineris), siis muutus see keerulisemaks:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>veenduda, et t\u00f6\u00f6tav Docker on k\u00e4ivitunud;<\/li>\n<li>ehitada uus Docker vana Dockeriga;<\/li>\n<li>peatada Docker-deemon;<\/li>\n<li>k\u00e4ivitada uus Docker-deemon;<\/li>\n<li>testida;<\/li>\n<li>peatada uus Docker-deemon;<\/li>\n<li>korrata.<\/li>\n<\/ul>\n<p>\nDocker-in-Dockeri tulekuga muutus protsess lihtsamaks:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>ehitamine + k\u00e4ivitamine \u00fches etapis;<\/li>\n<li>ts\u00fckli kordamine.<\/li>\n<\/ul>\n<p>\nEi tundu, et see oleks palju parem?<\/p>\n<p><img decoding=\"async\" alt=\"M\u00f5elge hoolikalt, enne kui kasutate Docker-in-Docker&#039;i CI v\u00f5i testkeskkonnana\" src=\"\/wp-content\/uploads\/2020\/02\/b4870536068c660a8d996ec53f079504.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Docker-in-Docker: \"Halb\"<\/h3>\n<p>\nSiiski, vastupidiselt levinud arvamusele, ei koosne Docker-in-Docker 100% t\u00e4htedest, poniidest ja \u00fckssarvikutest. Ma pean silmas, et on mitmeid probleeme, millest arendajal on teadlik olla.<\/p>\n<p>\u00dcks neist puudutab LSM-i (Linuxi turvamoode), nagu AppArmor ja SELinux: konteinerit k\u00e4ivitades v\u00f5ib \u201esisemine Docker\u201c proovida rakendada turvaprofii, mis v\u00f5ib konfliktida v\u00f5i segi ajada \u201ev\u00e4list Dockerit\u201c. See oli k\u00f5ige keerulisem probleem, mida tuli lahendada, p\u00fc\u00fcdes \u00fchendada algse implementatsiooni -privileegide lippu. Minu muudatused t\u00f6\u00f6tasid ning k\u00f5ik testid oleksid l\u00e4binud minu Debian masinas ja Ubuntus testmasinates, kuid nad oleksid kokku kukkunud ja p\u00f5lenud Michael Crosby masinas (kui ma \u00f5igesti m\u00e4letan, oli tal Fedora). Ma ei m\u00e4leta probleemi t\u00e4pset p\u00f5hjust, kuid v\u00f5ib-olla tekkis see seet\u00f5ttu, et Mike on nutikas inimene, kes t\u00f6\u00f6tab SELINUX=enforce (mina kasutasin AppArmor'i) ning minu muudatused ei arvestanud SELinuxi profiilidega.<\/p>\n<h3>Docker-in-Docker: \u201eKurjuse t\u00fctar\u201c<\/h3>\n<p>\nTeine probleem on seotud Docker'i salvestusdraiveritega. Kui k\u00e4ivitate Docker-in-Docker'i, t\u00f6\u00f6tab v\u00e4line Docker tavalisel failis\u00fcsteemil (EXT4, BTRFS v\u00f5i mis iganes teil on) ja sisemine Docker t\u00f6\u00f6tab kirjutamise kopeerimise s\u00fcsteemi (AUFS, BTRFS, seadme kartoteek jne, s\u00f5ltuvalt sellest, mis on v\u00e4list Dockerit kasutama seadistatud). Sellega kaasnevad paljud kombinatsioonid, mis ei t\u00f6\u00f6ta. N\u00e4iteks ei saa te AUFS'i k\u00e4ivitada AUFS'i peal. <\/p>\n<p>Kui k\u00e4itate BTRFS'i BTRFS'i peal, peaks see esmalt t\u00f6\u00f6tama, kuid kui ilmuvad sisemised alamkogud, ei saa vanemat alamkogude parent subvolume-d kustutada. Seadmep\u00f5hine kartoteek ei oma nimesihte, seega kui mitu Docker'i instantsi kasutavad seda \u00fchel masinal, saavad nad k\u00f5ik \u00fcksteise pilte n\u00e4ha (ja m\u00f5jutada) ning konteinerite varukoopiaid. See on halb.<\/p>\n<p>Paljude nende probleemide lahendamiseks on olemas ainult lahendused. N\u00e4iteks kui soovite kasutada AUFS'i sisemises Dockeris, muutke lihtsalt kaust \/var\/lib\/docker mahuks ja k\u00f5ik on korras. Docker on lisanud m\u00f5ned p\u00f5hikohtumised seadme kartoteekide sihtm\u00e4rkidele, nii et kui mitu Docker'i kutsungit tehakse \u00fchel masinal, siis nad ei \u201eastuks\u201c \u00fcksteise varbale.<\/p>\n<p>Kuid selline seadistus pole sugugi lihtne, nagu on n\u00e4ha neist. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/issues\/78\">artikleid<\/a><\/noindex> GitHubi dind'i allikast.<\/p>\n<h3>Docker-in-Docker: l\u00e4heb aina hullemaks<\/h3>\n<p>\nKuidas on lood \u00fclesehitamise cache'iga? See v\u00f5ib olla \u00fcsna keeruline. Inimesed k\u00fcsivad sageli: \"kui ma kasutan Docker-in-Dockerit, kuidas ma saan kasutada minu hostis asuvaid pilte, selle asemel et k\u00f5ik taas alla laadida minu sisemisse Dockerisse?\"<\/p>\n<p>M\u00f5ned ettev\u00f5tlikud inimesed on proovinud siduda \/var\/lib\/docker'i hostist Docker-in-Docker konteinerisse. M\u00f5nikord jagavad nad koos \/var\/lib\/docker'i mitme konteineriga.<\/p>\n<p><img decoding=\"async\" alt=\"M\u00f5elge hoolikalt, enne kui kasutate Docker-in-Docker&#039;i CI v\u00f5i testkeskkonnana\" src=\"\/wp-content\/uploads\/2020\/02\/192c9d26798d32078272aab1864bbccb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kas soovite andmeid kahjustada? Sest see on t\u00e4pselt see, mis teie andmeid kahjustab!<\/i><\/p>\n<p>Docker'i demon on selgelt loodud, et omada eksklusiivset juurdep\u00e4\u00e4su \/var\/lib\/docker'ile. Mitte miski muu ei tohiks \"puutuda, torkida v\u00f5i katsuda\" \u00fchtegi Docker'i faili, mis asub selles kaustas.<\/p>\n<p>Miks see nii on? Sest see on tulemus \u00fchest k\u00f5ige keerulisemast \u00f5ppetunnist, mis saadud dotCloud'i arendamisel. DotCloud'i konteineri mootor t\u00f6\u00f6tas, kui mitmed protsessid kasutasid samaaegselt \/var\/lib\/dotcloud'i. Peened trikid, nagu atomaarne failide asendamine (kui mitte redigeerimine kohapeal), koodi \u201et\u00f5ukamine\u201d soovituslike ja kohustuslike lukudega ning muud eksperimendid turvaliste s\u00fcsteemidega, nagu SQLite ja BDB, ei t\u00f6\u00f6tanud alati. Kui me \u00fcmber tegime meie konteineri mootori, mis l\u00f5puks muutus Docker'iks, oli \u00fcks peamistest disainilahendustest koondada k\u00f5ik konteinerite operatsioonid \u00fchte daemonisse, et l\u00f5petada kogu see jama samaaegsest juurdep\u00e4\u00e4sust.<\/p>\n<p>\u00c4rge saage mind valesti aru: on t\u00e4iesti v\u00f5imalik teha midagi head, usaldusv\u00e4\u00e4rset ja kiiret, mis h\u00f5lmab mitmeid protsesse ja kaasaegset paralleelset haldust. Kuid meie arvates on lihtsam ja kergem kirjutada ja hallata koodi, kasutades Docker'it ainulaadse m\u00e4ngijana.<\/p>\n<p>See t\u00e4hendab, et kui jagate katalooge \/var\/lib\/docker mitmete Docker'i eksemplaride vahel, siis teil on probleeme. Loomulikult v\u00f5ib see toimida, eriti varajaste testimise etappide jooksul. \"Kuule, ma saan Ubuntu 'd dockeri' abil jooksutada!\" Aga proovige teha midagi keerukamat, n\u00e4iteks alla laadida sama pilti kahest erinevast eksemplarist, ja te n\u00e4ete, kuidas maailm p\u00f5leb.<\/p>\n<p>See t\u00e4hendab, et kui teie CI-s\u00fcsteem teostab ehitusi ja \u00fcmberehitusi, siis iga kord, kui k\u00e4itate Docker-in-Docker konteinerit, riskite tuuma pommi oma puhverdatud m\u00e4lus eemaldamisega. See pole sugugi \u00e4ge!<\/p>\n<h3>Probleemi lahendus<\/h3>\n<p>\nV\u00f5tame \u00fche sammu tagasi. Kas teil on t\u00f5eliselt vaja Docker-in-Docker'i v\u00f5i soovite lihtsalt v\u00f5imalust k\u00e4ivitada Dockerit, st ehitada ja k\u00e4ivitada konteinerite ja piltide teie CI-s\u00fcsteemist, samas kui see CI-s\u00fcsteem asub konteineris?<\/p>\n<p>Olen kindel, et enamikule inimestele meeldib viimane variant, st nad soovivad, et CI-s\u00fcsteem, nagu Jenkins, saaks konteinerite k\u00e4ivitamiseks. Ja k\u00f5ige lihtsam viis seda teha on lihtsalt liituda Docker sokliga teie CI konteineris, seostades selle -v lipuga.<\/p>\n<p>Lihtsalt \u00f6eldes, kui k\u00e4itate oma CI konteinerit (Jenkins v\u00f5i muu), aluseta midagi Docker-in-Docker'iga, alustage seda j\u00e4rgmiselt:<\/p>\n<pre><code class=\"plaintext\">docker run -v \/var\/run\/docker.sock:\/var\/run\/docker.sock ...<\/code><\/pre>\n<p>\nN\u00fc\u00fcd p\u00e4\u00e4seb see konteiner Docker soklile ja seega suudab k\u00e4ivitada konteinerid. Erinevalt sellest, et \u201ealams\u00f5lmed\u201d konteinerid saavad olema \u201esugulased\u201c konteinerid.<\/p>\n<p>Proovige seda, kasutades ametlikku Docker'i pilti (mis sisaldab Docker'i binaarfaili):<\/p>\n<pre><code class=\"plaintext\">docker run -v \/var\/run\/docker.sock:\/var\/run\/docker.sock \n           -ti docker<\/code><\/pre>\n<p>\nSee n\u00e4eb v\u00e4lja ja t\u00f6\u00f6tab nagu Docker-in-Docker, kuid see ei ole Docker-in-Docker: kui see konteiner loob t\u00e4iendavaid konteinerite, luuakse need k\u00f5rgema taseme Docker'is. Te ei koge sisemise taseme k\u00f5rvalm\u00f5jusid ja ehituse vahem\u00e4lu jagatakse mitme kutsumise vahel.<\/p>\n<p>M\u00e4rkus: selle artikli varasemad versioonid soovitasid siduda Docker'i binaarfail hostist konteinerisse. N\u00fc\u00fcd on see muutunud ebausaldusv\u00e4\u00e4rseks, kuna Docker'i mehhanism ei laiene enam staatilistele v\u00f5i peaaegu staatilistele raamatukogudele.<\/p>\n<p>Seega, kui soovite kasutada Dockerit Jenkins CI-s, on teil 2 varianti:<br \/>\ninstallige Docker CLI, kasutades pakettide paigaldamise p\u00f5hiosakonda (nt kui teie pilt p\u00f5hineb Debianil, kasutage .deb pakette), kasutage Docker API-d.<\/p>\n<h3>Veidi reklaami \ud83d\ude42<\/h3>\n<p>\nAit\u00e4h, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite n\u00e4ha rohkem huvitavat sisu? Toetage meid, tellides teenuse v\u00f5i soovitades meid tuttavatele. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">Pilve VPS arendajatele alates $4.99<\/a><\/noindex>, <b>ainulaadne entry-level serverite analoog, mille oleme teie jaoks v\u00e4lja m\u00f5elnud:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Kogu t\u00f5de VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps alates $19 v\u00f5i kuidas jagada serverit \u00f5igesti?<\/a><\/noindex> (saadaval RAID1 ja RAID10 variandid, kuni 24 tuuma ja kuni 40GB DDR4).<\/p>\n<p><b>Dell R730xd on Equinixi Tier IV andmekeskuses Amsterdamis kaks korda odavam?<\/b> Ainult meie juures <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB alates $199<\/a><\/noindex> Hollandis! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 alates $99!<\/b><\/b> Lugege sellest <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Kuidas luua ettev\u00f5tte tasemel infrastruktuuri, kasutades Dell R730xd E5-2650 v4 servereid, mille hind on 9000 eurot, taskukohase hinna eest?<\/a><\/noindex><br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/488536\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Docker-in-Docker \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443 Docker-\u0434\u0435\u043c\u043e\u043d, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u0443\u044e \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Docker-in-Docker \u0431\u044b\u043b\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u0430\u043c\u043e\u0433\u043e Docker. \u041c\u043d\u043e\u0433\u0438\u0435 \u043b\u044e\u0434\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0435\u0433\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Jenkins CI. \u041f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u044d\u0442\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c, \u043d\u043e \u0437\u0430\u0442\u0435\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 Docker \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Jenkins CI. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u044d\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":52072,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-52071","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\".\" \/>\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\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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\udd47\u0425\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0439\u0442\u0435, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Docker-in-Docker \u0434\u043b\u044f CI \u0438\u043b\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\".\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-18T02:34:24+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T02:34:24+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\udd47M\u00f5elge hoolikalt enne Docker-in-Docker'i kasutamist CI v\u00f5i testimiskeskkonnas | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/et\/blog\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy","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\udd47\u0425\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0439\u0442\u0435, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Docker-in-Docker \u0434\u043b\u044f CI \u0438\u043b\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b | ProHoster","og:description":".","og:url":"https:\/\/prohoster.info\/et\/blog\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-18T02:34:24+00:00","article:modified_time":"2020-02-18T02:34:24+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52071","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:50:23","updated":"2022-09-27 17:46:30","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/52071","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=52071"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/52071\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/52072"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=52071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=52071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=52071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}