LXC-Container sind eine sehr schnelle Möglichkeit, eine pseudovirtuelle Umgebung zu erstellen.
Im vorherigen LXC-Artikel haben wir erklärt, wie man LXC-Linux-Container installiert und konfiguriert.
In diesem Tutorial erklären wir, wie Sie einen neuen Linux-Container erstellen, den Container starten und sich bei der virtuellen LXC-Konsole anmelden, um den neuen Container zu verwenden.
Zur Demonstration erstellen wir in diesem Tutorial einen virtuellen CentOS LXC-Container, aber Sie können einen virtuellen Container für so ziemlich jede gewünschte Linux-Distribution erstellen.
1. LXC-Containervorlagen
Linux-Container LXC bietet standardmäßig Containervorlagen für mehrere beliebte Linux-Distributionen. Im Folgenden finden Sie einige der LXC-Vorlagen, die Sie sofort verwenden können.
- CentOS
- Ubuntu
- Fedora
- OpenSUSE
- Egentoo
- Debian
- Oracle-Linux
- ArchLinux
Alle verfügbaren LXC-Vorlagen befinden sich im Verzeichnis /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. Erstellen Sie einen Container mit lxc-create
Um den Container zu erstellen, verwenden Sie den Befehl lxc-create wie unten gezeigt.
Im folgenden Befehl:
- –n-Option gibt den Containernamen an Die Option
- –t gibt die Vorlage an, die zum Erstellen des Containers verwendet wird. In diesem Beispiel verwenden wir die lxc-centos-Vorlage, um einen CentOS-Container zu erstellen.
In diesem Beispiel wird der CentOS-Container mit der minimalen Centos-Installation erstellt.
Dadurch werden alle Pakete heruntergeladen, die zum Ausführen von CentOS minimal erforderlich sind (z. B. etwa 140 Pakete) und als Teil des MyCentOSContainer1-Containers installiert
# 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. Root-Passwort für den LXC-Container
Das Root-Passwort für den LXC-Container wird gespeichert unter:/usr/local/var/lib/lxc/{container-name}/tmp_root_pass
Im obigen Beispiel lautet das temporäre Root-Passwort für den gerade erstellten LXC-Container also wie folgt:
# cat /usr/local/var/lib/lxc/MyCentOSContainer1/tmp_root_pass Root-MyCentOSContainer1-pf7qMB
Sie können das Root-Passwort Ihres Containers jederzeit ändern, auch wenn Ihr Container ausgeschaltet ist, indem Sie chroot vom Kontrollhost wie unten gezeigt verwenden.
# 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. Starten Sie den LXC-Linux-Container mit lxc-start
Sobald der Container erstellt ist, verwenden Sie lxc-start wie unten gezeigt, um Ihren Container zu starten.
# 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:
Wenn Sie die folgende Fehlermeldung „Container konnte nicht gestartet werden“ erhalten, stimmt etwas in Ihrer Konfiguration nicht.
# 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.
Um genau herauszufinden, was mit Ihrer Konfiguration falsch ist, führen Sie den LXC-Container im Vordergrund aus, indem Sie die Option -F wie unten gezeigt verwenden.
Wenn Sie die folgende Fehlermeldung „Failed to Attach to Bridge“, „failed to create netdev“, „failed to create the network“ erhalten, dann ist der Bridge-Adapter auf Ihrem System nicht richtig konfiguriert.
Überprüfen Sie die ifcfg-br0-Einstellungen, die wir in unserem früheren Artikel zur Einrichtung des LXC-Linux-Containers erwähnt haben, um sicherzustellen, dass die Bridge-Konfiguration richtig eingerichtet ist und funktioniert.
# 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. Zeigen Sie Containerinformationen mit lxc-info
anUm detaillierte Informationen zu Ihrem Container anzuzeigen, verwenden Sie den lxc-info-Befehl wie unten gezeigt.
# 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. Beenden Sie den LXC-Linux-Container mit lxc-stop
Um Ihren LXC-Linux-Container zu stoppen, verwenden Sie lxc-stop wie unten gezeigt und geben Sie den Namen des Containers an, den Sie stoppen möchten.
# lxc-stop -n MyCentOSContainer1
7. Klonen Sie einen vorhandenen Container mit lxc-clone
Das Klonen ist nützlich, wenn Sie einen Snapshot des alten Containers erstellen möchten, bevor Sie Änderungen an der Konfiguration des Containers vornehmen. Sie können dies als einfache Sicherungsmethode für die Containerkonfiguration verwenden.
Das Klonen des Containers kann mit dem Befehl lxc-clone wie unten gezeigt durchgeführt werden. In diesem Fall lautet der neue Containername MyCentOSContainer2
# lxc-clone -o MyCentOSContainer1 -n MyCentOSContainer2 Created container MyCentOSContainer2 as copy of MyCentOSContainer1
8. Löschen Sie einen vorhandenen Container mit lxc-destory
Um einen vorhandenen Container zu löschen, verwenden Sie den Befehl lxc-destroy wie unten gezeigt.
# lxc-destroy -n MyCentOSContainer2
9. Stellen Sie eine Verbindung zur LXC-Linux-Containerkonsole her
Verwenden Sie den folgenden lxc-console-Befehl, um eine Verbindung zur Konsole des Containers herzustellen.
# 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. Ändern Sie die LXC-Konfigurationen mit lxc-config
Um die LXC-Konfiguration zu ändern, können Sie den Befehl lxc-config verwenden.
Verwenden Sie zuerst die Option lxc-config -l, die nur alle verfügbaren Konfigurationen wie unten gezeigt anzeigt.
# 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
Verwenden Sie als Nächstes die Option lxc.default_config wie unten gezeigt, um Informationen zu jeder Konfigurationsdatei und den zugehörigen Parametern anzuzeigen.
# 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
Der folgende Befehl zeigt den LXC-Patch an, in dem alle Container gespeichert sind.
# lxc-config lxc.lxcpath /usr/local/var/lib/lxc
Wie wir unten sehen, sehen wir die zwei Container, die wir unter diesem Verzeichnis erstellt haben.
# cd /usr/local/var/lib/lxc # ls MyCentOSContainer1 MyCentOSContainer2
Unter dem Containerverzeichnis sehen Sie die Konfigurationsdatei, die alle grundlegenden Konfigurationsinformationen für diesen bestimmten Container enthält, wie unten gezeigt.
# 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