I container LXC sono un modo molto rapido per creare un ambiente virtuale pseudo.
Nel precedente articolo LXC, abbiamo spiegato come installare e configurare i container Linux LXC.
In questo tutorial, spiegheremo come creare un nuovo container Linux, avviare il container e accedere alla console virtuale LXC per utilizzare il nuovo container.
A scopo dimostrativo, in questo tutorial creeremo un contenitore virtuale CentOS LXC, ma puoi creare un contenitore virtuale praticamente per qualsiasi distribuzione Linux che desideri.
1. Modelli di contenitori LXC
Linux Containers LXC per impostazione predefinita fornisce modelli di container per diverse distribuzioni Linux popolari. Di seguito sono riportati alcuni dei modelli LXC che puoi utilizzare immediatamente.
- CentOS
- Ubuntu
- Fedora
- OpenSUSE
- Gentoo
- Debian
- Oracle Linux
- ArchLinux
Tutti i modelli LXC disponibili si trovano nella directory /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. Crea un contenitore usando lxc-create
Per creare il contenitore, usa il comando lxc-create come mostrato di seguito.
Nel comando seguente:
- –n opzione indica il nome del contenitore L'opzione
- –t indica il modello utilizzato per creare il contenitore. In questo esempio, utilizziamo il modello lxc-centos per creare un contenitore CentOS.
In questo esempio, verrà creato il contenitore CentOS con l'installazione minima di centos.
Questo scaricherà tutti i pacchetti necessari per eseguire CentOS minimo (ad esempio, circa 140 pacchetti) e li installerà come parte del contenitore 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. Password di root per il contenitore LXC
La password di root per il container LXC è archiviata in:/usr/local/var/lib/lxc/{container-name}/tmp_root_pass
Quindi, nell'esempio sopra, per il contenitore LXC che abbiamo appena creato, la password di root temporanea è la seguente:
# cat /usr/local/var/lib/lxc/MyCentOSContainer1/tmp_root_pass Root-MyCentOSContainer1-pf7qMB
Puoi modificare la password di root del tuo container in qualsiasi momento, anche se il tuo container è disattivato utilizzando chroot dall'host di controllo come mostrato di seguito.
# 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. Avvia LXC Linux Container usando lxc-start
Una volta creato il contenitore, utilizza lxc-start come mostrato di seguito per avviare il contenitore.
# 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:
Se ricevi il seguente messaggio di errore "Impossibile avviare il contenitore", significa che qualcosa non va nella tua configurazione.
# 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.
Per scoprire esattamente cosa c'è che non va nella tua configurazione, esegui il contenitore LXC in primo piano usando l'opzione -F come mostrato di seguito.
Se viene visualizzato il messaggio di errore "Impossibile collegare al bridge", "Impossibile creare netdev", "Impossibile creare la rete", l'adattatore bridge non è configurato correttamente sul sistema.
Controlla le impostazioni ifcfg-br0 che abbiamo menzionato nel nostro precedente articolo sulla configurazione di LXC Linux Container, per assicurarti di avere la configurazione del bridge impostata correttamente e funzionante.
# 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. Visualizza le informazioni sul contenitore utilizzando lxc-info
Per visualizzare informazioni dettagliate sul tuo container, usa il comando lxc-info come mostrato di seguito.
# 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. Arresta LXC Linux Container usando lxc-stop
Per interrompere il tuo contenitore Linux LXC, usa lxc-stop come mostrato di seguito e specifica il nome del contenitore che desideri interrompere.
# lxc-stop -n MyCentOSContainer1
7. Clona un contenitore esistente usando lxc-clone
La clonazione è utile quando si desidera acquisire un'istantanea del vecchio contenitore prima di apportare modifiche alla configurazione del contenitore. Puoi usarlo come un semplice metodo di backup per la configurazione del contenitore.
La clonazione del contenitore può essere eseguita utilizzando il comando lxc-clone come mostrato di seguito. In questo caso, il nuovo nome del contenitore è MyCentOSContainer2
# lxc-clone -o MyCentOSContainer1 -n MyCentOSContainer2 Created container MyCentOSContainer2 as copy of MyCentOSContainer1
8. Elimina un contenitore esistente utilizzando lxc-destory
Per eliminare un contenitore esistente, usa il comando lxc-destroy come mostrato di seguito.
# lxc-destroy -n MyCentOSContainer2
9. Connettiti a LXC Linux Container Console
Per connetterti alla console del container, usa il seguente comando lxc-console.
# 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. Modifica le configurazioni LXC usando lxc-config
Per modificare la configurazione LXC, puoi usare il comando lxc-config.
Per prima cosa, usa l'opzione lxc-config -l, che visualizzerà solo tutte le configurazioni disponibili come mostrato di seguito.
# 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
Quindi, utilizza l'opzione lxc.default_config come mostrato di seguito per visualizzare le informazioni su ciascun file di configurazione e sui parametri associati.
# 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
Il comando seguente visualizzerà la patch LXC in cui sono archiviati tutti i container.
# lxc-config lxc.lxcpath /usr/local/var/lib/lxc
Come vediamo di seguito, vediamo i due contenitori che abbiamo creato in questa directory.
# cd /usr/local/var/lib/lxc # ls MyCentOSContainer1 MyCentOSContainer2
Sotto la directory del contenitore, vedrai il file di configurazione, che contiene tutte le informazioni di configurazione di base per quel particolare contenitore, come mostrato di seguito.
# 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