Publié le : 20/10/2024
Cas pratique : Utilisation de Docker dans un conteneur LXC sous Proxmox (template Ubuntu) et création de templates réutilisables

1. Introduction
L’utilisation de Docker dans un conteneur LXC sous Proxmox combine la puissance de l’orchestration de conteneurs avec la légèreté des conteneurs système. C’est particulièrement utile pour les administrateurs système qui souhaitent créer des environnements de développement ou de production reproductibles. De plus, la conversion d’un conteneur en template facilite le déploiement rapide de nouveaux environnements pour différents projets.
Dans cet article, nous verrons comment configurer un conteneur LXC avec Docker, le convertir en template et le cloner pour une réutilisation efficace. Nous utiliserons un template Ubuntu et le package docker-ce pour l’installation de Docker.
2. Configuration initiale d’un conteneur LXC dans Proxmox
Étapes de création d’un conteneur LXC sous Proxmox
- Accéder à l’interface Web de Proxmox.
- Connectez-vous à votre instance Proxmox via le navigateur Web.
- Cliquez sur votre nœud dans la barre latérale gauche (par exemple,
pve
).
- Créer un nouveau conteneur LXC.
- Cliquez sur Create CT dans la barre d’outils en haut de l’interface.
- Dans l’onglet General :
- CT ID : Donnez un ID unique à votre conteneur (par exemple,
101
). - Hostname : Donnez un nom au conteneur (par exemple,
docker-lxc
). - Unprivileged Container : Décocher cette case.
- Pourquoi ? Docker nécessite des privilèges pour accéder à certains sous-systèmes du noyau, comme les cgroups et le réseau. Un conteneur non privilégié restreint ces accès, rendant difficile ou impossible l’exécution de Docker.
- CT ID : Donnez un ID unique à votre conteneur (par exemple,
- Configuration du template.
- Dans l’onglet Template, sélectionnez Ubuntu. Un template comme ubuntu-22.04-standard est une excellente option pour la compatibilité avec Docker.
- Configurer les ressources :
- CPU et mémoire : Assurez-vous d’attribuer suffisamment de CPU et de RAM à votre conteneur, car Docker a besoin de ressources pour exécuter les conteneurs.
- Disque : Attribuez suffisamment d’espace disque pour gérer les images Docker, en fonction de vos besoins.
- Nesting (option essentiel pour Docker) :
- Une fois le conteneur créé, allez dans les Options du conteneur LXC.
- Localisez l’option Features (caractéristiques) et cochez Nesting.
- Pourquoi ? L’activation du nesting permet aux conteneurs LXC d’exécuter d’autres conteneurs à l’intérieur. Docker dépend de cette fonctionnalité pour gérer ses propres cgroups dans un conteneur LXC.
- Réseau :
- Dans l’onglet Network, assurez-vous que votre conteneur dispose d’une bonne configuration réseau (par défaut, Bridge mode fonctionne bien). Si vous avez besoin d’exposer des ports spécifiques pour Docker, assurez-vous que ces ports sont disponibles et accessibles.
- Cliquez sur Finish pour finaliser la création de votre conteneur LXC.
3. Installation de Docker dans le conteneur LXC (Ubuntu)
Préparation du conteneur Ubuntu pour Docker
- Démarrer le conteneur LXC :
- Une fois le conteneur créé, démarrez-le depuis l’interface Proxmox ou via la ligne de commande
pct start <CT ID>
- Accéder au conteneur :
- Vous pouvez entrer dans le conteneur via la console de Proxmox ou en utilisant la commande
pct enter <CT ID>
- Mettez à jour les paquets pour s’assurer que tout est à jour
sudo apt update && sudo apt upgrade -y
- Installer les dépendances nécessaires pour Docker : Docker a besoin de certains paquets pour fonctionner correctement. Installez-les avec la commande suivante
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
Ajout des dépôts Docker
- Ajouter la clé GPG officielle de Docker : Ceci permet de valider que les paquets téléchargés depuis le dépôt Docker sont authentiques.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- Ajouter le dépôt Docker pour Ubuntu : Ajoutez le dépôt Docker à votre liste de sources de paquets. Comme vous utilisez Ubuntu, Docker supporte officiellement cette distribution :
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Installation de Docker CE
- Mettre à jour la liste des dépôts pour inclure le nouveau dépôt Docker
sudo apt update
- Installer Docker CE (Community Edition) : Installez Docker et ses composants :
sudo apt install docker-ce docker-ce-cli containerd.io -y
- Vérifier l’installation : Pour vérifier que Docker fonctionne correctement, lancez le conteneur de test ci-dessous. Vous devriez voir un message confirmant que Docker fonctionne correctement dans votre conteneur LXC.
sudo docker run hello-world
4. Conversion du conteneur LXC en template sous Proxmox
Pourquoi convertir un conteneur en template ?
Une fois Docker configuré dans un conteneur LXC, le convertir en template permet de le réutiliser facilement pour différents projets. Chaque fois que vous avez besoin d’un environnement Docker, vous pouvez simplement cloner ce template au lieu de répéter l’installation de Docker à partir de zéro.
Étapes de conversion d’un conteneur en template
- Arrêter le conteneur avant la conversion
pct stop <CT ID>
- Convertir en template via l’interface Proxmox :
- Dans le menu de gauche, sous votre nœud, trouvez le conteneur que vous venez de créer.
- Clic droit sur le conteneur LXC.
- Sélectionnez Convert to Template.
- Votre conteneur est maintenant un template, visible avec une icône différente dans la liste des conteneurs.
5. Clonage et réutilisation du template Docker
Création d’un nouveau conteneur à partir du template
- Cloner le template :
- Clic droit sur le template Docker que vous venez de créer.
- Sélectionnez Clone.
- Choisissez un nouvel ID et un Hostname pour le nouveau conteneur.
- Sélectionnez l’option Full Clone (ce qui crée une copie complète et indépendante du template).
- Configurer les ressources pour le nouveau conteneur cloné (CPU, RAM, disque) en fonction des besoins spécifiques du projet.
- Démarrer le conteneur cloné via l’interface Proxmox ou en ligne de commande :
pct start <CT ID>
6. Transfert et déploiement d’un projet Docker existant dans un conteneur LXC
Méthodes pour transférer des fichiers Docker
- Transfert via SCP : Transférez votre projet Docker existant vers le conteneur LXC avec
scp
:
scp -r /path/to/your/project/ user@ip_address_of_lxc:/path/in/container/
- Utilisation de Rsync : Pour un transfert plus fiable et rapide :
rsync -avz /path/to/your/project/ user@ip_address_of_lxc:/path/in/container/
Transfert des images et volumes Docker
- Exporter les images Docker depuis une autre machine :
docker save -o my_project_image.tar my_image_name scp my_project_image.tar user@ip_address_of_lxc:/path/in/container/
- Importer les images Docker dans le conteneur LXC :
docker load -i my_project_image.tar
- Transférer les volumes Docker si nécessaire : Exportez les volumes et restaurez-les dans le conteneur LXC.
Exécution du projet Docker
Une fois votre projet Docker transféré dans le conteneur LXC, vous pouvez démarrer vos conteneurs en utilisant docker-compose
ou directement avec les commandes Docker standard.
7. Optimisation et bonnes pratiques
- Nettoyage des templates :
- Supprimez les journaux et fichiers temporaires pour rendre le template plus léger
rm -rf /var/log/*
rm ~/.bash_history
- Gestion des ressources dans Proxmox : Ajustez les paramètres CPU, RAM et disque lors du clonage pour que chaque conteneur ait les ressources adéquates.
Avec ce guide, vous avez appris à configurer un environnement Docker à l’intérieur d’un conteneur LXC Ubuntu sous Proxmox, à le convertir en template, puis à le cloner pour d’autres projets. Cela vous permet de déployer des environnements Docker en quelques minutes, tout en conservant une configuration standard et optimisée.
La gestion des templates sous Proxmox est un atout majeur pour automatiser et normaliser vos infrastructures, tout en économisant du temps et des efforts.
Ce guide vous permet de combiner la flexibilité et la légèreté des conteneurs LXC avec la puissance de Docker, tout en exploitant les templates Proxmox pour accélérer le déploiement d’environnements de développement et de production.