Les conteneurs LXC sont un moyen très rapide de créer un pseudo-environnement virtuel.
Dans l'article précédent sur LXC, nous avons expliqué comment installer et configurer les conteneurs Linux LXC.
Dans ce didacticiel, nous expliquerons comment créer un nouveau conteneur Linux, démarrer le conteneur et se connecter à la console virtuelle LXC pour utiliser le nouveau conteneur.
À des fins de démonstration, nous allons créer un conteneur virtuel CentOS LXC dans ce didacticiel, mais vous pouvez créer un conteneur virtuel pour pratiquement toutes les distributions Linux de votre choix.
1. Modèles de conteneur LXC
Conteneurs Linux LXC fournit par défaut des modèles de conteneurs pour plusieurs distributions Linux populaires. Voici quelques-uns des modèles LXC que vous pouvez utiliser immédiatement.
- CentOS
- Ubuntu
- Fédora
- OuvrirSUSE
- Gentoo
- Debian
- Oracle Linux
- ArchLinux
Tous les modèles LXC disponibles se trouvent dans le répertoire /usr/local/share/lxc/templates.
# ls -1 /usr/local/share/lxc/templates lxc-alpine lxc-altlinux lxc-archlinux lxc-busybox lxc-centos lxc-cirros lxc-debian lxc-download lxc-fedora lxc-gentoo lxc-openmandriva lxc-opensuse lxc-oracle lxc-plamo lxc-sshd lxc-ubuntu lxc-ubuntu-cloud
2. Créer un conteneur à l'aide de lxc-create
Pour créer le conteneur, utilisez la commande lxc-create comme indiqué ci-dessous.
Dans la commande suivante :
- –n option indique le nom du conteneur L'option
- –t indique le modèle utilisé pour créer le conteneur. Dans cet exemple, nous utilisons le modèle lxc-centos pour créer un conteneur CentOS.
Dans cet exemple, cela créera le conteneur CentOS avec une installation minimale de centos.
Cela téléchargera tous les packages nécessaires à l'exécution de CentOS minimal (par exemple, environ 140 packages environ) et les installera dans le cadre du conteneur MyCentOSContainer1
# lxc-create -n MyCentOSContainer1 -t /usr/local/share/lxc/templates/lxc-centos /usr/local/share/lxc/templates/lxc-centos Host CPE ID from /etc/system-release-cpe: cpe:/o:centos:linux:6:GA dnsdomainname: Unknown host Checking cache download in /usr/local/var/cache/lxc/centos/x86_64/6/rootfs ... Downloading centos minimal ... ... ... Installing : libgcc-4.4.7-16.el6.x86_64 1/142 Installing : setup-2.8.14-20.el6_4.1.noarch 2/142 Installing : filesystem-2.4.30-3.el6.x86_64 3/142 ... Verifying : gzip-1.3.12-22.el6.x86_64 139/142 Verifying : mingetty-1.08-5.el6.x86_64 140/142 Verifying : libxml2-2.7.6-20.el6_7.1.x86_64 141/142 Verifying : 1:findutils-4.4.2-6.el6.x86_64 142/142 ... Download complete. Copy /usr/local/var/cache/lxc/centos/x86_64/6/rootfs to /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs ... Copying rootfs to /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs ...
3. Mot de passe racine pour le conteneur LXC
Le mot de passe root du conteneur LXC est stocké sous :/usr/local/var/lib/lxc/{container-name}/tmp_root_pass
Ainsi, dans l'exemple ci-dessus, pour le conteneur LXC que nous venons de créer, le mot de passe root temporaire est sous ce qui suit :
# cat /usr/local/var/lib/lxc/MyCentOSContainer1/tmp_root_pass Root-MyCentOSContainer1-pf7qMB
Vous pouvez modifier le mot de passe root de votre conteneur à tout moment, même si votre conteneur est désactivé en utilisant chroot depuis l'hôte de contrôle, comme indiqué ci-dessous.
# chroot /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully.
4. Démarrez le conteneur Linux LXC à l'aide de lxc-start
Une fois le conteneur créé, utilisez lxc-start comme indiqué ci-dessous pour démarrer votre conteneur.
# lxc-start -n MyCentOSContainer1 lxc-start: cgfs.c: handle_cgroup_settings: 2077 Device or resource busy - failed to set memory.use_hierarchy to 1; continuing CentOS release 6.6 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 MyCentOSContainer1 login: init: rcS main process (8) killed by TERM signal Entering non-interactive startup Bringing up loopback interface: [ OK ] Bringing up interface eth0: Determining IP information for eth0... done. [ OK ] Starting system logger: [ OK ] Mounting filesystems: [ OK ] Generating SSH2 RSA host key: [ OK ] Generating SSH1 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ] CentOS release 6.6 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 MyCentOSContainer1 login:
Si vous obtenez le message d'erreur suivant "le conteneur n'a pas pu démarrer", c'est qu'il y a un problème dans votre configuration.
# lxc-start -n MyCentOSContainer1 lxc-start: lxc_start.c: main: 344 The container failed to start. lxc-start: lxc_start.c: main: 346 To get more details, run the container in foreground mode. lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.
Pour savoir exactement ce qui ne va pas avec votre configuration, exécutez le conteneur LXC au premier plan en utilisant l'option -F comme indiqué ci-dessous.
Si vous obtenez le message d'erreur suivant, "Échec de la connexion au pont", "Échec de la création de netdev", "Échec de la création du réseau", l'adaptateur de pont n'est pas configuré correctement sur votre système.
Vérifiez les paramètres ifcfg-br0 que nous avons mentionnés dans notre précédent article sur la configuration du conteneur Linux LXC, pour vous assurer que la configuration du pont est correctement configurée et fonctionne.
# lxc-start -F -n MyCentOSContainer1 lxc-start: conf.c: instantiate_veth: 2796 failed to attach 'veth8VPW29' to the bridge 'lxcbr0': Operation not permitted lxc-start: conf.c: lxc_create_network: 3079 failed to create netdev lxc-start: start.c: lxc_spawn: 935 failed to create the network lxc-start: start.c: __lxc_start: 1192 failed to spawn 'MyCentOSContainer1' lxc-start: lxc_start.c: main: 344 The container failed to start. lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.
5. Afficher les informations sur le conteneur à l'aide de lxc-info
Pour afficher des informations détaillées sur votre conteneur, utilisez la commande lxc-info comme indiqué ci-dessous.
# lxc-info -n MyCentOSContainer1 Name: MyCentOSContainer1 State: RUNNING PID: 7696 IP: 192.168.100.101 CPU use: 1.61 seconds BlkIO use: 32.00 KiB Memory use: 2.63 MiB Link: vethLNI1UH TX bytes: 1.98 KiB RX bytes: 46.08 KiB Total bytes: 48.06 KiB
6. Arrêtez le conteneur Linux LXC à l'aide de lxc-stop
Pour arrêter votre conteneur Linux LXC, utilisez lxc-stop comme indiqué ci-dessous et spécifiez le nom du conteneur que vous souhaitez arrêter.
# lxc-stop -n MyCentOSContainer1
7. Cloner un conteneur existant à l'aide de lxc-clone
Le clonage est utile lorsque vous souhaitez prendre un instantané de l'ancien conteneur avant d'apporter des modifications à la configuration du conteneur. Vous pouvez l'utiliser comme méthode de sauvegarde simple pour la configuration du conteneur.
Le clonage du conteneur peut être effectué à l'aide de la commande lxc-clone comme indiqué ci-dessous. Dans ce cas, le nouveau nom du conteneur est MyCentOSContainer2
# lxc-clone -o MyCentOSContainer1 -n MyCentOSContainer2 Created container MyCentOSContainer2 as copy of MyCentOSContainer1
8. Supprimer un conteneur existant à l'aide de lxc-destory
Pour supprimer un conteneur existant, utilisez la commande lxc-destroy comme indiqué ci-dessous.
# lxc-destroy -n MyCentOSContainer2
9. Connectez-vous à la console de conteneur Linux LXC
Pour vous connecter à la console du conteneur, utilisez la commande lxc-console suivante.
# lxc-console -n MyCentOSContainer1 Connected to tty 1 Type Ctrl+a q to exit the console, Ctrl+a Ctrl+a to enter Ctrl+a itself CentOS release 6.6 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 MyCentOSContainer1 login:
10. Modifier les configurations LXC à l'aide de lxc-config
Pour modifier la configuration de LXC, vous pouvez utiliser la commande lxc-config.
Tout d'abord, utilisez l'option lxc-config -l, qui affichera simplement toutes les configurations disponibles comme indiqué ci-dessous.
# lxc-config -l lxc.default_config lxc.lxcpath lxc.bdev.lvm.vg lxc.bdev.lvm.thin_pool lxc.bdev.zfs.root lxc.cgroup.use lxc.cgroup.pattern
Ensuite, utilisez l'option lxc.default_config comme indiqué ci-dessous pour afficher les informations sur chaque fichier de configuration et ses paramètres associés.
# lxc-config lxc.default_config /usr/local/etc/lxc/default.conf # cat /usr/local/etc/lxc/default.conf lxc.network.type = veth lxc.network.link = virbr0 lxc.network.flags = up
La commande suivante affichera le patch LXC où tous les conteneurs sont stockés.
# lxc-config lxc.lxcpath /usr/local/var/lib/lxc
Comme nous le voyons ci-dessous, nous voyons les deux conteneurs que nous avons créés sous ce répertoire.
# cd /usr/local/var/lib/lxc # ls MyCentOSContainer1 MyCentOSContainer2
Sous le répertoire du conteneur, vous verrez le fichier de configuration, qui contient toutes les informations de configuration de base pour ce conteneur particulier, comme indiqué ci-dessous.
# cd /usr/local/var/lib/lxc/MyCentOSContainer1 # vi config lxc.network.type = veth lxc.network.link = virbr0 lxc.network.hwaddr = fb:bb:f2:87:e8:17 lxc.network.flags = up lxc.rootfs = /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs lxc.include = /usr/local/share/lxc/config/centos.common.conf lxc.arch = x86_64 lxc.utsname = MyCentOSContainer1