{"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\/hu\/blog\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy","title":{"rendered":"J\u00f3l gondold meg, miel\u0151tt Docker-in-Docker-t haszn\u00e1ln\u00e1l CI vagy teszt\u00e1l\u00f3 k\u00f6rnyezetben","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"J\u00f3l gondold meg, miel\u0151tt Docker-in-Docker-t haszn\u00e1ln\u00e1l CI vagy teszt\u00e1l\u00f3 k\u00f6rnyezetben\" src=\"\/wp-content\/uploads\/2020\/02\/50b03664f1984b36e1703717dfaa7ecc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA Docker-in-Docker egy virtu\u00e1lis Docker-k\u00f6rnyezet, amely a Docker-\u00e1larcban fut, amelyet az \u00e9rvek kont\u00e9ner\u00e9be \u00e9p\u00edtenek a kont\u00e9nerk\u00e9pek \u00e9p\u00edt\u00e9s\u00e9hez. A Docker-in-Docker l\u00e9trehoz\u00e1s\u00e1nak f\u0151 c\u00e9lja a Docker fejleszt\u00e9s\u00e9nek el\u0151seg\u00edt\u00e9se volt. Sokan haszn\u00e1lj\u00e1k a Jenkins CI ind\u00edt\u00e1s\u00e1hoz. Eleinte j\u00f3nak t\u0171nik, de probl\u00e9m\u00e1k mer\u00fclnek fel, amelyek elker\u00fclhet\u0151k, ha a Dockert k\u00f6zvetlen\u00fcl a Jenkins CI kont\u00e9ner\u00e9ben telep\u00edtj\u00fck. Ebben a cikkben bemutatjuk, hogyan kell ezt megtenni. Ha \u00e9rdeklik az eredm\u00e9ny n\u00e9lk\u00fcli r\u00e9szletek, csak olvassa el a cikk v\u00e9gs\u0151 szakasz\u00e1t a 'Probl\u00e9ma megold\u00e1sa' c\u00edmmel.<\/p>\n<p><img decoding=\"async\" alt=\"J\u00f3l gondold meg, miel\u0151tt Docker-in-Docker-t haszn\u00e1ln\u00e1l CI vagy teszt\u00e1l\u00f3 k\u00f6rnyezetben\" 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: \"J\u00f3\"<\/h3>\n<p>\nT\u00f6bb mint k\u00e9t \u00e9vvel ezel\u0151tt csatlakoztam a Dockerhez <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moby\/moby\/commit\/280901e5fbd0c2dabd14d7a9b69a073f6e8f87e4\">a flagot<\/a><\/noindex> \u2013privileged kulcshoz \u00e9s \u00edrtam <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/commit\/bfbe19c0eec634f66c9f8bac53c6b7c7e0fdb063\">az els\u0151 dind verzi\u00f3t.<\/a><\/noindex>A c\u00e9l az volt, hogy seg\u00edtsem a f\u0151csapatot a Docker gyorsabb fejleszt\u00e9s\u00e9ben. A Docker-in-Docker megjelen\u00e9s\u00e9ig a tipikus fejleszt\u00e9si ciklus a k\u00f6vetkez\u0151k\u00e9ppen zajlott:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>\u00e9p\u00edt\u00e9s (build);<\/li>\n<li>le\u00e1ll\u00edtani a fut\u00f3 Docker-\u00e1t;<\/li>\n<li>\u00faj Docker-\u00e1t ind\u00edtani;<\/li>\n<li>tesztel\u00e9s;<\/li>\n<li>k\u00f6r \u00fajraind\u00edt\u00e1sa.<\/li>\n<\/ul>\n<p>\nHa pedig sz\u00e9p, reproduk\u00e1lhat\u00f3 \u00e9p\u00edt\u00e9st akart\u00e1l (azaz kont\u00e9nerben), akkor ez bonyolultabb lett:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>meg kell bizonyosodni, hogy m\u0171k\u00f6d\u0151 Docker-verzi\u00f3 fut;<\/li>\n<li>\u00faj Dockert a r\u00e9gi Dockerb\u0151l \u00e9p\u00edteni;<\/li>\n<li>le\u00e1ll\u00edtani a Docker-\u00e1t;<\/li>\n<li>\u00faj Docker-\u00e1t ind\u00edtani;<\/li>\n<li>tesztelni;<\/li>\n<li>le\u00e1ll\u00edtani az \u00faj Docker-\u00e1t;<\/li>\n<li>ism\u00e9telni.<\/li>\n<\/ul>\n<p>\nA Docker-in-Docker megjelen\u00e9s\u00e9vel a folyamat egyszer\u0171s\u00f6d\u00f6tt:<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>\u00e9p\u00edt\u00e9s + ind\u00edt\u00e1s egy l\u00e9p\u00e9sben;<\/li>\n<li>k\u00f6r \u00fajraind\u00edt\u00e1sa.<\/li>\n<\/ul>\n<p>\nNem igaz, hogy \u00edgy sokkal jobb?<\/p>\n<p><img decoding=\"async\" alt=\"J\u00f3l gondold meg, miel\u0151tt Docker-in-Docker-t haszn\u00e1ln\u00e1l CI vagy teszt\u00e1l\u00f3 k\u00f6rnyezetben\" src=\"\/wp-content\/uploads\/2020\/02\/b4870536068c660a8d996ec53f079504.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Docker-in-Docker: \"Rossz\"<\/h3>\n<p>\nAzonban, ellent\u00e9tben a k\u00f6ztudatban elterjedt meggy\u0151z\u0151d\u00e9ssel, a Docker-in-Docker nem csak csillagokb\u00f3l, p\u00f3nikb\u00f3l \u00e9s egyszarv\u00fakb\u00f3l \u00e1ll. \u00dagy \u00e9rtem, vannak olyan probl\u00e9m\u00e1k, amelyeket a fejleszt\u0151knek tudniuk kell.<\/p>\n<p>Az egyik a LSM-mel (Linux biztons\u00e1gi modulok), mint p\u00e9ld\u00e1ul az AppArmor \u00e9s az SELinux kapcsolatos: amikor elind\u00edt egy kont\u00e9nert, a \u201ebels\u0151 Docker\u201d megpr\u00f3b\u00e1lhatja alkalmazni a biztons\u00e1gi profilt, ami ellentmond\u00e1sos vagy zavarba ejt\u0151 lehet a \u201ek\u00fcls\u0151 Docker\u201d sz\u00e1m\u00e1ra. Ez a legbonyolultabb probl\u00e9ma, amit meg kellett oldani, amikor megpr\u00f3b\u00e1ltam egyes\u00edteni a -privileged z\u00e1szl\u00f3 eredeti megval\u00f3s\u00edt\u00e1s\u00e1t. A v\u00e1ltoztat\u00e1saim m\u0171k\u00f6dtek, \u00e9s minden teszt is sikeres lett az \u00e9n Debian g\u00e9pemen \u00e9s az Ubuntu teszt virtu\u00e1lis g\u00e9peken, de Michael Crosby g\u00e9p\u00e9n \u00f6sszeomlottak (amennyire eml\u00e9kszem, neki Fedora-ja volt). Nem tudom pontosan a probl\u00e9ma ok\u00e1t, de lehet, hogy az\u00e9rt mer\u00fclt fel, mert Mike egy okos ember, aki SELINUX=enforce haszn\u00e1l (\u00e9n AppArmor-t haszn\u00e1ltam), \u00e9s a v\u00e1ltoztat\u00e1saim nem vett\u00e9k figyelembe az SELinux profilokat.<\/p>\n<h3>Docker-in-Docker: \u201eGonosz\u201d<\/h3>\n<p>\nA m\u00e1sodik probl\u00e9ma a Docker t\u00e1rol\u00f3meghajt\u00f3ival kapcsolatos. Amikor elind\u00edt egy Docker-in-Docker-t, a k\u00fcls\u0151 Docker a hagyom\u00e1nyos f\u00e1jlrendszer (EXT4, BTRFS vagy b\u00e1rmely m\u00e1s, amit haszn\u00e1l) felett m\u0171k\u00f6dik, m\u00edg a bels\u0151 Docker \u00edr\u00e1skor m\u00e1sol\u00f3 rendszer (AUFS, BTRFS, Device Mapper stb., att\u00f3l f\u00fcgg\u0151en, hogy mi van be\u00e1ll\u00edtva a k\u00fcls\u0151 Docker haszn\u00e1lat\u00e1ra) felett m\u0171k\u00f6dik. Ez sok kombin\u00e1ci\u00f3t okoz, amelyek nem fognak m\u0171k\u00f6dni. P\u00e9ld\u00e1ul nem tudja AUFS-t ind\u00edtani AUFS felett. <\/p>\n<p>Ha BTRFS-t ind\u00edt BTRFS felett, el\u0151sz\u00f6r m\u0171k\u00f6dnie kell, de amint l\u00e9trej\u00f6nnek a be\u00e1gyazott alfejezetek, a sz\u00fcl\u0151 alfejezet sz\u00fcntet\u00e9se nem lesz lehets\u00e9ges. A Device Mapper modulnak nincs n\u00e9vt\u00e9r, ez\u00e9rt ha t\u00f6bb Docker p\u00e9ld\u00e1ny haszn\u00e1lja azt egy g\u00e9pen, mindegyik l\u00e1tja (\u00e9s hat\u00e1ssal van) a m\u00e1sik k\u00e9peire \u00e9s a kont\u00e9nerek biztons\u00e1gi ment\u00e9si eszk\u00f6zeire. Ez \u00f6rd\u00f6gi.<\/p>\n<p>Sz\u00e1mos megold\u00e1s l\u00e9tezik sok ilyen probl\u00e9ma kezel\u00e9s\u00e9re. P\u00e9ld\u00e1ul, ha AUFS-t szeretne haszn\u00e1lni a bels\u0151 Dockerben, egyszer\u0171en alak\u00edtsa \u00e1t a \/var\/lib\/docker mapp\u00e1t volume-v\u00e1, \u00e9s minden rendben lesz. A Docker n\u00e9h\u00e1ny alap n\u00e9vteret hozz\u00e1adott a Device Mapper c\u00e9lnev\u00e9hez, \u00edgy ha t\u00f6bb Docker h\u00edv\u00e1st v\u00e9geznek egy g\u00e9pen, nem fognak egym\u00e1sra \u201el\u00e9pni\u201d.<\/p>\n<p>Ezeken a be\u00e1ll\u00edt\u00e1sokon val\u00f3 \u00e1tb\u00faj\u00e1s nem egyszer\u0171, ahogy ez is l\u00e1tni lehet a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/issues\/78\">cikk\u00fcnkben<\/a><\/noindex> dind GitHub t\u00e1rol\u00f3j\u00e1ban.<\/p>\n<h3>Docker-in-Docker: m\u00e9g rosszabbra fordul<\/h3>\n<p>\nMi a helyzet a build cache-sel? Ez is el\u00e9g bonyolult lehet. Az emberek gyakran megk\u00e9rdezik t\u0151lem: \u201eha Docker-in-Docker-t futtatok, hogyan tudom haszn\u00e1lni a gazdag\u00e9pen tal\u00e1lhat\u00f3 k\u00e9peket, ahelyett, hogy mindent \u00fajra let\u00f6lten\u00e9k a bels\u0151 Dockeremhez?\u201d<\/p>\n<p>N\u00e9h\u00e1ny tal\u00e1l\u00e9kony ember megpr\u00f3b\u00e1lta \u00f6sszekapcsolni a \/var\/lib\/docker-t a gazdag\u00e9pr\u0151l a Docker-in-Docker kont\u00e9nerrel. N\u00e9ha megosztj\u00e1k a \/var\/lib\/docker-t t\u00f6bb kont\u00e9ner k\u00f6z\u00f6tt.<\/p>\n<p><img decoding=\"async\" alt=\"J\u00f3l gondold meg, miel\u0151tt Docker-in-Docker-t haszn\u00e1ln\u00e1l CI vagy teszt\u00e1l\u00f3 k\u00f6rnyezetben\" src=\"\/wp-content\/uploads\/2020\/02\/192c9d26798d32078272aab1864bbccb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Szeretn\u00e9d megs\u00e9rteni az adatokat? Mert ez pontosan az, ami t\u00f6nkreteszi az adataidat!<\/i><\/p>\n<p>A Docker d\u00e9mon egy\u00e9rtelm\u0171en az\u00e9rt k\u00e9sz\u00fclt, hogy kiz\u00e1r\u00f3lagos hozz\u00e1f\u00e9r\u00e9se legyen a \/var\/lib\/docker-hez. Semmi m\u00e1s nem \u00e9rheti, piszk\u00e1lhatja vagy \u00e9rintheti meg a Docker f\u00e1jlokat ebben a mapp\u00e1ban.<\/p>\n<p>Mi\u00e9rt van ez \u00edgy? Mert ez az egyik legnehezebb tanuls\u00e1ga a dotCloud fejleszt\u00e9s\u00e9nek. A dotCloud kont\u00e9nermotorja \u00fagy m\u0171k\u00f6d\u00f6tt, hogy t\u00f6bb folyamat egyszerre pr\u00f3b\u00e1lta el\u00e9rni a \/var\/lib\/dotcloud-ot. Az olyan okos tr\u00fckk\u00f6k, mint a f\u00e1jlok atomikus cser\u00e9je (ahelyett, hogy helyben szerkeszten\u00e9nk), a k\u00f3d \u201epepecsel\u00e9se\u201d aj\u00e1nlott \u00e9s k\u00f6telez\u0151 z\u00e1rol\u00e1sokkal \u00e9s m\u00e1s k\u00eds\u00e9rletekkel biztons\u00e1gos rendszerekkel, mint az SQLite \u00e9s a BDB, nem mindig m\u0171k\u00f6dtek. Amikor \u00e1ttervezt\u00fck a kont\u00e9nermotorunkat, amely v\u00e9g\u00fcl Dockerr\u00e9 v\u00e1lt, az egyik legfontosabb tervez\u00e9si d\u00f6nt\u00e9s az volt, hogy minden kont\u00e9nerrel kapcsolatos m\u0171veletet egyetlen d\u00e9mon al\u00e1 vonjunk, hogy v\u00e9get vess\u00fcnk ennek a p\u00e1rhuzamos hozz\u00e1f\u00e9r\u00e9snek.<\/p>\n<p>Ne \u00e9rts f\u00e9lre: lehets\u00e9ges valami j\u00f3t, megb\u00edzhat\u00f3t \u00e9s gyorsat csin\u00e1lni, ami p\u00e1rhuzamosan kezeli a t\u00f6bb folyamatot. De \u00fagy gondoljuk, hogy egyszer\u0171bb \u00e9s k\u00f6nnyebb k\u00f3dot \u00edrni \u00e9s karbantartani, ha a Dockert egyed\u00fcli szerepl\u0151k\u00e9nt haszn\u00e1ljuk.<\/p>\n<p>Ez azt jelenti, hogy ha megosztod a \/var\/lib\/docker k\u00f6nyvt\u00e1rat t\u00f6bb Docker p\u00e9ld\u00e1ny k\u00f6z\u00f6tt, probl\u00e9m\u00e1id fognak ad\u00f3dni. Persze m\u0171k\u00f6dhet, k\u00fcl\u00f6n\u00f6sen a tesztel\u00e9s korai szakasz\u00e1ban. \u201eFigyelj, anya, el tudom ind\u00edtani az ubuntu-t a dockeren!\u201d De pr\u00f3b\u00e1lj meg valami bonyolultat csin\u00e1lni, p\u00e9ld\u00e1ul ugyanazt a k\u00e9pet leh\u00fazni k\u00e9t k\u00fcl\u00f6nb\u00f6z\u0151 p\u00e9ld\u00e1nyb\u00f3l, \u00e9s megl\u00e1tod, hogyan \u00e9g el a vil\u00e1g.<\/p>\n<p>Ez azt jelenti, hogy ha a CI rendszered \u00e9p\u00edtkez\u00e9seket \u00e9s \u00fajb\u00f3li \u00e9p\u00edtkez\u00e9seket v\u00e9gez, akkor minden alkalommal, amikor \u00fajraind\u00edtod a Docker-in-Docker kont\u00e9nert, kock\u00e1zatot v\u00e1llalsz, hogy egy nukle\u00e1ris bomb\u00e1t dobj\u00e1l a cache-\u00e9be. Ez biztosan nem men\u0151!<\/p>\n<h3>A probl\u00e9ma megold\u00e1sa<\/h3>\n<p>\nN\u00e9zz\u00fck egy l\u00e9p\u00e9st h\u00e1tra. Val\u00f3ban sz\u00fcks\u00e9ged van Docker-in-Docker-re, vagy csak azt szeretn\u00e9d, hogy lehet\u0151s\u00e9ged legyen Docker-t futtatni, nevezetesen kont\u00e9nerek \u00e9s k\u00e9pek buildel\u00e9s\u00e9re \u00e9s futtat\u00e1s\u00e1ra a CI rendszeredb\u0151l, mik\u00f6zben maga a CI rendszer egy kont\u00e9nerben van?<\/p>\n<p>Megbeteszem, hogy a legt\u00f6bb embernek az ut\u00f3bbi verzi\u00f3ra van sz\u00fcks\u00e9ge, ami azt jelenti, hogy szeretn\u00e9k, ha egy CI rendszer, mint p\u00e9ld\u00e1ul a Jenkins, k\u00e9pes lenne kont\u00e9nereket futtatni. \u00c9s a legegyszer\u0171bb m\u00f3dja ennek az, hogy egyszer\u0171en csatlakoztatod a Docker socketet a CI kont\u00e9neredhez, a -v flaggel.<\/p>\n<p>Egyszer\u0171bben fogalmazva, amikor futtatod a CI kont\u00e9nered (Jenkins vagy m\u00e1s), ahelyett, hogy valami hackel\u00e9sbe kezden\u00e9l a Docker-in-Docker-rel, ind\u00edtsd el a k\u00f6vetkez\u0151 sorral:<\/p>\n<pre><code class=\"plaintext\">docker run -v \/var\/run\/docker.sock:\/var\/run\/docker.sock ...<\/code><\/pre>\n<p>\nMost ez a kont\u00e9ner hozz\u00e1f\u00e9r a Docker sockethez, \u00e9s ez\u00e1ltal k\u00e9pes lesz kont\u00e9nereket futtatni. Csak annyit, hogy a \"gyermek\" kont\u00e9nerek helyett \"rokon\" kont\u00e9nereket fog futtatni.<\/p>\n<p>Pr\u00f3b\u00e1ld ki ezt az hivatalos docker k\u00e9ppel (ami tartalmaz egy Docker bin\u00e1ris f\u00e1jlt):<\/p>\n<pre><code class=\"plaintext\">docker run -v \/var\/run\/docker.sock:\/var\/run\/docker.sock \n           -ti docker<\/code><\/pre>\n<p>\nEz \u00fagy n\u00e9z ki \u00e9s m\u0171k\u00f6dik, mint a Docker-in-Docker, de nem az: amikor ez a kont\u00e9ner tov\u00e1bbi kont\u00e9nereket \u00e9p\u00edt, azok a fels\u0151 szint\u0171 Dockerben j\u00f6nnek l\u00e9tre. Nem tapasztalsz majd a be\u00e1gyazotts\u00e1g mell\u00e9khat\u00e1sait, \u00e9s a build cache k\u00f6z\u00f6sen lesz haszn\u00e1lva t\u00f6bb h\u00edv\u00e1s eset\u00e9n.<\/p>\n<p>Megjegyz\u00e9s: A cikk kor\u00e1bbi verzi\u00f3i azt tan\u00e1csolt\u00e1k, hogy a Docker bin\u00e1ris f\u00e1jlt a hostb\u00f3l a kont\u00e9nerbe k\u00f6sd. Ez most m\u00e1r megb\u00edzhatatlann\u00e1 v\u00e1lt, mivel a Docker mechanizmus m\u00e1r nem terjed ki statikus vagy szinte statikus k\u00f6nyvt\u00e1rakra.<\/p>\n<p>Teh\u00e1t, ha Docker-t szeretn\u00e9l haszn\u00e1lni a Jenkins CI-b\u0151l, k\u00e9t lehet\u0151s\u00e9ged van:<br \/>\nDocker CLI telep\u00edt\u00e9se a base image csomagol\u00e1si rendszer\u00e9vel (azaz, ha az image-d Debian alap\u00fa, akkor .deb csomagokat haszn\u00e1lj), Docker API haszn\u00e1lata.<\/p>\n<h3>Egy kis rekl\u00e1m \ud83d\ude42<\/h3>\n<p>\nK\u00f6sz\u00f6nj\u00fck, hogy vel\u00fcnk maradt\u00e1l. Tetszenek a cikkeink? Szeretn\u00e9l t\u00f6bb \u00e9rdekes anyagot l\u00e1tni? T\u00e1mogass minket, \u00e9s rendel\u00e9s lead\u00e1s\u00e1val vagy ismer\u0151s\u00f6knek aj\u00e1nl\u00e1ssal seg\u00edts nek\u00fcnk. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">Felh\u0151alap\u00fa VPS fejleszt\u0151knek 4,99 doll\u00e1rt\u00f3l<\/a><\/noindex>, <b>Egyed\u00fcl\u00e1ll\u00f3 alternat\u00edv\u00e1ja az entry-level szervereknek, amelyet \u00d6nnek tal\u00e1ltunk ki:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Minden igazs\u00e1g a VPS (KVM) E5-2697 v3 (6 mag) 10GB DDR4 480GB SSD 1Gbps \u00e1ron 19 doll\u00e1rt\u00f3l, vagy hogyan oszd fel helyesen a szervert?<\/a><\/noindex> (el\u00e9rhet\u0151k RAID1 \u00e9s RAID10 opci\u00f3k, ak\u00e1r 24 magig \u00e9s 40GB DDR4-ig).<\/p>\n<p><b>Dell R730xd k\u00e9tszer olcs\u00f3bban a Tier IV Equinix adatk\u00f6zpontban Amszterdamban?<\/b> Csak n\u00e1lunk <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 199 doll\u00e1rt\u00f3l<\/a><\/noindex> Hollandi\u00e1ban! <b>Dell R420 \u2014 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 99 doll\u00e1rt\u00f3l!<\/b><\/b> Olvasd el ezt <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Hogyan \u00e9p\u00edts\u00fcnk v\u00e1llalati szint\u0171 infrastrukt\u00far\u00e1t Dell R730xd E5-2650 v4 szerverekkel, amelyek k\u00f6lts\u00e9ge 9000 eur\u00f3ban van megszabva?<\/a><\/noindex><br \/>\n<br \/>Forr\u00e1s: <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.3 - 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\/hu\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47J\u00f3l gondold meg, miel\u0151tt Docker-in-Docker-t haszn\u00e1lsz CI vagy tesztk\u00f6rnyezetben | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/hu\/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":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/52071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=52071"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/52071\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/52072"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=52071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=52071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=52071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}