{"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\/sq\/blog\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy","title":{"rendered":"Mendoni mir\u00eb para se t\u00eb p\u00ebrdorni Docker-in-Docker p\u00ebr CI ose ambientin e testimit","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Mendoni mir\u00eb para se t\u00eb p\u00ebrdorni Docker-in-Docker p\u00ebr CI ose ambientin e testimit\" src=\"\/wp-content\/uploads\/2020\/02\/50b03664f1984b36e1703717dfaa7ecc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDocker-in-Docker paraqet nj\u00eb ambient t\u00eb virtualizuar Docker-demon, i ekzekutuar brenda vet\u00eb kontejnerit p\u00ebr nd\u00ebrtimin e imazheve t\u00eb kontejner\u00ebve. Q\u00ebllimi kryesor i krijimit t\u00eb Docker-in-Docker ishte ndihma n\u00eb zhvillimin e vet\u00eb Dockerit. Shum\u00eb njer\u00ebz e p\u00ebrdorin at\u00eb p\u00ebr t\u00eb ekzekutuar Jenkins CI. N\u00eb fillim duket normale, por m\u00eb pas shfaqen probleme q\u00eb mund t\u00eb shmangen duke instaluar Docker brenda kontejnerit Jenkins CI. Ky artikull shpjegon se si ta b\u00ebni k\u00ebt\u00eb. N\u00ebse jeni t\u00eb interesuar p\u00ebr zgjidhjen p\u00ebrfundimtare pa detaje, thjesht lexoni seksionin e fundit t\u00eb artikullit \"Zgjidhja e problemit\".<\/p>\n<p><img decoding=\"async\" alt=\"Mendoni mir\u00eb para se t\u00eb p\u00ebrdorni Docker-in-Docker p\u00ebr CI ose ambientin e testimit\" 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: \u00abI Mir\u00eb\u00bb<\/h3>\n<p>\nM\u00eb shum\u00eb se dy vjet m\u00eb par\u00eb, un\u00eb p\u00ebrfshiva n\u00eb Docker <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moby\/moby\/commit\/280901e5fbd0c2dabd14d7a9b69a073f6e8f87e4\">flaga<\/a><\/noindex> -privilegjuar dhe shkrova <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/commit\/bfbe19c0eec634f66c9f8bac53c6b7c7e0fdb063\">versionin e par\u00eb dind<\/a><\/noindex>. Q\u00ebllimi ishte q\u00eb t'i ndihmoj ekipit kryesor t\u00eb zhvillonte m\u00eb shpejt Dockerin. Para se t\u00eb ndodhte Docker-in-Docker, cikli tipik i zhvillimit ishte si m\u00eb posht\u00eb:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>nd\u00ebrtimi (build);<\/li>\n<li>ndalimi i Docker-demonit t\u00eb ekzekutuar;<\/li>\n<li>njoftimi i nj\u00eb Docker-demon t\u00eb ri;<\/li>\n<li>testimi;<\/li>\n<li>rip\u00ebrs\u00ebritja e ciklit.<\/li>\n<\/ul>\n<p>\nPor n\u00ebse donit t\u00eb b\u00ebnit nj\u00eb nd\u00ebrtim t\u00eb bukur, t\u00eb riprodhuesh\u00ebm (pra, brenda kontejnerit), ato b\u00ebheshin m\u00eb t\u00eb nd\u00ebrlikuara:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>sigurimi q\u00eb versioni funksional i Docker ishte i ekzekutuar;<\/li>\n<li>nd\u00ebrtoni nj\u00eb Docker t\u00eb ri me Dockerin e vjet\u00ebr;<\/li>\n<li>ndaloni demonin Docker;<\/li>\n<li>nisni demonin e ri Docker;<\/li>\n<li>testoni;<\/li>\n<li>ndaloni demonin e ri Docker;<\/li>\n<li>p\u00ebrs\u00ebritni.<\/li>\n<\/ul>\n<p>\nMe shfaqjen e Docker-in-Docker, procesi \u00ebsht\u00eb b\u00ebr\u00eb m\u00eb i thjesht\u00eb:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>nd\u00ebrtimi + nisja n\u00eb nj\u00eb hap;<\/li>\n<li>rip\u00ebrs\u00ebritja e ciklit.<\/li>\n<\/ul>\n<p>\nA nuk \u00ebsht\u00eb k\u00ebshtu shum\u00eb m\u00eb mir\u00eb?<\/p>\n<p><img decoding=\"async\" alt=\"Mendoni mir\u00eb para se t\u00eb p\u00ebrdorni Docker-in-Docker p\u00ebr CI ose ambientin e testimit\" src=\"\/wp-content\/uploads\/2020\/02\/b4870536068c660a8d996ec53f079504.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Docker-in-Docker: \u00abI keqi\u00bb<\/h3>\n<p>\nSidoqoft\u00eb, p\u00ebrkund\u00ebr mendimit t\u00eb zakonsh\u00ebm, Docker-in-Docker nuk \u00ebsht\u00eb 100% yje, ponj dhe nj\u00ebhorna. Kam parasysh se ka disa probleme q\u00eb zhvilluesi duhet t\u00eb dij\u00eb.<\/p>\n<p>Nj\u00ebra prej tyre ka t\u00eb b\u00ebj\u00eb me LSM (modulet e siguris\u00eb n\u00eb Linux), si AppArmor dhe SELinux: gjat\u00eb lan\u00e7imit t\u00eb kontejnerit, \"Docker-i i brendsh\u00ebm\" mund t\u00eb p\u00ebrpiqet t\u00eb zbatoj\u00eb profile sigurie q\u00eb do t\u00eb krijonin konflikte ose konfuzion me \"Docker-in e jasht\u00ebm\". Kjo ishte problemi m\u00eb i komplikuar q\u00eb duheshin zgjidhur kur p\u00ebrpiqeshim t\u00eb bashkonim implementimin origjinal t\u00eb flag-ut \u2013privileged. Ndryshimet e mia funksiononin, dhe t\u00eb gjitha testet do t\u00eb kalonin n\u00eb makin\u00ebn time Debian dhe n\u00eb makinat virtuale testuese t\u00eb Ubuntu, por ato do t\u00eb d\u00ebshtonin dhe digjeshin n\u00eb makin\u00ebn e Michael Crosby-t (po t\u00eb kujtohem sakt\u00eb, ai kishte Fedora). Nuk mund ta kujtoj arsyen eksakte t\u00eb problemit, por ndoshta ndodhi sepse Mike \u00ebsht\u00eb nj\u00eb njeri i men\u00e7ur, i cili punon me SELINUX=enforce (un\u00eb p\u00ebrdora AppArmor), dhe ndryshimet e mia nuk merrnin parasysh profilet e SELinux.<\/p>\n<h3>Docker-in-Docker: \"E keqe\"<\/h3>\n<p>\nProblemi i dyt\u00eb \u00ebsht\u00eb lidhur me driver\u00ebt e ruajtjes Docker. Kur ju filloni Docker-in-Docker, Docker-i jasht\u00eb punon mbi sistemin e zakonsh\u00ebm t\u00eb skedar\u00ebve (EXT4, BTRFS ose ndonj\u00eb tjet\u00ebr q\u00eb keni), nd\u00ebrsa Docker-i i brendsh\u00ebm punon mbi sistemin e kopjimit gjat\u00eb shkrimit (AUFS, BTRFS, Device Mapper etj., n\u00eb var\u00ebsi t\u00eb asaj q\u00eb \u00ebsht\u00eb konfiguruar p\u00ebr t\u00eb p\u00ebrdorur Docker-i i jasht\u00ebm). Kjo krijon nj\u00eb shum\u00ebllojshm\u00ebri kombinimesh q\u00eb nuk do t\u00eb funksionojn\u00eb. P\u00ebr shembull, nuk mund t\u00eb nisin AUFS mbi AUFS. <\/p>\n<p>N\u00ebse po p\u00ebrdorni BTRFS mbi BTRFS, fillimisht duhet t\u00eb funksionoj\u00eb, por sapo t\u00eb shfaqen n\u00ebnnd\u00ebr\u00e7arjet, nuk do t\u00eb jet\u00eb e mundur t\u00eb hiqet n\u00ebnnd\u00ebr\u00e7arja prind. Moduli Device Mapper nuk ka hap\u00ebsir\u00eb emrash, k\u00ebshtu q\u00eb, n\u00ebse disa instance Docker-i e p\u00ebrdorin at\u00eb n\u00eb nj\u00eb makin\u00eb, t\u00eb gjitha do t\u00eb mund ta shohin (dhe ndikojn\u00eb) n\u00eb imazhet e nj\u00ebra-tjetr\u00ebs dhe n\u00eb pajisjet e rezerv\u00ebs p\u00ebr konteiner\u00ebt. Kjo \u00ebsht\u00eb e keqe.<\/p>\n<p>Ka jan\u00eb disa p\u00ebrzgjidhje p\u00ebr t\u00eb zgjidhur shum\u00eb nga k\u00ebto probleme. P\u00ebr shembull, n\u00ebse d\u00ebshironi t\u00eb p\u00ebrdorni AUFS n\u00eb Dockerin tuaj t\u00eb brendsh\u00ebm, thjesht kthejeni dosjen \/var\/lib\/docker n\u00eb nj\u00eb volum dhe gjith\u00e7ka do t\u00eb shkoj\u00eb n\u00eb rregull. Docker ka shtuar disa hap\u00ebsira baz\u00eb t\u00eb emrave n\u00eb emrat e synimeve t\u00eb Mapper t\u00eb Pajisjeve, k\u00ebshtu q\u00eb n\u00ebse disa thirrje Docker kryhen n\u00eb t\u00eb nj\u00ebjt\u00ebn makin\u00eb, ato nuk do t\u00eb 'ngjiten' mbi nj\u00ebra-tjetr\u00ebn.<\/p>\n<p>Megjithat\u00eb, nj\u00eb konfigURATION e till\u00eb nuk \u00ebsht\u00eb e leht\u00eb, si\u00e7 mund t\u00eb shihet nga k\u00ebto <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/issues\/78\">artikujsh<\/a><\/noindex> n\u00eb depozit\u00ebn dind n\u00eb GitHub.<\/p>\n<h3>Docker n\u00eb Docker: b\u00ebhet edhe m\u00eb keq<\/h3>\n<p>\nE \u00e7far\u00eb me cashin e nd\u00ebrtimit? Kjo gjithashtu mund t\u00eb jet\u00eb mjaft e komplikuar. Njer\u00ebzit shpesh m\u00eb pyesin \u201cn\u00ebse po ekzekutoj Docker n\u00eb Docker, si mund t\u00eb p\u00ebrdor imazhet q\u00eb ndodhen n\u00eb hostin tim, n\u00eb vend q\u00eb t'i sjell p\u00ebrs\u00ebri t\u00eb gjitha n\u00eb Dockerin tim t\u00eb brendsh\u00ebm?\u201d<\/p>\n<p>Disa njer\u00ebz sip\u00ebrmarr\u00ebs kan\u00eb p\u00ebrpiqur t\u00eb lidhin \/var\/lib\/docker nga hosti n\u00eb konteinerin Docker n\u00eb Docker. Ndon\u00ebse, ato shpesh ndajn\u00eb \/var\/lib\/docker me disa konteiner\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Mendoni mir\u00eb para se t\u00eb p\u00ebrdorni Docker-in-Docker p\u00ebr CI ose ambientin e testimit\" src=\"\/wp-content\/uploads\/2020\/02\/192c9d26798d32078272aab1864bbccb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>D\u00ebshironi t\u00eb d\u00ebmtosh t\u00eb dh\u00ebnat? Sepse kjo \u00ebsht\u00eb pik\u00ebrisht ajo q\u00eb do t\u00eb d\u00ebmtoj\u00eb t\u00eb dh\u00ebnat tuaja!<\/i><\/p>\n<p>Docker-d\u00ebmoni duket se \u00ebsht\u00eb krijuar p\u00ebr t\u00eb pasur qasje ekskluzive n\u00eb \/var\/lib\/docker. Asgj\u00eb tjet\u00ebr nuk duhet \"t\u00eb prek\u00eb, g\u00ebrmoj\u00eb ose t\u00eb zhyti\" ndonj\u00eb skedar Docker q\u00eb ndodhet n\u00eb k\u00ebt\u00eb dosje.<\/p>\n<p>Pse \u00ebsht\u00eb k\u00ebshtu? Sepse kjo \u00ebsht\u00eb rezultat i nj\u00eb prej m\u00ebsimeve m\u00eb t\u00eb v\u00ebshtira q\u00eb kemi marr\u00eb gjat\u00eb zhvillimit t\u00eb dotCloud. Mjet i konteiner\u00ebve t\u00eb dotCloud ka punuar me disa procese q\u00eb qas\u00ebn nj\u00ebkoh\u00ebsisht n\u00eb \/var\/lib\/dotcloud. Truket e men\u00e7ura, si z\u00ebvend\u00ebsimi atomik i skedave (n\u00eb vend t\u00eb redaktimit n\u00eb vend), \"spicing\" e kodit me bllokime rekomanduese dhe t\u00eb detyrueshme e eksperimente t\u00eb tjera me sisteme t\u00eb sigurta, si SQLite dhe BDB, nuk kan\u00eb funksionuar gjithmon\u00eb. Kur ne rishkruam mjetin ton\u00eb t\u00eb konteiner\u00ebve, i cili p\u00ebrfundimisht u b\u00eb Docker, nj\u00eb nga vendimet kryesore t\u00eb dizajnit ishte t\u00eb grumbulloheshin t\u00eb gjitha operacionet me konteiner\u00ebt n\u00ebn nj\u00eb demon t\u00eb vet\u00ebm, p\u00ebr t'i dh\u00ebn\u00eb fund gjith\u00eb k\u00ebsaj marr\u00ebzie t\u00eb aksesit nj\u00ebkoh\u00ebsisht.<\/p>\n<p>Mos ku e kuptoni gabim: \u00ebsht\u00eb plot\u00ebsisht e mundur t\u00eb b\u00ebni di\u00e7ka t\u00eb mir\u00eb, t\u00eb besueshme dhe t\u00eb shpejt\u00eb, q\u00eb p\u00ebrfshin disa procese dhe menaxhim bashk\u00ebkohor paralel. Por ne mendojm\u00eb se \u00ebsht\u00eb m\u00eb e leht\u00eb dhe m\u00eb e thjesht\u00eb t\u00eb shkruani dhe mbani kodin duke p\u00ebrdorur Docker si nj\u00eb lojtar t\u00eb vet\u00ebm.<\/p>\n<p>Kjo do t\u00eb thot\u00eb se n\u00ebse ndihmoni nj\u00eb katalog \/var\/lib\/docker nd\u00ebrmjet disa instancave Docker, do t\u00eb keni probleme. Sigurisht, kjo mund t\u00eb funksionoj\u00eb, ve\u00e7an\u00ebrisht n\u00eb fazat e hershme t\u00eb testeve. 'D\u00ebgjo, Ma, mund ta nisim ubuntu me \"docker\"!' Por provo t\u00eb b\u00ebsh di\u00e7ka m\u00eb t\u00eb komplikuar, p\u00ebr shembull, t\u00eb nxjerr\u00ebsh t\u00eb nj\u00ebjtin imazh nga dy instanca t\u00eb ndryshme dhe do t\u00eb shoh\u00ebsh si digjet bota.<\/p>\n<p>Kjo do t\u00eb thot\u00eb se n\u00ebse sistemi juaj CI kryen nd\u00ebrtime dhe rind\u00ebrtime, \u00e7do her\u00eb q\u00eb rinis nj\u00eb kontejner Docker-n\u00eb-Docker rrezikoni t\u00eb shkaktoni nj\u00eb shp\u00ebrthim n\u00eb cache t\u00eb tij. Kjo nuk \u00ebsht\u00eb aspak e k\u00ebndshme!<\/p>\n<h3>Zgjidhja e problemit<\/h3>\n<p>\nLe t\u00eb heqim nj\u00eb hap mbrapa. A ju nevojitet v\u00ebrtet Docker-n\u00eb-Docker apo thjesht d\u00ebshironi t\u00eb keni mund\u00ebsin\u00eb t\u00eb nisim Docker, pra t\u00eb nd\u00ebrtoni dhe t\u00eb nisni kontejner\u00eb dhe imazhe nga sistemi juaj CI, kurse ky sistem CI vet\u00eb ndodhet brenda nj\u00eb kontejneri?<\/p>\n<p>E sigurt\u00eb q\u00eb shumic\u00ebs s\u00eb njer\u00ebzve u nevojitet versioni m\u00eb i fundit, pra ata duan q\u00eb sistemi CI, si Jenkins, t\u00eb jet\u00eb n\u00eb gjendje t\u00eb drejtoj\u00eb kontejner\u00ebt. Dhe m\u00ebnyra m\u00eb e thjesht\u00eb p\u00ebr ta b\u00ebr\u00eb k\u00ebt\u00eb \u00ebsht\u00eb t\u00eb vendosni thjesht socket-in Docker n\u00eb kontejnerin tuaj CI, duke e lidhur at\u00eb me flagun -v.<\/p>\n<p>Th\u00ebn\u00eb ndryshe, kur ekzekutoni kontejnerin tuaj CI (Jenkins ose ndonj\u00eb tjet\u00ebr), n\u00eb vend q\u00eb t\u00eb hidhni di\u00e7ka duke p\u00ebrdorur Docker-in-Docker, filloni at\u00eb me komand\u00ebn:<\/p>\n<pre><code class=\"plaintext\">docker run -v \/var\/run\/docker.sock:\/var\/run\/docker.sock ...<\/code><\/pre>\n<p>\nTani ky kontejner do t\u00eb ket\u00eb qasje n\u00eb socket-in Docker dhe, p\u00ebr pasoj\u00eb, do t\u00eb jet\u00eb n\u00eb gjendje t\u00eb drejtoj\u00eb kontejner\u00ebt. P\u00ebrve\u00e7 se, n\u00eb vend t\u00eb lan\u00e7imit t\u00eb kontejner\u00ebve 'f\u00ebmij\u00eb', ai do t\u00eb lan\u00e7oj\u00eb kontejner\u00eb 't\u00eb af\u00ebrt'.<\/p>\n<p>Provoni k\u00ebt\u00eb, duke p\u00ebrdorur imazhin zyrtar docker (i cili p\u00ebrmban skedarin binar t\u00eb 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>\nKjo duket dhe funksionon si Docker-in-Docker, por nuk \u00ebsht\u00eb Docker-in-Docker: kur ky kontejner krijon kontejner\u00eb shtes\u00eb, ata do t\u00eb krijohen n\u00eb Docker-in-suprem. Nuk do t\u00eb p\u00ebrjetoni efekte an\u00ebsore t\u00eb thell\u00ebsis\u00eb, dhe n\u00ebnd\u00ebrtesa do t\u00eb p\u00ebrdor\u00eb t\u00eb nj\u00ebjtin cache p\u00ebr disa thirrje.<\/p>\n<p>Sh\u00ebnim: versionet e m\u00ebparshme t\u00eb k\u00ebtij artikulli rekomandonin lidhjen e nj\u00eb skedari binar Docker nga hosti n\u00eb kontejner. Tani kjo \u00ebsht\u00eb b\u00ebr\u00eb e pasigurt, sepse mekanizmi Docker nuk zgjerohet m\u00eb mbi bibliotekat statike ose pothuajse statike.<\/p>\n<p>Prandaj, n\u00ebse d\u00ebshironi t\u00eb p\u00ebrdorni Docker nga Jenkins CI, keni 2 mund\u00ebsi:<br \/>\ninstalimi i Docker CLI duke p\u00ebrdorur sistemin baz\u00eb t\u00eb paketave t\u00eb imazhit (dmth, n\u00ebse imazhi juaj bazohet n\u00eb Debian, p\u00ebrdorni paketat .deb), p\u00ebrdorimi i Docker API.<\/p>\n<h3>Pak reklam\u00eb \ud83d\ude42<\/h3>\n<p>\nFaleminderit q\u00eb q\u00ebndroni me ne. Ju p\u00eblqejn\u00eb artikujt tan\u00eb? D\u00ebshironi t\u00eb shihni m\u00eb shum\u00eb materiale interesante? Na mb\u00ebshtetni duke b\u00ebr\u00eb nj\u00eb porosi ose duke na rekomanduar njohurive tuaj, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS cloud p\u00ebr zhvillues nga $4.99<\/a><\/noindex>, <b>nj\u00eb analog unik i server\u00ebve entry-level, i nd\u00ebrtuar p\u00ebr ju:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">E gjith\u00eb e v\u00ebrteta rreth VPS (KVM) E5-2697 v3 (6 Nuclea) 10GB DDR4 480GB SSD 1Gbps nga $19 ose si ta ndajm\u00eb sakt\u00ebsisht serverin?<\/a><\/noindex> (disponohen variante me RAID1 dhe RAID10, deri n\u00eb 24 b\u00ebrthama dhe deri n\u00eb 40GB DDR4).<\/p>\n<p><b>Dell R730xd dyfish m\u00eb i lir\u00eb n\u00eb qendr\u00ebn e t\u00eb dh\u00ebnave Equinix Tier IV n\u00eb Amsterdam?<\/b> Vet\u00ebm k\u00ebtu <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 nga $199<\/a><\/noindex> n\u00eb Holand\u00eb! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 nga $99!<\/b><\/b> Lexoni rreth <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Si t\u00eb nd\u00ebrtosh nj\u00eb infrastruktur\u00eb t\u00eb klas\u00ebs korporative me p\u00ebrdorimin e server\u00ebve Dell R730xd E5-2650 v4 me \u00e7mim prej 9000 euro p\u00ebr pak para?<\/a><\/noindex><br \/>\n<br \/>Burimi: <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\/sq\/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=\"sq_AL\" \/>\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\/sq\/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\udd47Mendoni mir\u00eb para se t\u00eb p\u00ebrdorni Docker-in-Docker p\u00ebr CI ose mjedisin testues | ProHoster","description":"Docker-in-Docker \u00ebsht\u00eb nj\u00eb mjedis virtualizuar Docker-demon, i cili ekzekutohet brenda vet\u00eb kontejnerit p\u00ebr nd\u00ebrtimin e imazheve t\u00eb kontejner\u00ebve. Q\u00ebllimi kryesor i krijimit t\u00eb Docker-in-Docker ishte t\u00eb ndihmoj\u00eb n\u00eb zhvillimin e Docker-it vet\u00eb. Shum\u00eb njer\u00ebz e p\u00ebrdorin at\u00eb p\u00ebr t\u00eb ekzekutuar Jenkins CI. N\u00eb fillim, duket normale, por m\u00eb pas shfaqen probleme q\u00eb mund t\u00eb shmangen duke instaluar Docker n\u00eb kontejnerin Jenkins CI. Ky artikull flet p\u00ebr k\u00ebt\u00eb.","canonical_url":"https:\/\/prohoster.info\/sq\/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":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/52071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=52071"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/52071\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/52072"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=52071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=52071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=52071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}