wiki/HowtoLXC.md

163 lines
3 KiB
Markdown
Raw Normal View History

2017-01-23 16:09:59 +01:00
---
categories: virtualisation
title: Howto LXC
...
2017-04-26 21:57:55 +02:00
* Documentation : <https://linuxcontainers.org/lxc/manpages/>
2016-12-29 11:25:39 +01:00
2019-10-02 17:18:51 +02:00
[LXC](https://linuxcontainers.org/lxc/introduction/) est une interface en espace utilisateur pour piloter les fonctionnalités d'isolation du noyau Linux, permettant de créer des containers.
2017-01-23 16:09:59 +01:00
# Installation
2016-12-29 11:25:39 +01:00
~~~
2019-10-02 17:18:51 +02:00
# apt install lxc bridge-utils debootstrap
2016-12-29 11:25:39 +01:00
~~~
2019-10-02 17:18:51 +02:00
> Note: Avec Debian Buster, il faut rajouter le paquet lxc-templates
2017-01-23 16:11:00 +01:00
# Mise en place du réseau virtuel
2017-01-23 15:50:05 +01:00
Obligatoire si vous voulez un accès Internet dans vos conteneurs. Une des façons de faire et de monter un bridge qui contiendra tout les conteneurs. Ensuite via iptables, on fera du NAT pour router le réseau privé du bridge via l'interface principale (souvent eth0).
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# cat /etc/network/interfaces
[...]
auto br0
iface br0 inet static
2017-01-23 15:50:05 +01:00
address 192.0.2.254
2016-12-29 11:25:39 +01:00
netmask 255.255.255.0
~~~
~~~
2017-01-23 16:06:26 +01:00
# echo 1 > /proc/sys/net/ipv4/ip_forward
# /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
2016-12-29 11:25:39 +01:00
~~~
2017-01-03 11:20:35 +01:00
2017-01-23 16:11:00 +01:00
# Installation d'un container
2017-01-23 15:50:05 +01:00
2017-01-23 16:06:26 +01:00
En choisissant de créer un conteneur avec `-t download`, cela vous permettra via un prompt de choisir quel type de distribution à installer.
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
2017-01-23 15:50:05 +01:00
# lxc-create -t download -n foo
2016-12-29 11:25:39 +01:00
~~~
2017-01-23 15:50:05 +01:00
On peut directement choisir quel type de distribution on veut.
2016-12-29 11:25:39 +01:00
~~~
2017-01-23 16:06:26 +01:00
# lxc-create -t debian -n foo
2016-12-29 11:25:39 +01:00
~~~
2017-01-23 16:11:00 +01:00
## Déclarer le réseau virtuel dans la configuration du conteneur
2017-01-23 15:50:05 +01:00
Exemple avec la machine `foo`, via le fichier `/var/lib/lxc/foo/config`
2016-12-29 11:25:39 +01:00
~~~
lxc.network.type = veth
2017-01-23 15:50:05 +01:00
lxc.network.link = br0
lxc.network.ipv4 = 192.0.2.10/24
lxc.network.ipv4.gateway = 192.0.2.254
2016-12-29 11:25:39 +01:00
lxc.network.name = eth0
lxc.network.flags = up
~~~
2018-11-19 18:04:06 +01:00
Pas de réseau (sauf lo) :
~~~
lxc.network.type = empty
~~~
Partage du réseau avec l'hôte
~~~
lxc.network.type = none
~~~
2017-01-23 16:11:00 +01:00
# Utilisation basique
2016-12-29 11:25:39 +01:00
2018-01-25 19:59:55 +01:00
Lister les conteneurs :
~~~
# lxc-ls
2019-10-02 17:18:51 +02:00
foo bar baz
~~~
On peut obtenir plus de détails avec l'option `--fancy`
~~~
# lxc-ls --fancy
NAME STATE AUTOSTART GROUPS IPV4 IPV6
foo STOPPED 0 - - -
bar RUNNING 1 - 192.0.2.73 2001:DB8::73
2018-01-25 19:59:55 +01:00
~~~
2016-12-29 11:25:39 +01:00
Démarrer un conteneur :
2017-01-03 11:20:35 +01:00
~~~
2017-01-23 15:50:05 +01:00
# lxc-start -n foo -d
2017-01-03 11:20:35 +01:00
~~~
2016-12-29 11:25:39 +01:00
Entrer dans un conteneur :
2017-01-03 11:20:35 +01:00
~~~
2017-01-23 15:50:05 +01:00
# lxc-attach -n foo
2017-01-03 11:20:35 +01:00
~~~
2016-12-29 11:25:39 +01:00
2017-01-23 15:50:05 +01:00
Arrêter un conteneur :
2017-01-03 11:20:35 +01:00
~~~
2017-01-23 15:50:05 +01:00
# lxc-stop -n foo
2016-12-29 11:25:39 +01:00
~~~
2017-01-03 11:20:35 +01:00
Autres commandes utiles :
2016-12-29 11:25:39 +01:00
~~~
2017-01-23 15:50:05 +01:00
# lxc-info -n foo
# lxc-console -n foo
# lxc-halt -n foo
# lxc-destroy -n foo
2017-01-03 11:20:35 +01:00
~~~
2017-01-23 15:50:05 +01:00
2017-01-23 16:06:26 +01:00
Pour quitter un `lxc-console`. Il faut faire `<Ctrl+a q>`. Il semblerait cependant que cela ne fonctionne pas !
Pour exécuter une commande dans un conteneur, sans y rester attaché :
~~~
# lxc-attach -n foo -- command --with --arguments
~~~
2017-01-23 16:11:00 +01:00
# Divers / FAQ / Diagnostic
2017-01-23 16:06:26 +01:00
2017-01-24 17:08:06 +01:00
## systemd
2017-01-23 15:50:05 +01:00
Si systemd dans un container pose souci, on peut revenir à sysvinit.
~~~
# apt install sysvinit-core
2017-01-24 17:08:06 +01:00
~~~
## Erreur accès /dev
~~~
Couldn't open /dev/null: Permission denied
~~~
C'est parce que /dev est crée en 700 au lieu de 755. Pour fixer :
~~~
# chmod 755 /dev
2017-04-26 21:57:55 +02:00
~~~
2020-08-12 21:32:30 +02:00
## Failed to load config for foo
~~~
# lxc-ls
Failed to load config for foo
~~~
Il faut mettre à jour la config :
~~~
# lxc-update-config -c /var/lib/lxc/foo/config
~~~