{"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 testkeskkonnas","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 testkeskkonnas\" src=\"\/wp-content\/uploads\/2020\/02\/50b03664f1984b36e1703717dfaa7ecc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDocker-in-Docker on Docker-teenuse virtuaalset keskkonda, mis t\u00f6\u00f6tab konteineri sees, et luua konteineripilte. Docker-in-Docker'i peamine eesm\u00e4rk oli aidata Dockerit arendada. Paljud kasutavad seda Jenkins CI k\u00e4itamiseks. Esialgu tundub see normaalne, kuid hiljem tekivad probleemid, mida oleks saanud v\u00e4ltida, kui Docker installida Jenkins CI konteinerisse. Selles artiklis r\u00e4\u00e4gitakse, kuidas seda teha. Kui teid huvitab viimane lahendus ilma \u00fcksikasjade vaatamiseta, loe lihtsalt artikli \u201eProbleemi lahendamine\u201d viimane osa.<\/p>\n<p><img decoding=\"async\" alt=\"M\u00f5elge hoolikalt, enne kui kasutate Docker-in-Docker&#039;i CI v\u00f5i testkeskkonnas\" 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: \u201eHea\u201d<\/h3>\n<p>\n\u00dckskord rohkem kui kaks aastat tagasi lisasin Dockerisse <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moby\/moby\/commit\/280901e5fbd0c2dabd14d7a9b69a073f6e8f87e4\">lipuke<\/a><\/noindex> \u2013privileged ja kirjutasin <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/commit\/bfbe19c0eec634f66c9f8bac53c6b7c7e0fdb063\">esimese versiooni dind<\/a><\/noindex>. Eesm\u00e4rk oli aidata p\u00f5himeeskonnal Dockerit kiiremini arendada. Enne Docker-in-Docker'i ilmumist n\u00e4gi t\u00fc\u00fcpiline arendusts\u00fckkel v\u00e4lja j\u00e4rgmine:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>koostamine (build);<\/li>\n<li>k\u00e4ivitatud Docker-teenuse peatamine;<\/li>\n<li>uue Docker-teenuse k\u00e4ivitamine;<\/li>\n<li>testimine;<\/li>\n<li>ts\u00fckli kordamine.<\/li>\n<\/ul>\n<p>\nKuid kui soovisite teha ilusat, korratavasse pakkesse (st konteinerisse), muutus see keerulisemaks:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>veenduda, et k\u00e4imas on toimiv Docker versioon;<\/li>\n<li>koosta uus Docker vana Dockeriga;<\/li>\n<li>peatada Docker daemon;<\/li>\n<li>k\u00e4ivitada uus Docker daemon;<\/li>\n<li>testida;<\/li>\n<li>peatada uus Docker daemon;<\/li>\n<li>korrata.<\/li>\n<\/ul>\n<p>\nDocker-in-Docker'i tulek on protsessi lihtsustanud:<\/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>\nK\u00fcsi endalt, kas see ei ole palju parem?<\/p>\n<p><img decoding=\"async\" alt=\"M\u00f5elge hoolikalt, enne kui kasutate Docker-in-Docker&#039;i CI v\u00f5i testkeskkonnas\" 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>\nKuid vastupidiselt levinud arvamusele, ei koosne Docker-in-Docker 100% t\u00e4hekestest, poniidest ja \u00fckssarvikutest. Ma tahan \u00f6elda, et on m\u00f5ned probleemid, millest arendajal tasub teadlik olla.<\/p>\n<p>\u00dcks neist puudutab LSM-i (Linuxi turvamuuduleid), nagu AppArmor ja SELinux: konteineri k\u00e4ivitamisel v\u00f5ib \"sisemine Docker\" proovida rakendada turvaprofiile, mis v\u00f5ivad \"v\u00e4list Dockerit\" segadusse ajada v\u00f5i konfliktidesse sattuda. See oli k\u00f5ige keerulisem probleem, mida oli vaja lahendada l\u00e4htudes -privileged lippu. Minu muudatused toimisid ja k\u00f5ik testid oleksid ka minu Debianis ja Ubuntu teste virtuaalmasinates l\u00e4kid tegevuse, kuid nad kukuksid ja sureksid Michael Crosby masinas (kui ma \u00f5igesti m\u00e4letan, oli tal Fedora). Ma ei suuda t\u00e4pselt meenutada probleemi p\u00f5hjust, kuid see v\u00f5is tekkida selle t\u00f5ttu, et Mike on tark mees, kes t\u00f6\u00f6tab SELINUX=enforce tingimustes (ma kasutasin AppArmore), ning minu muudatused ei v\u00f5tnud arvesse SELinuxi profile.<\/p>\n<h3>Docker-in-Docker: \"Kurjuse\"<\/h3>\n<p>\nTeiseks probleemiks on Docker'i salvestusjuhikud. Kui k\u00e4itate Docker'it Docker'i sees, t\u00f6\u00f6tab v\u00e4line Docker tavalise failis\u00fcsteemi (EXT4, BTRFS v\u00f5i muu, mis teil on) peal, samas kui sisemine Docker t\u00f6\u00f6tab kirjutamise koopias\u00fcsteemi (AUFS, BTRFS, Device Mapper jne, s\u00f5ltuvalt sellest, mis on konfigureeritud v\u00e4lise Docker'i jaoks). See tekitab palju kombinatsioone, mis ei t\u00f6\u00f6ta. N\u00e4iteks ei saa te k\u00e4ivitada AUFS'i AUFS'i peal. <\/p>\n<p>Kui k\u00e4itate BTRFS'i BTRFS'i peal, peaks see esmalt t\u00f6\u00f6tama, kuid kui ilmnevad sisemised alamh\u00f5ivad, ei saa vanemat alamh\u00f5ivet kustutada. Device Mapper'il ei ole nimeruumi, seega kui mitu Docker'i instantsi kasutavad seda \u00fchel masinal, saavad k\u00f5ik neist n\u00e4ha (ja m\u00f5jutada) \u00fcksteise pilte ja konteinerite varundusseadmeid. See on halb.<\/p>\n<p>On olemas v\u00e4ltimised paljude nende probleemide lahendamiseks. N\u00e4iteks, kui soovite kasutada AUFS-i sisemises Dockeris, muutke lihtsalt kaust \/var\/lib\/docker montaa\u017eiks ja k\u00f5ik t\u00f6\u00f6tab nagu peab. Docker on lisanud sihtm\u00e4rkide seadme kaardile m\u00f5ned p\u00f5hiraamid, nii et kui mitu Docker'i kutset t\u00f6\u00f6tab \u00fchel masinal, ei l\u00e4he need \u201e\u00fcks teise peale.\u201d<\/p>\n<p>Siiski, selline seadistus pole sugugi lihtne, nagu saate n\u00e4ha nendest <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/issues\/78\">artiklites<\/a><\/noindex> dind'i hoidlast GitHub'is.<\/p>\n<h3>Docker-in-Docker: muutub veel keerulisemaks<\/h3>\n<p>\nAga kuidas on ehituskatalooge? See v\u00f5ib samuti olla \u00fcsna keeruline. Inimesed k\u00fcsivad tihti, \"kui ma k\u00e4itan Docker-in-Docker't, kuidas saan kasutada oma hostis asuvaid pilte, selle asemel et k\u00f5ike oma sisemises Dockeris uuesti alla laadida?\"<\/p>\n<p>M\u00f5ned ettev\u00f5tlikud inimesed on proovinud \/var\/lib\/docker'i hostist Docker-in-Docker konteineris siduda. M\u00f5nikord jagavad nad \/var\/lib\/dockerit mitme konteineriga.<\/p>\n<p><img decoding=\"async\" alt=\"M\u00f5elge hoolikalt, enne kui kasutate Docker-in-Docker&#039;i CI v\u00f5i testkeskkonnas\" src=\"\/wp-content\/uploads\/2020\/02\/192c9d26798d32078272aab1864bbccb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kas soovite andmeid rikkuda? Sest see on just see, mis rikub teie andmed!<\/i><\/p>\n<p>Dockeri demon on selgelt loodud sellele, et tagada ainulaadne juurdep\u00e4\u00e4s \/var\/lib\/docker. Mitte miski muu ei tohiks \"puutuda, suruda v\u00f5i katsuda\" mis tahes Dockeri faile, mis asuvad selles kaustas.<\/p>\n<p>Miks see nii on? Kuna see on tulemus \u00fchest k\u00f5ige raskematest \u00f5ppetundidest, mis saadi dotCloudi arendamisel. DotCloudi konteinerimootor t\u00f6\u00f6tas, lubades mitmel protsessil samal ajal juurdep\u00e4\u00e4su \/var\/lib\/dotcloudile. Ohtlikud nipid, nagu failide aatomiline asendamine (kui mitte redigeerida kohapeal), koodi \"pipardamine\" soovituslike ja kohustuslike lukustustega ning muud katsed ohutute s\u00fcsteemidega, nagu SQLite ja BDB, ei t\u00f6\u00f6tanud alati. Kui me \u00fcmber kujundasime meie konteinerimootori, mis l\u00f5puks muutus Dockeriks, oli \u00fcheks peamiseks kavandamisotsuseks k\u00f5ik konteineritega seotud toimingud koondada \u00fche demonini, et l\u00f5petada kogu see segadus samaaegsest juurdep\u00e4\u00e4sust.<\/p>\n<p>\u00c4rge saage 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 me arvame, et on lihtsam ja kergem kirjutada ja hallata koodi, kasutades Dockerit ainukese m\u00e4ngijana.<\/p>\n<p>See t\u00e4hendab, et kui jagate katalooge \/var\/lib\/docker mitme Docker-i eksemplari vahel, siis tekivad teil probleemid. Muidugi v\u00f5ib see toimida, eriti testimise varases etapis. \"Kuule, ema, ma saan \"dockeriga\" ubuntu k\u00e4ivitada!\" Kuid proovige teha midagi keerulisemat, n\u00e4iteks t\u00f5mmata sama pilti kahest erinevast eksemplarist, ja n\u00e4ete, kuidas maailm p\u00f5leb.<\/p>\n<p>See t\u00e4hendab, et kui teie CI-s\u00fcsteem sooritab ehitusi ja uuesti ehitusi, siis iga kord Docker-in-Docker konteineri taask\u00e4ivitamisel riskite oma vahem\u00e4lu sees tuumabombaga. See ei ole sugugi lahe!<\/p>\n<h3>Probleemi lahendamine<\/h3>\n<p>\nTeeme sammu tagasi. Kas teil on t\u00f5esti vaja Docker-in-Dockerit v\u00f5i soovite lihtsalt v\u00f5imalust k\u00e4ivitada Dockerit, nimelt koguda ja k\u00e4ivitada konteinerid ja pildid oma CI-s\u00fcsteemist, samal ajal kui see CI-s\u00fcsteem ise on konteineris?<\/p>\n<p>Ma arvan, et enamik inimesi vajab viimast varianti, s.t. nad soovivad, et CI-s\u00fcsteem nagu Jenkins saaks konteinerit k\u00e4ivitada. Ja lihtsaim viis selleks on lihtsalt Docker-soketi sisestamine oma CI-konteinerisse, seostades selle -v lipuga.<\/p>\n<p>Lihtsalt \u00f6eldes, kui k\u00e4itate oma CI-konteinerit (Jenkins v\u00f5i muu), alustage seda j\u00e4rgmistel ridadel, selle asemel et midagi Docker-in-Dockeriga kokku panna:<\/p>\n<pre><code class=\"plaintext\">docker run -v \/var\/run\/docker.sock:\/var\/run\/docker.sock ...<\/code><\/pre>\n<p>\nN\u00fc\u00fcd on sellel konteineril juurdep\u00e4\u00e4s Docker-soketile ja seega saab see konteinerit k\u00e4ivitada. Erinevalt sellest, et see ei k\u00e4ivita \u201calam\u201d konteinerit, vaid \u201csugulasi\u201d konteinerit.<\/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 konteine, luuakse need \u00fclemise Docker'i alla. Te ei koge pesakonna k\u00f5rvaltoimeid ja ehitusvahem\u00e4lu kasutatakse mitme kutsumise jaoks.<\/p>\n<p>M\u00e4rkus: Artikli varasemates versioonides soovitati siduda hosti binaarfail Docker konteineriga. N\u00fc\u00fcd on see ebausaldusv\u00e4\u00e4rne, kuna Docker mehhanism ei kehti enam staatilistele v\u00f5i peaaegu staatilistele raamatukogudele.<\/p>\n<p>Seega, kui soovite Jenkins CI-st Dockerit kasutada, on teil 2 v\u00f5imalust:<br \/>\ninstallige Docker CLI, kasutades pildipakendi aluseks olevat s\u00fcsteemi (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 huvitavaid materjale? Toetage meid, tehes tellimuse 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 sisenemise taseme 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 \u00f5ieti serverit jagada?<\/a><\/noindex> (saadaval on RAID1 ja RAID10 variandid, kuni 24 s\u00fcdamikku ja kuni 40GB DDR4).<\/p>\n<p><b>Kas Dell R730xd on kaks korda odavam Equinixi Tier IV andmete keskuses Amsterdamis?<\/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> Hollandi turul! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 alates $99!<\/b><\/b> Lugege, kuidas <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Luua ettev\u00f5tte tasemel infrastruktuur Dell R730xd E5-2650 v4 serveritega, mille hind on 9000 eurot, madala hinnaga?<\/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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"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\" \/>\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) 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\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=\"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\" \/>\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 t\u00f5siselt, enne kui kasutate Docker-in-Dockerit CI v\u00f5i testimiseks | ProHoster","description":"Docker-in-Docker on virtualiseeritud Docker-demonikodu, mis t\u00f6\u00f6tab konteineris endas konteineripiltide koostamiseks. Docker-in-Dockeri loomise p\u00f5hieesm\u00e4rk oli aidata Dockerit arendada. Paljud inimesed kasutavad seda Jenkins CI k\u00e4ivitamiseks. Alguses tundub see normaalne, kuid hiljem tekivad probleemid, mida oleks v\u00f5imalik v\u00e4ltida, kui installida Docker Jenkins CI konteinerisse. See artikkel r\u00e4\u00e4gib sellest.","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":"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","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"},"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}]}}