1 line
15 KiB
JSON
Executable File
1 line
15 KiB
JSON
Executable File
{"title":"","byline":null,"dir":null,"lang":null,"content":"<div id=\"readability-page-1\" class=\"page\"><section><h2 id=\"introduction\">Introduction</h2><p>J’ai trouvé plusieurs tutos pour installer Docker (engine) <strong>à l’intérieur</strong> d’un container LXC sous Proxmox VE pour ensuite lancer des containers Docker dedans. Le souci c’est que vous devez vous logger <strong>dans</strong> le container LXC avant de pouvoir interagir avec vos containers Docker.</p><p>On peut aussi installer Docker directement sur Proxmox VE mais ce n’est pas trop conseillé et on n’a pas la facilité d’usage de LXC avec la GUI de Proxmox.</p><p>Et en fait, il se trouve qu’on peut lancer des images Docker <strong>comme l’OS</strong> d’un container LXC et ainsi avoir des Docker pilotés par Proxmox. On aura donc pas un comportement 100% identique à si vous aviez fait un <code>docker run</code> sur votre machine.</p><p>Cependant, on gagnera un échange un container totalement identique à vos autres containers LXC de votre cluster (avec toutes les fonctions associées) mais lancé avec une image Docker.</p><p>Mais d’abord je vous propose de revenir un peu en arrière avant de vous montrer comment…</p><h2 id=\"contexte\">Contexte</h2><p>Vous le savez, je fais du Proxmox VE depuis un moment. Proxmox VE est une super distribution clé en main et production ready de virtualisation de serveurs (c’est même de l’hyperconvergé si on active la partie Ceph).</p><p>Il y a plein de petites choses que j’aime avec Proxmox VE, et l’une d’elle est qu’on peut créer des containers Linux avec LXC plutôt que des machines virtuelles QEMU. <a href=\"https://blog.zwindler.fr/2022/10/22/proxmox-tips-tricks/\">J’avais fait un article pour en parler</a>.</p><p>A l’usage (sauf paramétrage kernel spécifique) le container LXC se comporte de manière strictement identique à une VM dans Proxmox, mais pour une fraction des ressources ! On a un OS, on installe des applications dessus, comme une VM.</p><p><img loading=\"lazy\" src=\"https://blog.zwindler.fr/2022/11/nginx.png\"></p><blockquote><p>Un frontal nginx pour plusieurs applications. Le container LXC complet ne consomme que quelques Mo</p></blockquote><p>Certes c’est beaucoup moins bien isolé qu’une vraie VM (car c’est un container, on est isolé des autres processus, mais on tourne sur le kernel de l’hyperviseur directement).</p><p>Mais avec si peu de besoins en ressources, je peux héberger de nombreuses petites applications dans des contextes différents avec de très petites machines physiques (des Atom 4Go de RAM à 6€ par mois chez OneProviders) ce qui serait impossible avec une vraie VM.</p><h2 id=\"cest-bien-mais-pas-suffisant\">C’est bien, mais pas suffisant</h2><p>Cependant, LXC n’est pas la techno de containerisation la plus connue/hype. Depuis des années sur le forum, à chaque fois que des gens demande le support de Docker dans Proxmox VE, on les envoie balader. Pas toujours très gentiment d’ailleurs…</p><p>Pourtant, il y a plusieurs raisons pour avoir envie de lancer des containers Docker sur son infra Proxmox :</p><ul><li>D’abord, Docker n’est pas autant des workloads stateless et/ou éphémères qu’on le croit. Beaucoup d’applications containerisées auraient toute leur place sur un cluster de virtualisation.</li><li>Ensuite parce que beaucoup d’éditeurs de logiciels sont devenus faignants. Certains ne gèrent plus les processus d’installation (ou alors juste sur un OS) et fournissent juste une image Docker qu’ils maintiennent mise à jour.</li></ul><p>On doit donc se contenter de VMs dans Proxmox pour lancer des containers Docker (cf mon point du début).</p><h2 id=\"lxc-supporte-les-images-oci\">LXC supporte les images OCI</h2><p>Coup de théâtre. Il y a quelques jours, j’ai découvert que LXC, le moteur de containerisation de Proxmox VE, était compatible avec le format OCI.</p><ul><li><a rel=\"noopener\" href=\"https://www.buzzwrd.me/index.php/2021/03/10/creating-lxc-containers-from-docker-and-oci-images/\">buzzwrd.me - Creating LXC containers from docker and OCI images</a></li></ul><p>Pour ceux qui ne connaissent pas OCI, il s’agit d’une organisation visant à créer un standard pour unifie la façon de stocker les containers.</p><blockquote><p>The Open Container Initiative is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.\n<a rel=\"noopener\" href=\"https://opencontainers.org/\">opencontainers.org/</a></p></blockquote><p>Et Docker respecte ce format : on peut donc théoriquement lancer depuis LXC des containers dont l’image de base est une image Docker.</p><blockquote><p>Je suis profondément choqué\n(Réf “Jean François Coppé” pour ceux qui n’ont pas le mème)</p></blockquote><h2 id=\"bon-quand-est-ce-quon-commence-\">Bon, quand est-ce qu’on commence ?</h2><p>Disclaimer: ce qui suit est de la bidouille. Rien n’est supporté et je ne le conseille pas en production. Il est probable qu’il y ait aussi des limitations (notamment pour ce qui est stockage).</p><p>D’abord, il manque quelques dépendances pour que la fonction OCI de LXC soit utilisable sous Proxmox VE :</p><pre tabindex=\"0\"><code>sudo apt install skopeo umoci jq\n</code></pre><p>Ensuite, par défaut, les containers LXC s’attachent à un bridge linux qui s’appelle <code>lxcbr0</code>. Cependant ce bridge n’existe probablement pas sur votre installation de Proxmox VE (pas installé par défaut).</p><p>En <em>quick and dirty</em>, on peut juste remplacer le nom par défaut, même si idéalement il faudrait trouver le flag dans la CLI pour changer le bridge. En fonction de comment vous avez configuré le réseau dans votre serveur Proxmox VE, vous allez probablement utiliser <code>vmbr0</code> ou <code>vmbr1</code> :</p><pre tabindex=\"0\"><code>sed -i 's/lxcbr0/vmbr1/g' /etc/lxc/default.conf\n</code></pre><p>Maintenant qu’on a tout, on peut lancer nos containers LXC à partir d’images docker. Ici je lance l’image officielle <code>alpine:latest</code>, mais j’aurais pu prendre n’importe quelle autre :</p><pre tabindex=\"0\"><code>lxc-create 500 -t oci -- --url docker://alpine:latest\n</code></pre><p>J’ai créé un container appelé “500” (car les VMs et les containers LXC dans proxmox VE sont appelés avec des nombres). L’image est téléchargée puis le container créé :</p><p><img loading=\"lazy\" src=\"https://blog.zwindler.fr/2022/11/lxc_docker_pull.png\"></p><p>On peut maintenant le démarrer (avec <code>lxc-execute</code> on lance le container et ouvrir un prompt directement dedans, mais on a aussi <code>lxc-start</code> et <code>lxc-attach</code>)</p><pre tabindex=\"0\"><code>lxc-execute 500\n</code></pre><p><img loading=\"lazy\" src=\"https://blog.zwindler.fr/2022/11/alpine.png\"></p><p>Tel quel, Proxmox VE ne sait pas que notre container existe et il n’apparaitra pas dans l’UI. Mais ça fonctionne ;-).</p><h2 id=\"bonus\">Bonus</h2><p>On peut même tricher et faire croire à Proxmox que c’est un container LXC qu’il a créé lui-même en créant un fichier <code>500.conf</code>, dans le dossier <code>/etc/pve/lxc/</code></p><p>Les seules lignes obligatoires sont les suivantes :</p><ul><li>arch (amd64 sauf si vous êtes sur ARM)</li><li>cores (la limite de CPUs à imposer au container)</li><li>hostname</li><li>memory (la limite de RAM à imposer au container)</li><li>ostype</li><li>rootfs</li></ul><p><img loading=\"lazy\" src=\"https://blog.zwindler.fr/2022/11/lxc_config.png\"></p><p>Une fois le fichier créé, automatiquement le container apparait dans la liste des VMs de l’hôte. On peut le démarrer et ça fonctionne :)</p><p><img loading=\"lazy\" src=\"https://blog.zwindler.fr/2022/11/docker_lxc_running.png\"></p><p>Le container pourra être démarré, arrêté, etc. Le tout depuis la GUI de Proxmox VE :)</p><p>Have fun!</p><h2 id=\"source\">Source</h2><ul><li><a rel=\"noopener\" href=\"https://pve.proxmox.com/wiki/Linux_Container\">Proxmox VE - Linux Container</a></li><li><a rel=\"noopener\" href=\"https://thehomelab.wiki/books/promox-ve/page/setup-and-install-docker-in-a-promox-7-lxc-conainer\">Setup and Install Docker in a Promox 7 LXC Conainer</a></li><li><a rel=\"noopener\" href=\"https://www.buzzwrd.me/index.php/2021/03/10/creating-lxc-containers-from-docker-and-oci-images/\">buzzwrd.me - Creating LXC containers from docker and OCI images</a></li></ul></section></div>","textContent":"IntroductionJ’ai trouvé plusieurs tutos pour installer Docker (engine) à l’intérieur d’un container LXC sous Proxmox VE pour ensuite lancer des containers Docker dedans. Le souci c’est que vous devez vous logger dans le container LXC avant de pouvoir interagir avec vos containers Docker.On peut aussi installer Docker directement sur Proxmox VE mais ce n’est pas trop conseillé et on n’a pas la facilité d’usage de LXC avec la GUI de Proxmox.Et en fait, il se trouve qu’on peut lancer des images Docker comme l’OS d’un container LXC et ainsi avoir des Docker pilotés par Proxmox. On aura donc pas un comportement 100% identique à si vous aviez fait un docker run sur votre machine.Cependant, on gagnera un échange un container totalement identique à vos autres containers LXC de votre cluster (avec toutes les fonctions associées) mais lancé avec une image Docker.Mais d’abord je vous propose de revenir un peu en arrière avant de vous montrer comment…ContexteVous le savez, je fais du Proxmox VE depuis un moment. Proxmox VE est une super distribution clé en main et production ready de virtualisation de serveurs (c’est même de l’hyperconvergé si on active la partie Ceph).Il y a plein de petites choses que j’aime avec Proxmox VE, et l’une d’elle est qu’on peut créer des containers Linux avec LXC plutôt que des machines virtuelles QEMU. J’avais fait un article pour en parler.A l’usage (sauf paramétrage kernel spécifique) le container LXC se comporte de manière strictement identique à une VM dans Proxmox, mais pour une fraction des ressources ! On a un OS, on installe des applications dessus, comme une VM.Un frontal nginx pour plusieurs applications. Le container LXC complet ne consomme que quelques MoCertes c’est beaucoup moins bien isolé qu’une vraie VM (car c’est un container, on est isolé des autres processus, mais on tourne sur le kernel de l’hyperviseur directement).Mais avec si peu de besoins en ressources, je peux héberger de nombreuses petites applications dans des contextes différents avec de très petites machines physiques (des Atom 4Go de RAM à 6€ par mois chez OneProviders) ce qui serait impossible avec une vraie VM.C’est bien, mais pas suffisantCependant, LXC n’est pas la techno de containerisation la plus connue/hype. Depuis des années sur le forum, à chaque fois que des gens demande le support de Docker dans Proxmox VE, on les envoie balader. Pas toujours très gentiment d’ailleurs…Pourtant, il y a plusieurs raisons pour avoir envie de lancer des containers Docker sur son infra Proxmox :D’abord, Docker n’est pas autant des workloads stateless et/ou éphémères qu’on le croit. Beaucoup d’applications containerisées auraient toute leur place sur un cluster de virtualisation.Ensuite parce que beaucoup d’éditeurs de logiciels sont devenus faignants. Certains ne gèrent plus les processus d’installation (ou alors juste sur un OS) et fournissent juste une image Docker qu’ils maintiennent mise à jour.On doit donc se contenter de VMs dans Proxmox pour lancer des containers Docker (cf mon point du début).LXC supporte les images OCICoup de théâtre. Il y a quelques jours, j’ai découvert que LXC, le moteur de containerisation de Proxmox VE, était compatible avec le format OCI.buzzwrd.me - Creating LXC containers from docker and OCI imagesPour ceux qui ne connaissent pas OCI, il s’agit d’une organisation visant à créer un standard pour unifie la façon de stocker les containers.The Open Container Initiative is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.\nopencontainers.org/Et Docker respecte ce format : on peut donc théoriquement lancer depuis LXC des containers dont l’image de base est une image Docker.Je suis profondément choqué\n(Réf “Jean François Coppé” pour ceux qui n’ont pas le mème)Bon, quand est-ce qu’on commence ?Disclaimer: ce qui suit est de la bidouille. Rien n’est supporté et je ne le conseille pas en production. Il est probable qu’il y ait aussi des limitations (notamment pour ce qui est stockage).D’abord, il manque quelques dépendances pour que la fonction OCI de LXC soit utilisable sous Proxmox VE :sudo apt install skopeo umoci jq\nEnsuite, par défaut, les containers LXC s’attachent à un bridge linux qui s’appelle lxcbr0. Cependant ce bridge n’existe probablement pas sur votre installation de Proxmox VE (pas installé par défaut).En quick and dirty, on peut juste remplacer le nom par défaut, même si idéalement il faudrait trouver le flag dans la CLI pour changer le bridge. En fonction de comment vous avez configuré le réseau dans votre serveur Proxmox VE, vous allez probablement utiliser vmbr0 ou vmbr1 :sed -i 's/lxcbr0/vmbr1/g' /etc/lxc/default.conf\nMaintenant qu’on a tout, on peut lancer nos containers LXC à partir d’images docker. Ici je lance l’image officielle alpine:latest, mais j’aurais pu prendre n’importe quelle autre :lxc-create 500 -t oci -- --url docker://alpine:latest\nJ’ai créé un container appelé “500” (car les VMs et les containers LXC dans proxmox VE sont appelés avec des nombres). L’image est téléchargée puis le container créé :On peut maintenant le démarrer (avec lxc-execute on lance le container et ouvrir un prompt directement dedans, mais on a aussi lxc-start et lxc-attach)lxc-execute 500\nTel quel, Proxmox VE ne sait pas que notre container existe et il n’apparaitra pas dans l’UI. Mais ça fonctionne ;-).BonusOn peut même tricher et faire croire à Proxmox que c’est un container LXC qu’il a créé lui-même en créant un fichier 500.conf, dans le dossier /etc/pve/lxc/Les seules lignes obligatoires sont les suivantes :arch (amd64 sauf si vous êtes sur ARM)cores (la limite de CPUs à imposer au container)hostnamememory (la limite de RAM à imposer au container)ostyperootfsUne fois le fichier créé, automatiquement le container apparait dans la liste des VMs de l’hôte. On peut le démarrer et ça fonctionne :)Le container pourra être démarré, arrêté, etc. Le tout depuis la GUI de Proxmox VE :)Have fun!SourceProxmox VE - Linux ContainerSetup and Install Docker in a Promox 7 LXC Conainerbuzzwrd.me - Creating LXC containers from docker and OCI images","length":6145,"excerpt":"J’ai trouvé plusieurs tutos pour installer Docker (engine) à l’intérieur d’un container LXC sous Proxmox VE pour ensuite lancer des containers Docker dedans. Le souci c’est que vous devez vous logger dans le container LXC avant de pouvoir interagir avec vos containers Docker.","siteName":null} |