{"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\/fr\/blog\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy","title":{"rendered":"R\u00e9fl\u00e9chissez bien avant d'utiliser Docker-in-Docker pour l'int\u00e9gration continue ou l'environnement de test","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"R\u00e9fl\u00e9chissez bien avant d&#039;utiliser Docker-in-Docker pour l&#039;int\u00e9gration continue ou l&#039;environnement de test\" src=\"\/wp-content\/uploads\/2020\/02\/50b03664f1984b36e1703717dfaa7ecc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDocker-in-Docker est un environnement virtualis\u00e9 du d\u00e9mon Docker, ex\u00e9cut\u00e9 \u00e0 l'int\u00e9rieur d'un conteneur pour cr\u00e9er des images de conteneur. L'objectif principal de la cr\u00e9ation de Docker-in-Docker \u00e9tait d'aider au d\u00e9veloppement de Docker lui-m\u00eame. Beaucoup de gens l'utilisent pour ex\u00e9cuter Jenkins CI. Au d\u00e9part, cela semble normal, mais des probl\u00e8mes surviennent, que l'on peut \u00e9viter en installant Docker dans le conteneur Jenkins CI. Cet article explique comment faire cela. Si vous \u00eates int\u00e9ress\u00e9 par la solution finale sans d\u00e9tails, lisez simplement la derni\u00e8re section de l'article intitul\u00e9e \u00ab R\u00e9solution du probl\u00e8me \u00bb.<\/p>\n<p><img decoding=\"async\" alt=\"R\u00e9fl\u00e9chissez bien avant d&#039;utiliser Docker-in-Docker pour l&#039;int\u00e9gration continue ou l&#039;environnement de test\" 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 : \u00ab Bon \u00bb<\/h3>\n<p>\nIl y a plus de deux ans, j'ai ins\u00e9r\u00e9 Docker <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moby\/moby\/commit\/280901e5fbd0c2dabd14d7a9b69a073f6e8f87e4\">drapeau<\/a><\/noindex> \u2013privileged et j'ai \u00e9crit <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/commit\/bfbe19c0eec634f66c9f8bac53c6b7c7e0fdb063\">la premi\u00e8re version de dind<\/a><\/noindex>. L'objectif \u00e9tait d'aider l'\u00e9quipe principale \u00e0 d\u00e9velopper Docker plus rapidement. Avant l'av\u00e8nement de Docker-in-Docker, le cycle de d\u00e9veloppement typique \u00e9tait le suivant :<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>construction (build);<\/li>\n<li>arr\u00eat du d\u00e9mon Docker en cours d'ex\u00e9cution;<\/li>\n<li>lancement d'un nouveau d\u00e9mon Docker;<\/li>\n<li>test;<\/li>\n<li>r\u00e9p\u00e9ter le cycle.<\/li>\n<\/ul>\n<p>\nCependant, si vous vouliez faire une construction propre et reproductible (c'est-\u00e0-dire dans un conteneur), cela devenait plus complexe :<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>s'assurer qu'une version op\u00e9rationnelle de Docker est en cours d'ex\u00e9cution;<\/li>\n<li>construire un nouveau Docker avec l'ancien Docker;<\/li>\n<li>arr\u00eater le d\u00e9mon Docker;<\/li>\n<li>lancer un nouveau d\u00e9mon Docker;<\/li>\n<li>tester;<\/li>\n<li>arr\u00eater le nouveau d\u00e9mon Docker;<\/li>\n<li>r\u00e9p\u00e9ter.<\/li>\n<\/ul>\n<p>\nAvec l'arriv\u00e9e de Docker-in-Docker, le processus s'est simplifi\u00e9 :<\/p>\n<ul>\n<li>hackity hack;<\/li>\n<li>construction + lancement en une \u00e9tape;<\/li>\n<li>r\u00e9p\u00e9ter le cycle.<\/li>\n<\/ul>\n<p>\nN'est-il pas vrai que c'est beaucoup mieux ?<\/p>\n<p><img decoding=\"async\" alt=\"R\u00e9fl\u00e9chissez bien avant d&#039;utiliser Docker-in-Docker pour l&#039;int\u00e9gration continue ou l&#039;environnement de test\" src=\"\/wp-content\/uploads\/2020\/02\/b4870536068c660a8d996ec53f079504.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Docker-in-Docker : \u00ab Mauvais \u00bb<\/h3>\n<p>\nCependant, contrairement \u00e0 la croyance populaire, Docker-in-Docker n'est pas compos\u00e9 \u00e0 100% d'\u00e9toiles, de poneys et de licornes. Je veux dire qu'il y a plusieurs probl\u00e8mes dont le d\u00e9veloppeur doit \u00eatre conscient.<\/p>\n<p>L'une d'elles concerne LSM (modules de s\u00e9curit\u00e9 Linux), tels qu'AppArmor et SELinux : lors du lancement d'un conteneur, le \u00ab Docker interne \u00bb peut tenter d'appliquer des profils de s\u00e9curit\u00e9 qui entreront en conflit ou troubleront le \u00ab Docker externe \u00bb. C'est le probl\u00e8me le plus complexe \u00e0 r\u00e9soudre lors de la tentative de combiner la mise en \u0153uvre d'origine du drapeau \u2013privileged. Mes modifications fonctionnaient, et tous les tests auraient \u00e9galement r\u00e9ussi sur ma machine Debian et mes machines virtuelles de test Ubuntu, mais elles se seraient effondr\u00e9es sur la machine de Michael Crosby (si je me souviens bien, il avait Fedora). Je ne peux pas me souvenir de la cause exacte du probl\u00e8me, mais il est possible qu'il soit survenu parce que Mike est un homme sage qui fonctionne avec SELINUX=enforce (j'ai utilis\u00e9 AppArmor), et mes modifications ne prenaient pas en compte les profils SELinux.<\/p>\n<h3>Docker-in-Docker : le \u00ab mal\u00e9fique \u00bb<\/h3>\n<p>\nLe deuxi\u00e8me probl\u00e8me est li\u00e9 aux pilotes de stockage Docker. Lorsque vous ex\u00e9cutez Docker-in-Docker, le Docker externe fonctionne au-dessus d'un syst\u00e8me de fichiers traditionnel (EXT4, BTRFS ou tout autre que vous avez), tandis que le Docker interne fonctionne sur un syst\u00e8me de copy-on-write (AUFS, BTRFS, Device Mapper, etc., selon ce que le Docker externe est configur\u00e9 pour utiliser). Cela entra\u00eene de nombreuses combinaisons qui ne fonctionneront pas. Par exemple, vous ne pourrez pas ex\u00e9cuter AUFS au-dessus d'AUFS. <\/p>\n<p>Si vous ex\u00e9cutez BTRFS au-dessus de BTRFS, cela devrait d'abord fonctionner, mais une fois que des sous-volumes imbriqu\u00e9s apparaissent, il ne sera pas possible de supprimer le sous-volume parent. Le module Device Mapper n'a pas d'espace de noms, donc si plusieurs instances de Docker l'utilisent sur une m\u00eame machine, elles pourront toutes voir (et influencer) les images les unes des autres et les dispositifs de sauvegarde des conteneurs. C'est probl\u00e9matique.<\/p>\n<p>Il existe des solutions pour contourner bon nombre de ces probl\u00e8mes. Par exemple, si vous souhaitez utiliser AUFS dans Docker interne, il suffit de transformer le dossier \/var\/lib\/docker en volume, et tout ira bien. Docker a ajout\u00e9 certains espaces de noms de base aux cibles de Device Mapper, de sorte que si plusieurs appels Docker sont effectu\u00e9s sur une m\u00eame machine, ils ne se \u00ab marcheront \u00bb pas sur les pieds.<\/p>\n<p>Cependant, une telle configuration n'est pas simple, comme vous pouvez le voir dans ces <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jpetazzo\/dind\/issues\/78\">articles<\/a><\/noindex> dans le d\u00e9p\u00f4t dind sur GitHub.<\/p>\n<h3>Docker-in-Docker : \u00e7a devient encore pire<\/h3>\n<p>\nEt qu'en est-il du cache de construction ? Cela peut \u00eatre assez compliqu\u00e9. Les gens me demandent souvent \u00ab si je lance Docker-in-Docker, comment puis-je utiliser les images situ\u00e9es sur mon h\u00f4te, plut\u00f4t que de tout ret\u00e9l\u00e9charger dans mon Docker interne ? \u00bb<\/p>\n<p>Certaines personnes entreprenantes ont tent\u00e9 de lier \/var\/lib\/docker de l'h\u00f4te dans le conteneur Docker-in-Docker. Parfois, elles partagent \/var\/lib\/docker entre plusieurs conteneurs.<\/p>\n<p><img decoding=\"async\" alt=\"R\u00e9fl\u00e9chissez bien avant d&#039;utiliser Docker-in-Docker pour l&#039;int\u00e9gration continue ou l&#039;environnement de test\" src=\"\/wp-content\/uploads\/2020\/02\/192c9d26798d32078272aab1864bbccb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Voulez-vous corrompre des donn\u00e9es ? Parce que c'est exactement ce qui nuira \u00e0 vos donn\u00e9es !<\/i><\/p>\n<p>Le d\u00e9mon Docker a clairement \u00e9t\u00e9 con\u00e7u pour avoir un acc\u00e8s exclusif \u00e0 \/var\/lib\/docker. Rien d'autre ne devrait \u00ab toucher, pok\u00e9er ou tripoter \u00bb les fichiers Docker se trouvant dans ce dossier.<\/p>\n<p>Pourquoi est-ce le cas ? Parce que c'est le r\u00e9sultat de l'une des le\u00e7ons les plus difficiles apprises lors du d\u00e9veloppement de dotCloud. Le moteur de conteneurs dotCloud fonctionnait avec plusieurs processus acc\u00e9dant simultan\u00e9ment \u00e0 \/var\/lib\/dotcloud. Des astuces comme le remplacement atomique de fichiers (au lieu de l'\u00e9dition sur place), le \u00ab peppering \u00bb de code avec des verrous recommand\u00e9s et obligatoires, ainsi que d'autres exp\u00e9riences avec des syst\u00e8mes s\u00fbrs comme SQLite et BDB, ne fonctionnaient pas toujours. Lorsque nous avons refait notre moteur de conteneurs, qui est finalement devenu Docker, l'un des principaux choix de conception a \u00e9t\u00e9 de regrouper toutes les op\u00e9rations de conteneurs sous un seul d\u00e9mon, afin de mettre fin \u00e0 toute cette absurdit\u00e9 d'acc\u00e8s simultan\u00e9.<\/p>\n<p>Ne vous m\u00e9prenez pas : il est tout \u00e0 fait possible de faire quelque chose de bon, fiable et rapide, impliquant plusieurs processus et une gestion moderne du parall\u00e9lisme. Mais nous pensons qu'il est plus simple et plus facile d'\u00e9crire et de maintenir du code en utilisant Docker comme seul acteur.<\/p>\n<p>Cela signifie que si vous partagez le r\u00e9pertoire \/var\/lib\/docker entre plusieurs instances de Docker, vous rencontrerez des probl\u00e8mes. Bien s\u00fbr, cela peut fonctionner, en particulier aux premiers stades des tests. \u00ab \u00c9coute, Ma, je peux faire tourner ubuntu avec \u2018docker\u2019 ! \u00bb Mais essayez de faire quelque chose de plus complexe, comme tirer la m\u00eame image de deux instances diff\u00e9rentes, et vous verrez le monde s'embraser.<\/p>\n<p>Cela signifie que si votre syst\u00e8me CI effectue des constructions et des reconstructions, chaque fois que vous red\u00e9marrez le conteneur Docker-in-Docker, vous risquez de r\u00e9initialiser une bombe \u00e0 retardement dans son cache. Ce n'est pas g\u00e9nial du tout !<\/p>\n<h3>R\u00e9soudre le probl\u00e8me<\/h3>\n<p>\nFaisons un pas en arri\u00e8re. Avez-vous vraiment besoin de Docker-in-Docker ou voulez-vous simplement pouvoir ex\u00e9cuter Docker, c'est-\u00e0-dire construire et ex\u00e9cuter des conteneurs et des images depuis votre syst\u00e8me CI, pendant que ce syst\u00e8me CI se trouve dans un conteneur ?<\/p>\n<p>Je parie que la plupart des gens ont besoin de la derni\u00e8re option, c'est-\u00e0-dire qu'ils veulent que le syst\u00e8me CI, tel que Jenkins, puisse ex\u00e9cuter des conteneurs. Et le moyen le plus simple de le faire est d'ins\u00e9rer simplement le socket Docker dans votre conteneur CI, en le liant avec l'option -v.<\/p>\n<p>En d'autres termes, lorsque vous d\u00e9marrez votre conteneur CI (Jenkins ou autre), au lieu de bricoler quelque chose avec Docker-in-Docker, commencez-le avec la ligne:<\/p>\n<pre><code class=\"plaintext\">docker run -v \/var\/run\/docker.sock:\/var\/run\/docker.sock ...<\/code><\/pre>\n<p>\nMaintenant, ce conteneur aura acc\u00e8s au socket Docker et pourra donc ex\u00e9cuter des conteneurs. Sauf que, au lieu de lancer des conteneurs \"enfants\", il lancera des conteneurs \"fraternels\".<\/p>\n<p>Essayez cela en utilisant l'image officielle docker (qui contient le fichier binaire 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>\nCela ressemble et fonctionne comme Docker-in-Docker, mais ce n'est pas Docker-in-Docker : lorsque ce conteneur cr\u00e9era des conteneurs suppl\u00e9mentaires, ils seront cr\u00e9\u00e9s dans Docker de niveau sup\u00e9rieur. Vous n'aurez pas d'effets secondaires li\u00e9s \u00e0 l'imbrication, et le cache de construction sera partag\u00e9 entre plusieurs appels.<\/p>\n<p>Remarque : les versions pr\u00e9c\u00e9dentes de cet article conseillaient de lier le fichier binaire Docker de l'h\u00f4te au conteneur. Cela est d\u00e9sormais devenu peu fiable, car le m\u00e9canisme Docker ne s'applique plus aux biblioth\u00e8ques statiques ou presque statiques.<\/p>\n<p>Ainsi, si vous souhaitez utiliser Docker depuis Jenkins CI, vous avez 2 options :<br \/>\ninstaller Docker CLI en utilisant le syst\u00e8me de base de paquets d'image (c'est-\u00e0-dire si votre image est bas\u00e9e sur Debian, utilisez les paquets .deb), utiliser l'API Docker.<\/p>\n<h3>Un peu de publicit\u00e9 \ud83d\ude42<\/h3>\n<p>\nMerci de rester avec nous. Aimez-vous nos articles ? Voulez-vous voir plus de contenu int\u00e9ressant ? Soutenez-nous en passants une commande ou en nous recommandant \u00e0 des amis, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS cloud pour d\u00e9veloppeurs \u00e0 partir de 4,99 $<\/a><\/noindex>, <b>un \u00e9quivalent unique des serveurs d'entr\u00e9e de gamme, con\u00e7u pour vous :<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Toute la v\u00e9rit\u00e9 sur le VPS (KVM) E5-2697 v3 (6 c\u0153urs) 10 Go DDR4 480 Go SSD 1 Gbps \u00e0 partir de 19 $ ou comment bien diviser un serveur ?<\/a><\/noindex> (options disponibles avec RAID1 et RAID10, jusqu'\u00e0 24 c\u0153urs et jusqu'\u00e0 40 Go DDR4).<\/p>\n<p><b>Dell R730xd deux fois moins cher dans le data center Equinix Tier IV \u00e0 Amsterdam ?<\/b> Uniquement chez nous <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64Go DDR4 4x960Go SSD 1Gbps 100 To \u00e0 partir de 199 $<\/a><\/noindex> aux Pays-Bas ! <b>Dell R420 \u2014 2x E5-2430 2.2GHz 6C 128Go DDR3 2x960Go SSD 1Gbps 100To \u2014 \u00e0 partir de 99 $ !<\/b><\/b> Lisez sur <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Comment construire une infrastructure de classe entreprise avec des serveurs Dell R730xd E5-2650 v4 co\u00fbtant 9000 euros pour des clopinettes ?<\/a><\/noindex><br \/>\n<br \/>Source : <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.2 - 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\/fr\/blog\/horosho-podumajte-prezhde-chem-ispolzovat-docker-in-docker-dlya-ci-ili-testovoj-sredy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47R\u00e9fl\u00e9chissez bien avant d'utiliser Docker-in-Docker pour CI ou un environnement de test | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/fr\/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":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/52071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=52071"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/52071\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/52072"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=52071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=52071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=52071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}