====== LXC container ? ====== LXC, contraction de l’anglais Linux Containers3 est un système de virtualisation, utilisant l'isolation comme méthode de cloisonnement au niveau du système d'exploitation. Il est utilisé pour faire fonctionner des environnements Linux isolés les uns des autres dans des conteneurs, partageant le même noyau et une plus ou moins grande partie du système hôte. Le conteneur apporte une virtualisation de l'environnement d'exécution (processeur, mémoire vive, réseau, système de fichier…) et non pas de la machine. Pour cette raison, on parle de « conteneur » et non de « machine virtuelle ». * Référence : https://fr.wikipedia.org/wiki/LXC {{ ::linux_containers_logo.png |}} ====== Installation de containers LXC sous Debian 11 ====== apt install lxc apparmor ===== Réseau : configuration mode Independent bridge setup ===== Installation et configuration du réseau : édition du fichier /etc/default/lxc-net nano /etc/default/lxc-net USE_LXC_BRIDGE="true" LXC_BRIDGE="lxcbr0" LXC_ADDR="10.0.3.1" LXC_NETMASK="255.255.255.0" LXC_NETWORK="10.0.3.0/24" LXC_DHCP_RANGE="10.0.3.200,10.0.3.254" LXC_DHCP_MAX="253" LXC_DHCP_CONFILE="" LXC_DOMAIN="" Pour créer un template pour la configuration de nouveau containers : nano /etc/lxc/default.conf lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx lxc.apparmor.profile = generated lxc.apparmor.allow_nesting = 1 Redémarrer la couche réseau sudo service lxc-net restart * Référence : https://wiki.debian.org/LXC#Installation ====== Création de container LXC ====== lxc-create -n musique -t download Demande quelle distribution installer pour quelle architecture lxc-create -n musique -t download -- -d ubuntu -r bionic -a amd64 DOWNLOAD_KEYSERVER="keyserver.ubuntu.com" lxc-create -n atelier -t download -- -d debian -r bullseye -a amd64 ==== Configuration type d'un container ==== Exemple pour un container nommé "ynh" nano /var/lib/lxc/ynh/config # Distribution configuration lxc.include = /usr/share/lxc/config/common.conf lxc.arch = linux64 # Container specific configuration lxc.apparmor.profile = generated lxc.apparmor.allow_nesting = 1 lxc.rootfs.path = dir:/var/lib/lxc/ynh/rootfs lxc.uts.name = ynh # Network configuration lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:16:3e:dd:91:8b # Autostart lxc.start.auto = 1 Voir pour cinfig ip fixe (mais dns ?) lxc.net.0.hwaddr = mac adresse lxc.net.0.ipv4.address = 100.0.0.2 lxc.net.0.ipv4.gateway = 100.0.0.1 ====== Commandes de base pour manipuler des containers ====== Créer un nouveau container sous debian lxc-create -n ynh -t download -- -d debian -r bullseye -a amd64 Si Setting up the GPG keyring ERROR: Unable to fetch GPG key from keyserver lxc-create: dokos: lxccontainer.c: create_run_template: 1616 Failed to create container from template alors https://serverok.in/lxc-error-unable-to-fetch-gpg-key-from-keyserver DOWNLOAD_KEYSERVER="keyserver.ubuntu.com" lxc-create -n ynh -t download -- -d debian -r bullseye -a amd64 Lister les containers présents sur le serveur et leurs IP si démarrés lxc-ls -f Démarrer un container nommé ynh lxc-start ynh Se loguer dans le container en tant que root lxc-attach ynh Arrêter un container lxc-stop ynh Debug du démarrage d'un container lxc-start ynh --logfile ~/loguplxccontainer.txt --logpriority DEBUG ===== Snapshot de container ===== Il faut d'abord stopper le container avant de faire un snapshot : lxc-stop nomducontainer Pour réaliser un snapshot : lxc-snapshot -n nomducontainer Lister les snapshots : lxc-snapshot -n nomducontainer -L Restaurer un snapshot : lxc-snapshot -n nomducontainer -r nomdusnapshotàrestaurer Détruire un snapshot : lxc-snapshot -n nomducontainer -d nomdusnapshot Pour plus d'options : * [[https://linuxcontainers.org/lxc/manpages/man1/lxc-snapshot.1.html|la doc de lxc-snapshot]] ===== Envoyer une commande au container LXC depuis l'extérieur ===== Par exemple pour faire un dump de la base de données (à adapter en fonction de la bdd) lxc-attach -n nomducontainer -- /bin/bash -c "sudo -u postgres pg_dumpall | gzip -c > /home/ubuntu/bddbackup.gz" Exemple de script pour sauvegarder toutes les bdd de containers utilisant la même configuration * #!/bin/bash # Get the vm list vms="$(lxc-ls --active)" # Update each vm update_vm(){ local vm="$1" echo "*** [VM: $vm [$(hostname) @ $(date)] ] ***" /usr/bin/lxc-attach -n "$vm" -- /bin/bash -c "sudo -u postgres pg_dumpall | gzip -c > /home/ubuntu/bddbackup.gz" echo "- backup db done ----------------------------------------------------------------" } # Do it for v in $vms do update_vm "$v" done ====== Reverse proxy NGINX vers un container LXC ====== On installe un serveur web nginx qui va renvoyer le traffic web vers le container LXC précédemment installé * Un [[https://linuxiac.com/reverse-proxy-with-nginx/|tuto pour la mise en place basique en http]] * Un tuto pour [[https://seanthegeek.net/1035/how-to-configure-a-nginx-reverse-proxy-with-lets-encrypt-certificates/|l'utilisation de certbot avec Nginx]] * A voir pour conf https://blog.budhajeewa.com/assigning-ssl-using-lets-encrypt-to-websites-running-in-lxcs/ {{tag>bj serveur lxc container linux virtualisation futuretic}}