Los contenedores LXC son una forma muy rápida de crear un entorno pseudovirtual.
En el artículo anterior de LXC, explicamos cómo instalar y configurar los contenedores de Linux de LXC.
En este tutorial, explicaremos cómo crear un nuevo contenedor de Linux, iniciar el contenedor e iniciar sesión en la consola virtual LXC para usar el nuevo contenedor.
Para la demostración, crearemos un contenedor virtual CentOS LXC en este tutorial, pero puede crear un contenedor virtual para prácticamente cualquier distribución de Linux que desee.
1. Plantillas de contenedores LXC
Linux Containers LXC de forma predeterminada proporciona plantillas de contenedores para varias distribuciones de Linux populares. Las siguientes son algunas de las plantillas LXC que puede usar de inmediato.
- Cent OS
- Ubuntu
- Fedora
- Abrir SUSE
- Gentoo
- Debian
- Oracle Linux
- ArchLinux
Todas las plantillas LXC disponibles se encuentran en el directorio /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. Crear un Contenedor usando lxc-create
Para crear el contenedor, use el comando lxc-create como se muestra a continuación.
En el siguiente comando:
- La opción –n indica el nombre del contenedor La opción
- –t indica la plantilla que se utiliza para crear el contenedor. En este ejemplo, usamos la plantilla lxc-centos para crear un contenedor CentOS.
En este ejemplo, esto creará el contenedor CentOS con la instalación mínima de centos.
Esto descargará todos los paquetes necesarios para ejecutar CentOS mínimo (por ejemplo, aproximadamente 140 paquetes) y los instalará como parte del contenedor 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. Contraseña raíz para el contenedor LXC
La contraseña raíz para el contenedor LXC se almacena en:/usr/local/var/lib/lxc/{container-name}/tmp_root_pass
Entonces, en el ejemplo anterior, para el contenedor LXC que acabamos de crear, la contraseña raíz temporal se encuentra debajo de lo siguiente:
# cat /usr/local/var/lib/lxc/MyCentOSContainer1/tmp_root_pass Root-MyCentOSContainer1-pf7qMB
Puede cambiar la contraseña raíz de su contenedor en cualquier momento, incluso si su contenedor está apagado usando chroot desde el host de control como se muestra a continuación.
# 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. Inicie el contenedor LXC Linux usando lxc-start
Una vez que se crea el contenedor, use lxc-start como se muestra a continuación para iniciar su contenedor.
# 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:
Si recibe el siguiente mensaje de error "Error al iniciar el contenedor", entonces algo está mal en su configuración.
# 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.
Para averiguar exactamente cuál es el problema con su configuración, ejecute el contenedor LXC en primer plano usando la opción -F como se muestra a continuación.
Si recibe el siguiente mensaje de error, "no se pudo conectar al puente", "no se pudo crear netdev", "no se pudo crear la red", entonces el adaptador de puente no está configurado correctamente en su sistema.
Verifique la configuración de ifcfg-br0 que mencionamos en nuestro artículo anterior sobre la configuración de LXC Linux Container, para asegurarse de que la configuración del puente esté configurada correctamente y funcionando.
# 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. Ver información del contenedor usando lxc-info
Para mostrar información detallada sobre su contenedor, use el comando lxc-info como se muestra a continuación.
# 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. Detener LXC Linux Container usando lxc-stop
Para detener su contenedor LXC Linux, use lxc-stop como se muestra a continuación y especifique el nombre del contenedor que desea detener.
# lxc-stop -n MyCentOSContainer1
7. Clonar un Contenedor Existente usando lxc-clone
La clonación es útil cuando desea tomar una instantánea del contenedor anterior antes de realizar cambios en la configuración del contenedor. Puede usar esto como un método de copia de seguridad simple para la configuración del contenedor.
La clonación del contenedor se puede hacer usando el comando lxc-clone como se muestra a continuación. En este caso, el nuevo nombre del contenedor es MyCentOSContainer2
# lxc-clone -o MyCentOSContainer1 -n MyCentOSContainer2 Created container MyCentOSContainer2 as copy of MyCentOSContainer1
8. Eliminar un contenedor existente usando lxc-destory
Para eliminar un contenedor existente, use el comando lxc-destroy como se muestra a continuación.
# lxc-destroy -n MyCentOSContainer2
9. Conéctese a la consola del contenedor Linux LXC
Para conectarse a la consola del contenedor, use el siguiente 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. Cambie las configuraciones de LXC usando lxc-config
Para cambiar la configuración de LXC, puede usar el comando lxc-config.
Primero, use la opción lxc-config -l, que solo mostrará todas las configuraciones disponibles como se muestra a continuación.
# 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
Luego, use la opción lxc.default_config como se muestra a continuación para ver información sobre cada archivo de configuración y sus parámetros asociados.
# 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
El siguiente comando mostrará el parche LXC donde se almacenan todos los contenedores.
# lxc-config lxc.lxcpath /usr/local/var/lib/lxc
Como vemos a continuación, vemos los dos contenedores que creamos en este directorio.
# cd /usr/local/var/lib/lxc # ls MyCentOSContainer1 MyCentOSContainer2
En el directorio del contenedor, verá el archivo de configuración, que contiene toda la información de configuración básica para ese contenedor en particular, como se muestra a continuación.
# 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