
Les conteneurs Linux (LXC) sont une méthode de virtualisation légère au niveau du système d'exploitation qui nous permet d'exécuter plusieurs systèmes Linux isolés (conteneurs) sur un seul hôte. LXC ne fournit pas toutes les fonctionnalités des logiciels de virtualisation standard tels que VMware, VirtualBox et KVM, mais fournit plutôt un environnement virtuel qui possède son propre processeur, sa mémoire, ses blocs d'E/S et son réseau. LXC crée un environnement Linux aussi proche qu'une installation Linux standard mais sans avoir besoin d'un noyau séparé.
LXC est un logiciel gratuit, et il est publié sous licence GNU LGPLv2.1+. Le projet LXC est sponsorisé par Canonical Ltd qui est à l'origine du système d'exploitation Ubuntu.
Dans ce guide, je vais vous montrer comment installer LXC, et comment créer et gérer LXC en utilisant la ligne de commande ainsi qu'en utilisant le portail Web LXC .
Prérequis
LXC n'est pas disponible sur le référentiel Base. Nous devons donc ajouter le référentiel EPEL au serveur à l'aide de la commande suivante.
# yum -y install epel-release
Les conteneurs LXC utilisent un pont réseau pour avoir accès à/depuis un réseau externe, avant de démarrer le conteneur, nous devons créer un pont réseau sur CentOS 7 / RHEL 7 . Le nom du pont réseau doit être "virbr0"
Installer LXC sur CentOS 7
Une fois que vous avez terminé les prérequis, il est temps d'installer LXC. Installez le LXC et les autres packages importants nécessaires au bon fonctionnement des conteneurs.
# yum -y install lxc lxc-templates libcap-devel libcgroup busybox wget bridge-utils lxc-extra
Exécutez la commande suivante pour vérifier que tout va bien pour exécuter des conteneurs.
# lxc-checkconfig Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-3.10.0-327.el7.x86_64 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled Bridges: enabled Advanced netfilter: enabled CONFIG_NF_NAT_IPV4: enabled CONFIG_NF_NAT_IPV6: enabled CONFIG_IP_NF_TARGET_MASQUERADE: enabled CONFIG_IP6_NF_TARGET_MASQUERADE: enabled CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled --- Checkpoint/Restore --- checkpoint restore: enabled CONFIG_FHANDLE: enabled CONFIG_EVENTFD: enabled CONFIG_EPOLL: enabled CONFIG_UNIX_DIAG: enabled CONFIG_INET_DIAG: enabled CONFIG_PACKET_DIAG: enabled CONFIG_NETLINK_DIAG: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
Créer des conteneurs Linux
LXC est livré avec des modèles prêts à l'emploi pour une installation facile des conteneurs, et vous pouvez répertorier les modèles disponibles à l'aide de la commande suivante.
# ls /usr/share/lxc/templates/ lxc-alpine lxc-archlinux lxc-centos lxc-debian lxc-fedora lxc-openmandriva lxc-oracle lxc-sshd lxc-ubuntu-cloud lxc-altlinux lxc-busybox lxc-cirros lxc-download lxc-gentoo lxc-opensuse lxc-plamo lxc-ubuntu
Pour créer un conteneur, lancez la commande suivante.
# lxc-create -n centos_lxc -t centos
Où,
-n
-t
Une fois que vous avez émis la commande ci-dessus, LXC commencera à créer le conteneur avec le nom "centos_lxc ".
Exemple de résultat :
Host CPE ID from /etc/os-release: cpe:/o:centos:centos:7 Checking cache download in /var/cache/lxc/centos/x86_64/7/rootfs ... Downloading centos minimal ... Loaded plugins: fastestmirror base | 3.6 kB 00:00:00 updates | 3.4 kB 00:00:00 Determining fastest mirrors . . . . Complete! Download complete. Copy /var/cache/lxc/centos/x86_64/7/rootfs to /var/lib/lxc/centos_lxc/rootfs ... Copying rootfs to /var/lib/lxc/centos_lxc/rootfs ... sed: can't read /var/lib/lxc/centos_lxc/rootfs/etc/init/tty.conf: No such file or directory Storing root password in '/var/lib/lxc/centos_lxc/tmp_root_pass' Expiring password for user root. passwd: Successsed: can't read /var/lib/lxc/centos_lxc/rootfs/etc/rc.sysinit: No such file or directory sed: can't read /var/lib/lxc/centos_lxc/rootfs/etc/rc.d/rc.sysinit: No such file or directory Container rootfs and config have been created. Edit the config file to check/enable networking setup. The temporary root password is stored in: '/var/lib/lxc/centos_lxc/tmp_root_pass' The root password is set up as expired and will require it to be changed at first login, which you should do as soon as possible. If you lose the root password or wish to change it without starting the container, you can change it from the host by running the following command (which will also reset the expired flag): chroot /var/lib/lxc/centos_lxc/rootfs passwd
Veuillez noter les informations de connexion ci-dessus, et vous devez exiger ces informations pour vous connecter aux conteneurs.
Identifiants des conteneurs
Pour vous connecter au conteneur (centos_lxc ), soit utiliser le mot de passe racine temporaire stocké à l'emplacement suivant. Dans notre cas, "Root-centos_lxc-KRzJLy ” est le mot de passe racine de centos_lxc .
# cat /var/lib/lxc/centos_lxc/tmp_root_pass Root-centos_lxc-KRzJLy
ou
Réinitialisez le mot de passe root à l'aide de la commande suivante.
# chroot /var/lib/lxc/centos_lxc/rootfs passwd
PS :Vous n'avez pas encore commencé les conteneurs.
Démarrage des conteneurs Linux
Après avoir créé les conteneurs, démarrez-le à l'aide de la commande suivante, s'exécute en arrière-plan.
# lxc-start -n centos_lxc -d
Maintenant, prenez la console du conteneur en utilisant la commande suivante.
Remarque :J'utilise "-t" avec "0" pour connecter le conteneur à tty0, simplement parce que tty1 ne me répondait pas.
# lxc-console -n centos_lxc -t 0
Entrez le nom d'utilisateur et le mot de passe pour vous connecter. Vous pouvez trouver les informations d'identification à la fin de la sortie lors de la création d'un conteneur. Vous devez changer le mot de passe root lors de la première connexion.
Exemple de résultat :
Connected to tty 0 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself CentOS Linux 7 (Core) Kernel 3.10.0-327.el7.x86_64 on an x86_64 centos_lxc login: root Password: You are required to change your password immediately (root enforced) Changing password for root. (current) UNIX password: New password: Retype new password: [root@centos_lxc ~]#
Une fois connecté, vous pouvez effectuer tout le travail dans ce conteneur comme vous le feriez sur un serveur Linux normal.
Pour quitter la console du conteneur, appuyez sur "Ctrl+a" suivi de "q" . Maintenant, vous serez renvoyé au terminal de l'ordinateur hôte.
Si vous souhaitez vous reconnecter au conteneur (le conteneur est toujours en cours d'exécution), exécutez la commande suivante.
# lxc-console -n centos_lxc -t 0
Travailler avec des conteneurs Linux
Pour répertorier les conteneurs sur l'ordinateur hôte, utilisez la commande suivante.
# lxc-ls centos_lxc
Répertoriez également les conteneurs actuellement actifs et en cours d'exécution sur l'ordinateur hôte.
# lxc-ls --active centos_lxc
Comme je n'ai qu'un seul conteneur en cours d'exécution, c'est pourquoi vous pouvez voir le même résultat pour les deux commandes.
Si vous souhaitez obtenir toutes les informations sur le conteneur en cours d'exécution, exécutez la commande suivante.
# lxc-info -n centos_lxc Name: centos_lxc State: RUNNING PID: 4047 IP: 192.168.12.16 CPU use: 0.47 seconds BlkIO use: 6.32 MiB Memory use: 4.19 MiB KMem use: 0 bytes Link: vethM3N48G TX bytes: 1.53 KiB RX bytes: 1.94 KiB Total bytes: 3.47 KiB
La commande ci-dessus vous donne des informations détaillées (nom, état, adresse IP, CPU, mémoire, E/S et utilisation du réseau) du conteneur "centos_lxc".
Vous pouvez également utiliser l'adresse IP pour vous connecter aux conteneurs au lieu de la console LXC.
Vous pouvez arrêter un conteneur en cours d'exécution à l'aide de la commande "lxc-stop", utilisez la commande suivante pour arrêter un conteneur "centos_lxc".
# lxc-stop -n centos_lxc
Cloner des conteneurs Linux
LXC a l'avenir de cloner un conteneur à partir du conteneur existant, exécutez la commande suivante pour cloner un conteneur "centos_lxc" existant vers un nouveau conteneur "centos_lxc_clone".
Remarque :Vous devez arrêter un conteneur en cours d'exécution avant de lancer le clone.
# lxc-clone centos_lxc centos_lxc_clone Created container centos_lxc_clone as copy of centos_lxc
Vérifiez si un conteneur est créé avec succès.
# lxc-ls centos_lxc centos_lxc_clone
Vous pouvez commencer à travailler avec un nouveau conteneur comme d'habitude.
# lxc_start -n centos_lxc_clone -d
# lxc_console -n centos_lxc_clone -t 0 Connected to tty 0 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself CentOS Linux 7 (Core) Kernel 3.10.0-327.el7.x86_64 on an x86_64 centos_lxc_clone login: root Password: Last login: Sat Mar 26 14:11:17 from 192.168.12.1 [root@centos_lxc_clone ~]#
Éteignez le conteneur depuis l'intérieur de la console.
[root@centos_lxc_clone ~]# poweroff
Prendre un instantané
LXC a également un autre futur appelé snapshot, utilisez les commandes suivantes.
Remarque :Vous devez arrêter un conteneur avant de prendre un instantané.
# lxc-stop -n centos_lxc_clone
Pour une démo, je prends l'instantané de centos_lxc_clone.
# lxc-snapshot -n centos_lxc_clone
Exemple de sortie :
lxc_container: lxccontainer.c: lxcapi_snapshot: 2879 Snapshot of directory-backed container requested. lxc_container: lxccontainer.c: lxcapi_snapshot: 2880 Making a copy-clone. If you do want snapshots, then lxc_container: lxccontainer.c: lxcapi_snapshot: 2881 please create an aufs or overlayfs clone first, snapshot that lxc_container: lxccontainer.c: lxcapi_snapshot: 2882 and keep the original container pristine.
Pour savoir où l'instantané est enregistré, exécutez la commande suivante.
# lxc-snapshot -L -n centos_lxc_clone snap0 (/var/lib/lxcsnaps/centos_lxc_clone) 2016:03:26 10:59:10
Dans Centos 7, les instantanés LXC sont stockés dans "/var/lib/lxcsnaps/ ”
Restauration de l'instantané
Pour restaurer un conteneur à partir de l'instantané, utilisez la commande suivante.
# lxc-snapshot -r snap0 -n centos_lxc_clone
Retirer les conteneurs
Pour supprimer complètement un conteneur, utilisez la commande suivante.
# lxc-destroy -n centos_lxc_clone
Exécuter un conteneur Ubuntu sur CentOS 7
J'ai rencontré plusieurs problèmes lorsque j'essayais d'exécuter un conteneur Ubuntu sur CentOS, j'ai pu exécuter Ubuntu à l'aide de quelques ajustements partagés sur d'autres sites Web.
Installez les packages ci-dessous pour les conteneurs basés sur Debian.
# yum -y install debootstrap perl # cd /usr/sbin ; ln -sf debootstrap qemu-debootstrap
Exécutez la commande suivante pour remplacer le miroir Debian par le miroir Ubuntu.
# sed -i 's/DEF_HTTPS_MIRROR="https:\/\/mirrors.kernel.org\/debian"/DEF_HTTPS_MIRROR="https:\/\/mirrors.kernel.org\/ubuntu"/g' /usr/sbin/debootstrap
Merci à unix.stackexchange.com
Obtenez le trousseau de clés précis d'Ubuntu et placez-le dans le répertoire des trousseaux de clés.
# cd /tmp # wget "http://archive.ubuntu.com/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2011.11.21.tar.gz" # tar xzf ubuntu-keyring_2011.11.21.tar.gz # mkdir /usr/share/keyrings/ # cp /tmp/ubuntu-keyring-2011.11.21/keyrings/ubuntu-archive-keyring.gpg /usr/share/keyrings/
Merci à blog.toxa.de
Créez un conteneur Ubuntu à l'aide de la commande suivante.
# lxc-create -n ubuntu_lxc -t ubuntu Checking cache download in /var/cache/lxc/precise/rootfs-amd64 ... Installing packages in template: ssh,vim,language-pack-en Downloading ubuntu precise minimal ... I: Retrieving Release I: Retrieving Release.gpg I: Checking Release signature I: Valid Release signature (key id 630239CC130E1A7FD81A27B140976EAF437D05B5) I: Retrieving Packages I: Validating Packages I: Retrieving Packages Generation complete. Setting up libdevmapper1.02.1 (2:1.02.48-4ubuntu7.4) ... Setting up dmsetup (2:1.02.48-4ubuntu7.4) ... update-initramfs: deferring update (trigger activated) Processing triggers for libc-bin ... ldconfig deferred processing now taking place Processing triggers for initramfs-tools ... Processing triggers for resolvconf ... invoke-rc.d: policy-rc.d denied execution of start. Download complete Copy /var/cache/lxc/precise/rootfs-amd64 to /var/lib/lxc/ubuntu_lxc/rootfs ... Copying rootfs to /var/lib/lxc/ubuntu_lxc/rootfs ... Generating locales... en_US.UTF-8... up-to-date Generation complete. Creating SSH2 RSA key; this may take some time ... Creating SSH2 DSA key; this may take some time ... Creating SSH2 ECDSA key; this may take some time ... Timezone in container is not configured. Adjust it manually. ## # The default user is 'ubuntu' with password 'ubuntu'! # Use the 'sudo' command to run tasks as root in the container. ##
À partir de la sortie ci-dessus, vous pouvez voir que l'utilisateur par défaut est "ubuntu" et que le mot de passe de l'utilisateur est "ubuntu".
Prenez une console de conteneur Ubuntu avec la commande suivante.
# lxc_console -n ubuntu_lxc Ubuntu 12.04.5 LTS ubuntu_lxc console ubuntu_lxc login: ubuntu Password: Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.10.0-327.10.1.el7.x86_64 x86_64) * Documentation: https://help.ubuntu.com/ The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Would you like to enter a security context? [N] ubuntu@ubuntu_lxc:~$
PS :Je n'ai pas vérifié la fonctionnalité du serveur à l'exception de la connexion, veuillez poster ici pour tout problème.
C'est tout. Soyez social, partagez ceci avec vos amis.