Les conteneurs Linux (LXC) sont une technologie de virtualisation légère et ils ont diverses utilisations. Il fait partie du noyau Linux et peut vous permettre d'émuler une ou plusieurs distributions Linux sur un seul hôte Linux. Considérez-le comme un compromis entre un chroot et des technologies de virtualisation complètes telles que VirtualBox, KVM ou Xen. Les technologies JBS FreeBSD sont une technologie similaire présente dans le monde BSD.
Par exemple, la machine sur laquelle j'écris est un ordinateur portable sous Linux Mint 18, alimenté par un processeur Intel Atom et disposant de 2 Go de RAM. Cependant, j'utilise trois conteneurs Linux, chacun avec une instance du serveur Web Apache en cours d'exécution, sans grande perte de performances. Cela serait impensable avec une machine virtuelle traditionnelle telle que VirtualBox. Donc, si vous vouliez exécuter plusieurs distributions sur votre système Linux, les conteneurs Linux devraient faire l'affaire pour vous.
Installation et configuration de conteneurs Linux
Nous installons LXC sur Linux Mint 18 64 bits. Les instructions d’installation fournies ici fonctionneront également sans modification sur Ubuntu 16.04 et les versions ultérieures. Si vous utilisez une autre distribution, veuillez vous reporter à la documentation officielle de votre distribution si quelque chose ne fonctionne pas comme prévu. Une familiarité avec la ligne de commande et un dépannage général sont également supposés.
Conditions préalables
Voici quelques éléments à configurer pour commencer à utiliser plusieurs distributions:
1. Installez LXC et d’autres logiciels prérequis en utilisant:
[code source] sudo apte installer lxc lxc-templates uidmap [/ code source]
2. Vous devez maintenant configurer votre profil . Entrez les commandes suivantes pour le configurer:
[code source] mkdir -p ~ / .config / lxc
echo "lxc.id_map = u 0 100000 65536" & amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.id_map = g 0 100000 65536" & amp; amp; gt; & amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.type = veth" & amp; gt; & amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.link = lxcbr0" & amp; amp; gt; & amp; amp; gt; ~ / .config / lxc / default.conf
echo "$ USER veth lxcbr0 2" | sudo tee -a / etc / lxc / lxc-usernet [/ code de source]
3. Ensuite, vous devez configurer les autorisations utilisateur comme suit:
[code source] sudo usermod –add-subuids 100000-165536 $ USER
sudo usermod –add-subgids 100000-165536 $ USER
sudo cgm crée tous les utilisateurs
sudo cgm chown tous les utilisateurs $ (id -u) $ (id -g)
cgm movepid tous les utilisateurs $$ [/ sourcecode]
Configuration de votre conteneur
Maintenant que LXC Container est installé avec d'autres logiciels prérequis, voici les étapes à suivre pour configurer le conteneur:
1. Dans cet exemple, nous allons configurer un conteneur Ubuntu, nommé ubu1
. Pour ce faire, exécutez la commande suivante:
[code source] lxc-create - modèle de téléchargement - nom ubu1 [/ code source]
2. Ici, le paramètre –template
indique à lxc de télécharger une image préconfigurée à partir d'Internet, tandis que le paramètre –name
spécifie le nom du conteneur - ubu1
dans ce cas. Vous pouvez utiliser le nom de votre choix.
3. Vous verrez maintenant une liste des images de distribution prises en charge :
4. Entrez les détails de la distribution que vous souhaitez installer. Je vais installer la version 64 bits d'Ubuntu 16.04 (nom de code xenial) ici:
5. Si vous souhaitez installer l'image de manière non interactive, la commande suivante permet d'obtenir le même résultat.
[code source] lxc-create -t télécharger -n ubu1 - –dist ubuntu –release xenial –arch amd64 [/ code source]
6. LXC va maintenant télécharger et installer une image xenial Ubuntu minimale sur votre système hôte. Le téléchargement et l'installation peuvent prendre un peu de temps en fonction de votre connexion Internet et de la vitesse de votre PC. Après l'installation, vous verrez un écran comme celui-ci:
Vous êtes maintenant prêt à utiliser votre conteneur Ubuntu nouvellement configuré.
Utilisation de plusieurs Distros avec des conteneurs Linux
Démarrer le conteneur
Démarrez votre conteneur en utilisant la commande lxc-start
:
[code source] lxc-start -n ubu1 -d [/ code_source]
Ici, le paramètre -n
spécifie le nom du conteneur que vous souhaitez démarrer ( ubu1
dans ce cas) et le paramètre -d
fait fonctionner en arrière-plan .
Vous pouvez vérifier que le conteneur a démarré à l'aide de la commande lxc-ls
:
[code source] lxc-ls -f [/ code_source]
Le paramètre -f
active les rapports de fantaisie . Ici, vous pouvez voir que j'ai deux conteneurs - un Debian (arrêté) et un Ubuntu (en cours d'exécution).
Accéder à et utiliser votre conteneur
Vous pouvez accéder à la console du conteneur à l' aide de la commande lxc-attach
:
[code source] lxc-attach -n ubu1 [/ code_source]
Vous allez maintenant avoir un shell root sur votre conteneur. Il est recommandé de définir un mot de passe pour l'utilisateur root et de créer un compte d'utilisateur normal :
[code source] passwd
adduser beebom [/ sourcecode]
Bien sûr, remplacez beebom par le nom d'utilisateur que vous souhaitez. Vous pouvez ensuite installer un logiciel et configurer votre conteneur comme vous le feriez sur un système standard. Par exemple, dans un conteneur Debian ou Ubuntu:
[code source] apte à installer wget openssh-server htop tmux nano iptables [/ code_source]
Arrêter votre conteneur
Une fois que vous avez fini de jouer avec le conteneur, utilisez la commande exit
pour revenir au système hôte . Maintenant, utilisez la commande lxc-stop
pour arrêter votre conteneur :
[code source] lxc-stop -n ubu1 [/ code source]
Cela fermera proprement le conteneur et ne consommera plus de ressources sur votre système, sauf de l'espace disque.
Clonage et instantanés
Clones
Une fois que vous avez installé les programmes dans un conteneur et que vous l'avez configuré à votre guise, vous pouvez en créer une ou plusieurs copies pour faciliter le provisionnement. Vous pouvez le faire en créant un clone, qui est une réplique exacte d'un conteneur.
Par exemple, pour créer un clone du conteneur ubu1
(appelons-le ubu2
), arrêtez-le d'abord à l' aide de lxc-stop
, puis utilisez la commande lxc-copy
:
[code source] lxc-stop -n ubu
lxc-copy -n ubu1 -N ubu2 [/ code de source]
Ici, l' option -n spécifie le conteneur source et l' option -N spécifie le nom du clone . Pour vérifier que le conteneur a été cloné, utilisez la commande lxc-ls
:
Instantanés
Supposons que vous êtes sur le point d'effectuer des modifications potentiellement dangereuses ou difficiles à récupérer à partir d'un conteneur, telles que la reconfiguration d'un serveur Web. Pour minimiser les dommages, vous pouvez créer un instantané du conteneur avant de procéder à une telle modification. En cas de problème lors de la configuration, vous pouvez simplement arrêter le conteneur et le restaurer à son état de fonctionnement précédent en restaurant un instantané.
Pour créer l'instantané, arrêtez d' abord le conteneur :
[code source] lxc-stop -n ubu1 [/ code source]
Ensuite, créez un instantané à l'aide de la commande lxc-snapshot
:
[code source] lxc-snapshot -n ubu1 [/ code_source]
Cela crée un instantané appelé snap0
. Les instantanés suivants que vous créez à l'aide de cette commande seront appelés snap1, snap2, etc.
Après cela, vous pouvez démarrer le conteneur et apporter les modifications souhaitées. Si, à un moment quelconque, vous souhaitez revenir à un instantané que vous avez créé, arrêtez le conteneur et utilisez la commande lxc-snapshot
avec le paramètre -r
pour restaurer un instantané :
[code source] lxc-snapshot -r snap0 -n ubu1 [/ code_source]
Cela restaurera l'instantané snap0
dans le conteneur ubu1
.
Démarrage automatique des conteneurs au démarrage
Vous pouvez faire en sorte qu'un conteneur, par exemple un conteneur de serveur Web, démarre automatiquement lorsque vous démarrez votre système. Pour ce faire, accédez au fichier de configuration du conteneur, situé dans $HOME/.local/share/lxc//config
, puis ajoutez les lignes suivantes :
[code source] lxc.start.auto = 1
lxc.start.delay = 5 [/ code source]
La première ligne spécifie que le conteneur doit être démarré au démarrage. La seconde indique au système d' attendre 5 secondes avant de démarrer le conteneur suivant, le cas échéant.
Dépannage
Si vous rencontrez des problèmes pour démarrer les conteneurs, la première chose à faire est d’exécuter la commande lxc-start
en mode lxc-start
plan . Par exemple:
[code source] lxc-start -n ubu1 -F [/ code_source]
Cela vous montrera les erreurs sur la console actuelle, ce qui est très utile pour identifier la nature du problème.
Problèmes liés à l'exécution simultanée de plusieurs conteneurs
Si vous essayez d'exécuter plusieurs conteneurs à la fois, des erreurs telles que «Quota atteint» ou «Impossible de créer le réseau configuré» peuvent s'afficher. En effet, vous exécutez plus d'interfaces réseau que celles qui vous sont attribuées. Vous pouvez augmenter le nombre de ponts réseau qu'un utilisateur peut exécuter en modifiant le fichier /etc/lxc/lxc-usernet
en tant que root . Cela pourrait ressembler à quelque chose comme ça:
[code source] # COMPTE DE PONT TYPE DE NOM D'UTILISATEUR
beebom veth lxcbr0 5 [/ code source]
Vous pouvez modifier le nombre à la fin (5 dans cet exemple), en un nombre plus important tel que 10. Cela vous permettra d'exécuter jusqu'à 10 conteneurs à la fois.
Autres utilisations des conteneurs Linux
Les conteneurs Linux ont diverses utilisations. Vous pouvez les utiliser comme boîtes de test légères, par exemple, pour tester diverses configurations d'un serveur Web ou d'un serveur de base de données avant de les valider sur un serveur de production. Un autre cas d'utilisation consiste à tester le fonctionnement d'une application sur différentes versions de différentes distributions.
Vous pouvez également les utiliser pour isoler des applications auxquelles vous ne faites pas confiance - les dommages causés par une telle application seront limités à son propre conteneur et n'affecteront pas le système hôte. Veuillez noter que s'il est possible d'exécuter des applications graphiques dans un conteneur, cela prend beaucoup de temps et d'effort, et n'est donc pas recommandé. Si vous souhaitez exécuter des applications graphiques dans un bac à sable, reportez-vous à notre article sur la procédure d'application des bacs à sable sous Linux.
Exécuter plusieurs Distros simultanément avec des conteneurs Linux
Ainsi se termine notre guide sur l’exécution de plusieurs distributions Linux sur un seul ordinateur, sans les frais généraux d’une machine virtuelle de taille normale. L’utilité de cette technologie n’est limitée que par votre créativité, alors n'hésitez pas à expérimenter et à découvrir de nouveaux cas d'utilisation. Si vous rencontrez des difficultés lors de la configuration des conteneurs, n'hésitez pas à nous poser une question dans la section commentaires.