{"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\/sk\/blog\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy","title":{"rendered":"Dobre si to premyslite, predt\u00fdm ako za\u010dnete pou\u017e\u00edva\u0165 Docker-in-Docker pre CI alebo testovacie prostredie","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Dobre si to premyslite, predt\u00fdm ako za\u010dnete pou\u017e\u00edva\u0165 Docker-in-Docker pre CI alebo testovacie prostredie\" src=\"\/wp-content\/uploads\/2020\/02\/50b03664f1984b36e1703717dfaa7ecc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDocker-in-Docker predstavuje virtualizovan\u00e9 prostredie Docker demona, ktor\u00e9 be\u017e\u00ed priamo v kontejnery na stavbu kontajnerov\u00fdch obrazov. Hlavn\u00fdm cie\u013eom vytvorenia Docker-in-Docker bola pomoc pri v\u00fdvoji samotn\u00e9ho Dockera. Mnoho \u013eud\u00ed ho pou\u017e\u00edva na spustenie Jenkins CI. Na prv\u00fd poh\u013ead to vyzer\u00e1 norm\u00e1lne, ale nesk\u00f4r sa vyskytn\u00fa probl\u00e9my, ktor\u00fdm sa d\u00e1 pred\u00eds\u0165, ak nain\u0161talujete Docker do kontejneru Jenkins CI. Tento \u010dl\u00e1nok popisuje, ako to urobi\u0165. Ak h\u013ead\u00e1te kone\u010dn\u00e9 rie\u0161enie bez podrobnost\u00ed, jednoducho pre\u010d\u00edtajte posledn\u00fa \u010das\u0165 \u010dl\u00e1nku 'Rie\u0161enie probl\u00e9mu'.<\/p>\n<p><img decoding=\"async\" alt=\"Dobre si to premyslite, predt\u00fdm ako za\u010dnete pou\u017e\u00edva\u0165 Docker-in-Docker pre CI alebo testovacie prostredie\" 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: 'Dobr\u00fd'<\/h3>\n<p>\nPred viac ako dvoma rokmi som vlo\u017eil do Dockera <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moby\/moby\/commit\/280901e5fbd0c2dabd14d7a9b69a073f6e8f87e4\">prapor<\/a><\/noindex> --privileged a nap\u00edsal <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/commit\/bfbe19c0eec634f66c9f8bac53c6b7c7e0fdb063\">prv\u00fa verziu dind<\/a><\/noindex>. Cie\u013eom bolo pom\u00f4c\u0165 hlavnej skupine vyv\u00edja\u0165 Docker r\u00fdchlej\u0161ie. Pred vznikom Docker-in-Docker bol typick\u00fd v\u00fdvojov\u00fd cyklus tak\u00fdto:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>build;<\/li>\n<li>zastavenie be\u017eiaceho Docker demona;<\/li>\n<li>spustenie nov\u00e9ho Docker demona;<\/li>\n<li>testovanie;<\/li>\n<li>opakova\u0165 cyklus.<\/li>\n<\/ul>\n<p>\nAk ste v\u0161ak chceli vytvori\u0165 pekn\u00fa, reprodukovate\u013en\u00fa zostavu (t.j. v kontajneri), bolo to zlo\u017eitej\u0161ie:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>uisti\u0165 sa, \u017ee be\u017e\u00ed funk\u010dn\u00e1 verzia Dockera;<\/li>\n<li>postavi\u0165 nov\u00fd Docker so star\u00fdm Dockerom;<\/li>\n<li>zastavi\u0165 Docker demona;<\/li>\n<li>spusti\u0165 nov\u00e9ho Docker demona;<\/li>\n<li>oTESTOVA\u0164;<\/li>\n<li>zastavi\u0165 nov\u00e9ho Docker demona;<\/li>\n<li>opakova\u0165.<\/li>\n<\/ul>\n<p>\nS pr\u00edchodom Docker-in-Docker sa proces zjednodu\u0161il:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>build + spustenie v jednom kroku;<\/li>\n<li>opakova\u0165 cyklus.<\/li>\n<\/ul>\n<p>\nNen\u00ed to pravda, je to ove\u013ea lep\u0161ie?<\/p>\n<p><img decoding=\"async\" alt=\"Dobre si to premyslite, predt\u00fdm ako za\u010dnete pou\u017e\u00edva\u0165 Docker-in-Docker pre CI alebo testovacie prostredie\" src=\"\/wp-content\/uploads\/2020\/02\/b4870536068c660a8d996ec53f079504.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Docker-in-Docker: 'Zl\u00fd'<\/h3>\n<p>\nNapriek roz\u0161\u00edren\u00e9mu presved\u010deniu v\u0161ak Docker-in-Docker nie je 100% z hviezd, pon\u00edkov a jednoro\u017ecov. M\u00e1m na mysli, \u017ee existuje nieko\u013eko probl\u00e9mov, o ktor\u00fdch by mal v\u00fdvoj\u00e1r vedie\u0165.<\/p>\n<p>Jedna sa v\u0161etk\u00fdch t\u00fdchto ot\u00e1zok sa t\u00fdka LSM (bezpe\u010dnostn\u00fdch modulov Linuxu), ako s\u00fa AppArmor a SELinux: pri spusten\u00ed kontajnera m\u00f4\u017ee 'vn\u00fatorn\u00fd Docker' sk\u00fasi\u0165 aplikova\u0165 bezpe\u010dnostn\u00e9 profily, ktor\u00e9 bud\u00fa konfliktova\u0165 alebo zamie\u0148a\u0165 'vonkaj\u0161\u00ed Docker'. Toto bola najzlo\u017eitej\u0161ia ot\u00e1zka, ktor\u00fa bolo potrebn\u00e9 vyrie\u0161i\u0165 pri pokuse o zl\u00fa\u010denie p\u00f4vodnej implement\u00e1cie flagu \u2013privileged. Moje zmeny fungovali a v\u0161etky testy by prebehli aj na mojom stroji Debian a na testovac\u00edch virtu\u00e1lnych strojoch Ubuntu, ale zr\u00fatili by sa a sp\u00e1lili na stroji Michaela Crosbyho (tak si pam\u00e4t\u00e1m, \u017ee mal Fedoru). Nem\u00f4\u017eem si spomen\u00fa\u0165 na presn\u00fd d\u00f4vod probl\u00e9mu, ale mo\u017eno to bolo preto, \u017ee Mike je m\u00fadry \u010dlovek, ktor\u00fd pracuje s SELINUX=enforce (ja som pou\u017e\u00edval AppArmor) a moje zmeny nezoh\u013ead\u0148ovali profily SELinux.<\/p>\n<h3>Docker-in-Docker: 'Zl\u00fd'<\/h3>\n<p>\nDruh\u00fd probl\u00e9m sa t\u00fdka ovl\u00e1da\u010dov \u00falo\u017e\u00edsk Docker. Ke\u010f spust\u00edte Docker-in-Docker, vonkaj\u0161\u00ed Docker funguje nad be\u017en\u00fdm s\u00faborov\u00fdm syst\u00e9mom (EXT4, BTRFS alebo ak\u00fdko\u013evek in\u00fd, ktor\u00fd m\u00e1te k dispoz\u00edcii), zatia\u013e \u010do vn\u00fatorn\u00fd Docker funguje nad syst\u00e9mom kop\u00edrovania pri z\u00e1pise (AUFS, BTRFS, Device Mapper a pod., v z\u00e1vislosti od toho, \u010do je nastaven\u00e9 pou\u017e\u00edva\u0165 vonkaj\u0161\u00ed Docker). T\u00fdmto vznik\u00e1 mnoho kombin\u00e1ci\u00ed, ktor\u00e9 nebud\u00fa fungova\u0165. Napr\u00edklad nem\u00f4\u017eete spusti\u0165 AUFS nad AUFS. <\/p>\n<p>Ak spust\u00edte BTRFS nad BTRFS, spo\u010diatku by to malo fungova\u0165, ale akon\u00e1hle sa objavia vnoren\u00e9 podobjemy, nebude mo\u017en\u00e9 odstr\u00e1ni\u0165 rodi\u010dovsk\u00fd podobjem. Modul Device Mapper nem\u00e1 priestorov\u00e9 n\u00e1zvy, tak\u017ee ak viacer\u00e9 in\u0161tancie Dockeru pou\u017e\u00edvaj\u00fa na jednom stroji tento modul, v\u0161etky bud\u00fa m\u00f4c\u0165 vidie\u0165 (a ovplyv\u0148ova\u0165) obrazy navz\u00e1jom a zariadenia na z\u00e1lohovanie kontajnerov. To je zl\u00e9.<\/p>\n<p>Existuj\u00fa obch\u00e1dzky pre rie\u0161enie mnoh\u00fdch z t\u00fdchto probl\u00e9mov. Napr\u00edklad, ak chcete pou\u017e\u00edva\u0165 AUFS vo vn\u00fatornom Dockeri, jednoducho preme\u0148te prie\u010dinok \/var\/lib\/docker na tento a v\u0161etko bude v poriadku. Docker prid\u00e1va niektor\u00e9 z\u00e1kladn\u00e9 priestorov\u00e9 n\u00e1zvy do cie\u013eov\u00fdch n\u00e1zvov Device Mapper, tak\u017ee ak by viacero volan\u00ed Docker prebehlo na jednom stroji, nebud\u00fa si 'st\u00fapa\u0165' na nohy.<\/p>\n<p>Napriek tomu, tak\u00e1to konfigur\u00e1cia nie je v\u00f4bec jednoduch\u00e1, ako je mo\u017en\u00e9 vidie\u0165 z t\u00fdchto <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/issues\/78\">\u010dl\u00e1nkov<\/a><\/noindex> v repozit\u00e1ri dind na GitHub.<\/p>\n<h3>Docker-in-Docker: je to e\u0161te hor\u0161ie<\/h3>\n<p>\nA \u010do s cache zostaven\u00ed? To m\u00f4\u017ee by\u0165 tie\u017e dos\u0165 zlo\u017eit\u00e1 z\u00e1le\u017eitos\u0165. \u013dudia sa ma \u010dasto p\u00fdtaj\u00fa: \u201eak sp\u00fa\u0161\u0165am Docker-in-Docker, ako m\u00f4\u017eem vyu\u017e\u00edva\u0165 obrazy ulo\u017een\u00e9 na mojom hostite, namiesto toho, aby som v\u0161etko znova s\u0165ahoval do svojho intern\u00e9ho Dockeru?\u201c<\/p>\n<p>Niektor\u00ed podnikav\u00ed \u013eudia sa pok\u00fasili namapova\u0165 \/var\/lib\/docker z hostite\u013ea do kontajnera Docker-in-Docker. Niekedy zdie\u013eaj\u00fa \/var\/lib\/docker medzi viacer\u00fdmi kontajnermi.<\/p>\n<p><img decoding=\"async\" alt=\"Dobre si to premyslite, predt\u00fdm ako za\u010dnete pou\u017e\u00edva\u0165 Docker-in-Docker pre CI alebo testovacie prostredie\" src=\"\/wp-content\/uploads\/2020\/02\/192c9d26798d32078272aab1864bbccb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Chcete po\u0161kodi\u0165 d\u00e1ta? Preto\u017ee to je presne to, \u010do po\u0161kod\u00ed va\u0161e d\u00e1ta!<\/i><\/p>\n<p>Docker d\u00e9mon bol jasne navrhnut\u00fd tak, aby mal exkluz\u00edvny pr\u00edstup k \/var\/lib\/docker. Ni\u010d in\u00e9 by nemalo \u201edot\u00fdka\u0165 sa, \u0165uka\u0165 alebo \u0161m\u00fdka\u0165\u201c ak\u00e9ko\u013evek s\u00fabory Docker nach\u00e1dzaj\u00face sa v tejto zlo\u017eke.<\/p>\n<p>Pre\u010do je to tak? Preto\u017ee je to v\u00fdsledok jedn\u00e9ho z naj\u0165a\u017e\u0161\u00edch lekci\u00ed, ktor\u00e9 sme sa nau\u010dili pri v\u00fdvoji dotCloud. Kontajnerov\u00fd motor dotCloud pracoval so viacer\u00fdmi procesmi, ktor\u00e9 sa s\u00fa\u010dasne obracali na \/var\/lib\/dotcloud. \u0160ikovn\u00e9 triky, ako je atomick\u00e1 v\u00fdmena s\u00faborov (namiesto \u00fapravy na mieste), \u201eochutenie\u201c k\u00f3du odpor\u00fa\u010daniami a povinn\u00fdmi z\u00e1mkami a \u010fal\u0161ie experimenty s bezpe\u010dn\u00fdmi syst\u00e9mami, ako SQLite a BDB, nefungovali v\u017edy. Ke\u010f sme prestavovali n\u00e1\u0161 kontajnerov\u00fd motor, ktor\u00fd sa nakoniec premenil na Docker, jedn\u00fdm z hlavn\u00fdch dizajn\u00e9rskych rozhodnut\u00ed bolo konsolidova\u0165 v\u0161etky oper\u00e1cie s kontajnerami pod jedin\u00fdm d\u00e9monom, aby sme sa zbavili tejto hl\u00faposti s\u00fabe\u017en\u00e9ho pr\u00edstupu.<\/p>\n<p>Nepochopte ma zle: je mo\u017en\u00e9 urobi\u0165 nie\u010do dobr\u00e9, spo\u013eahliv\u00e9 a r\u00fdchle, \u010do bude obsahova\u0165 nieko\u013eko procesov a modern\u00e9 paraleln\u00e9 riadenie. Ale mysl\u00edme si, \u017ee je jednoduch\u0161ie a \u013eah\u0161ie p\u00edsa\u0165 a udr\u017eiava\u0165 k\u00f3d s pou\u017eit\u00edm Dockeru ako jedin\u00e9ho hr\u00e1\u010da.<\/p>\n<p>To znamen\u00e1, \u017ee ak zdie\u013eate adres\u00e1r \/var\/lib\/docker medzi viacer\u00fdmi in\u0161tanciami Docker, naraz\u00edte na probl\u00e9my. Samozrejme, m\u00f4\u017ee to fungova\u0165, najm\u00e4 v po\u010diato\u010dn\u00fdch f\u00e1zach testovania. \u201ePo\u010duj, mami, m\u00f4\u017eem spusti\u0165 ubuntu pomocou 'dockera'!\u201c Ale sk\u00faste spravi\u0165 nie\u010do zlo\u017eitej\u0161ie, napr\u00edklad vytiahnu\u0165 ten ist\u00fd obraz z dvoch r\u00f4znych in\u0161tanci\u00ed, a uvid\u00edte, ako sa svet zap\u00e1li.<\/p>\n<p>To znamen\u00e1, \u017ee ak v\u00e1\u0161 CI syst\u00e9m vykon\u00e1va zostavenia a pre zostavenia, zaka\u017ed\u00fdm pri re\u0161tarte kontajnera Docker-in-Docker riskujete resetovanie y jeho cache jadrov\u00fa bombu. To nie je v\u00f4bec fajn!<\/p>\n<h3>Rie\u0161enie probl\u00e9mu<\/h3>\n<p>\nPo\u010fme sa na to pozrie\u0165 z inej str\u00e1nky. Skuto\u010dne potrebujete Docker-in-Docker alebo len chcete ma\u0165 mo\u017enos\u0165 sp\u00fa\u0161\u0165a\u0165 Docker a to konkr\u00e9tne zostavova\u0165 a sp\u00fa\u0161\u0165a\u0165 kontajnery a obrazy z v\u00e1\u0161ho CI syst\u00e9mu, zatia\u013e \u010do tento CI syst\u00e9m je umiestnen\u00fd v konte?<\/p>\n<p>Stav\u00edm sa, \u017ee v\u00e4\u010d\u0161ina \u013eud\u00ed potrebuje posledn\u00fa mo\u017enos\u0165, t.j. chc\u00fa, aby CI syst\u00e9m, ako je Jenkins, mohol sp\u00fa\u0161\u0165a\u0165 kontajnery. A najjednoduch\u0161\u00ed sp\u00f4sob, ako to dosiahnu\u0165, je jednoducho pripoji\u0165 socket Docker do v\u00e1\u0161ho CI kontajnera spojen\u00edm s flagom -v.<\/p>\n<p>Jednoducho povedan\u00e9, ke\u010f sp\u00fa\u0161\u0165ate svoj CI kontajner (Jenkins alebo in\u00fd), namiesto toho, aby ste hackovali nie\u010do spolo\u010dne s Docker-in-Docker, spustite ho s pr\u00edkazom:<\/p>\n<pre><code class=\"plaintext\">docker run -v \/var\/run\/docker.sock:\/var\/run\/docker.sock ...<\/code><\/pre>\n<p>\nTeraz tento kontajner bude ma\u0165 pr\u00edstup k socketu Docker a teda bude m\u00f4c\u0165 sp\u00fa\u0161\u0165a\u0165 kontajnery. S t\u00fdm rozdielom, \u017ee namiesto sp\u00fa\u0161\u0165ania \"podriaden\u00fdch\" kontajnerov, bude sp\u00fa\u0161\u0165a\u0165 \"pr\u00edbuzn\u00e9\" kontajnery.<\/p>\n<p>Sk\u00faste to s ofici\u00e1lnym obrazom docker (ktor\u00fd obsahuje bin\u00e1rny s\u00fabor Docker):<\/p>\n<pre><code class=\"plaintext\">docker run -v \/var\/run\/docker.sock:\/var\/run\/docker.sock \n           -ti docker<\/code><\/pre>\n<p>\nVyzer\u00e1 to a funguje to ako Docker-in-Docker, ale nie je to Docker-in-Docker: ke\u010f tento kontajner vytvor\u00ed \u010fal\u0161ie kontajnery, bud\u00fa vytvoren\u00e9 v nadriadenom Dockeri. Nebudete ma\u0165 ved\u013eaj\u0161ie \u00fa\u010dinky vnorenia a cache zostavenia bude spolo\u010dn\u00e1 pre viacero volan\u00ed.<\/p>\n<p>Pozn\u00e1mka: predch\u00e1dzaj\u00face verzie tohto \u010dl\u00e1nku odpor\u00fa\u010dali pripoji\u0165 bin\u00e1rny s\u00fabor Docker z hostite\u013ea do kontajnera. Teraz je to nespolehliv\u00e9, preto\u017ee mechanizmus Docker sa u\u017e neuplat\u0148uje na statick\u00e9 alebo takmer statick\u00e9 kni\u017enice.<\/p>\n<p>Tak\u017ee, ak chcete pou\u017e\u00edva\u0165 Docker z Jenkins CI, m\u00e1te 2 mo\u017enosti:<br \/>\nin\u0161tal\u00e1cia Docker CLI pou\u017eit\u00edm z\u00e1kladn\u00e9ho syst\u00e9mu bal\u00edkov\u00e9ho obrazu (t.j. ak je v\u00e1\u0161 obraz zalo\u017een\u00fd na Debiane, pou\u017eite bal\u00edky .deb), pou\u017eitie Docker API.<\/p>\n<h3>Trochu reklamy \ud83d\ude42<\/h3>\n<p>\n\u010eakujeme, \u017ee ost\u00e1vate s nami. P\u00e1\u010dia sa v\u00e1m na\u0161e \u010dl\u00e1nky? Chcete vidie\u0165 viac zauj\u00edmav\u00fdch materi\u00e1lov? Podporte n\u00e1s, vytvoren\u00edm objedn\u00e1vky alebo odpor\u00fa\u010dan\u00edm zn\u00e1mym, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">cloud VPS pre v\u00fdvoj\u00e1rov od 4,99 dol\u00e1rov<\/a><\/noindex>, <b>unik\u00e1tny ekvivalent entry-level serverov, ktor\u00fd sme pre v\u00e1s vytvorili:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Cel\u00e1 pravda o VPS (KVM) E5-2697 v3 (6 jadier) 10GB DDR4 480GB SSD 1Gbps od 19 dol\u00e1rov alebo ako spr\u00e1vne rozdeli\u0165 server?<\/a><\/noindex> (k dispoz\u00edcii varianty s RAID1 a RAID10, a\u017e 24 jadier a a\u017e 40GB DDR4).<\/p>\n<p><b>Dell R730xd je dvakr\u00e1t lacnej\u0161\u00ed v d\u00e1tovom centre Equinix Tier IV v Amsterdame?<\/b> Len u n\u00e1s <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 od 199 dol\u00e1rov<\/a><\/noindex> v Holandsku! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 od 99 dol\u00e1rov!<\/b><\/b> Pre\u010d\u00edtajte si o tom <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Ako vybudova\u0165 infra\u0161trukt\u00faru korpor\u00e1tneho typu s pou\u017eit\u00edm serverov Dell R730xd E5-2650 v4 s cenou 9000 eur za zlomok ceny?<\/a><\/noindex><br \/>\n<br \/>Zdroj: <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.4 - 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\/sk\/blog\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy\" \/>\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\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\/sk\/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\udd47Dobre si rozmyslite, ne\u017e pou\u017eijete Docker-in-Docker pre CI alebo testovacie prostredie | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/sk\/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":"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\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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/52071","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=52071"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/52071\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/52072"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=52071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=52071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=52071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}