Cómo instalar, crear y administrar LXC (contenedores de Linux) en RHEL / CentOS 7
LXC , acrónimo de Linux Containers , es una solución liviana de virtualización basada en el núcleo de Linux, que prácticamente se ejecuta sobre el sistema operativo, lo que le permite ejecutar varias distribuciones aisladas al mismo tiempo .
La diferencia entre LXC y la virtualización KVM es que LXC no emula hardware, sino que comparte el mismo espacio de nombres del kernel, similar a las aplicaciones chroot.
Esto convierte a LXC en una solución de virtualización muy rápida en comparación con otras soluciones de virtualización, como KVM, XEN o VMware.
Este artículo lo guiará sobre cómo instalar, implementar y ejecutar contenedores LXC en una distribución de CentOS/RHEL y Fedora.
Un sistema operativo Linux en funcionamiento con instalación mínima:
Installation of CentOS 7 Linux
Installation of RHEL 7
Installation of Fedora 23 Server
Paso 1: Instalando la virtualización LXC en Linux
1. la virtualización LXC se proporciona a través de los repositorios de Epel. Para usar este repositorio, abra un terminal e instale los repositorios de Epel en su sistema emitiendo el siguiente comando:
# yum install epel-release
2. Antes de continuar con el proceso de instalación de LXC, asegúrese de que el Perl intérprete de idiomas y los paquetes debootstrap estén instalados emitiendo los siguientes comandos.
# yum install debootstrap perl libvirt
3. Finalmente, instale la solución de virtualización LXC con el siguiente comando.
# yum install lxc lxc-templates
4. Después de que se haya instalado el servicio LXC, verifique si se está ejecutando el daemon LXC y libvirt .
# systemctl status lxc.service
# systemctl start lxc.service
# systemctl start libvirtd
# systemctl status lxc.service
Estado> Comprobar el estado del daemon LXC
[[email protected] ~]# systemctl status lxc.service
lxc.service - LXC Container Initialization and Autoboot Code
Loaded: loaded (/usr/lib/systemd/system/lxc.service; disabled)
Active: inactive (dead)
[[email protected] ~]# systemctl start lxc.service
[[email protected] ~]# systemctl status lxc.service
lxc.service - LXC Container Initialization and Autoboot Code
Loaded: loaded (/usr/lib/systemd/system/lxc.service; disabled)
Active: active (exited) since Fri 2016-04-01 02:33:36 EDT; 1min 37s ago
Process: 2250 ExecStart=/usr/libexec/lxc/lxc-autostart-helper start (code=exited, status=0/SUCCESS)
Process: 2244 ExecStartPre=/usr/libexec/lxc/lxc-devsetup (code=exited, status=0/SUCCESS)
Main PID: 2250 (code=exited, status=0/SUCCESS)
Apr 01 02:33:06 mail systemd[1]: Starting LXC Container Initialization and Autoboot Code...
Apr 01 02:33:06 mail lxc-devsetup[2244]: Creating /dev/.lxc
Apr 01 02:33:06 mail lxc-devsetup[2244]: /dev is devtmpfs
Apr 01 02:33:06 mail lxc-devsetup[2244]: Creating /dev/.lxc/user
Apr 01 02:33:36 mail lxc-autostart-helper[2250]: Starting LXC autoboot containers: [ OK ]
Apr 01 02:33:36 mail systemd[1]: Started LXC Container Initialization and Autoboot Code.
y verifique el estado de virtualización del kernel LXC emitiendo el siguiente comando.
# lxc-checkconfig
Configuración> Comprobar configuración de virtualización del kernel LXC
[[email protected] ~]# lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.10.0-229.el7.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
Bridges: enabled
Advanced netfilter: enabled
CONFIG_NF_NAT_IPV4: enabled
CONFIG_NF_NAT_IPV6: enabled
CONFIG_IP_NF_TARGET_MASQUERADE: enabled
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled
--- Checkpoint/Restore ---
checkpoint restore: missing
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
Paso 2: Crear y administrar contenedores LXC en Linux
5. para enumerar los contenedores de plantillas LXC disponibles que ya están instalados en su sistema, ejecute el siguiente comando.
# ls -alh /usr/share/lxc/templates/
Contenedores> Lista de Contenedores de Plantillas LXC
total 344K
drwxr-xr-x. 2 root root 4.0K Apr 1 02:32 .
drwxr-xr-x. 6 root root 100 Apr 1 02:32 ..
-rwxr-xr-x. 1 root root 11K Nov 15 10:19 lxc-alpine
-rwxr-xr-x. 1 root root 14K Nov 15 10:19 lxc-altlinux
-rwxr-xr-x. 1 root root 11K Nov 15 10:19 lxc-archlinux
-rwxr-xr-x. 1 root root 9.7K Nov 15 10:19 lxc-busybox
-rwxr-xr-x. 1 root root 29K Nov 15 10:19 lxc-centos
-rwxr-xr-x. 1 root root 11K Nov 15 10:19 lxc-cirros
-rwxr-xr-x. 1 root root 17K Nov 15 10:19 lxc-debian
-rwxr-xr-x. 1 root root 18K Nov 15 10:19 lxc-download
-rwxr-xr-x. 1 root root 49K Nov 15 10:19 lxc-fedora
-rwxr-xr-x. 1 root root 28K Nov 15 10:19 lxc-gentoo
-rwxr-xr-x. 1 root root 14K Nov 15 10:19 lxc-openmandriva
-rwxr-xr-x. 1 root root 14K Nov 15 10:19 lxc-opensuse
-rwxr-xr-x. 1 root root 35K Nov 15 10:19 lxc-oracle
-rwxr-xr-x. 1 root root 12K Nov 15 10:19 lxc-plamo
-rwxr-xr-x. 1 root root 6.7K Nov 15 10:19 lxc-sshd
-rwxr-xr-x. 1 root root 23K Nov 15 10:19 lxc-ubuntu
-rwxr-xr-x. 1 root root 12K Nov 15 10:19 lxc-ubuntu-cloud
6. El proceso de creación de un contenedor LXC es muy simple. La sintaxis del comando para crear un nuevo contenedor se explica a continuación.
En el siguiente extracto crearemos un nuevo contenedor llamado mydeb basado en una plantilla debian que se extraerá de los repositorios de LXC.
Contenedor> Crear contenedor LXC
[[email protected] ~]# lxc-create -n mydcb -t debian
debootstrap is /usr/sbin/debootstrap
Checking cache download in /var/cache/lxc/debian/rootfs-jessie-amd64 ...
Downloading debian minimal ...
W: Cannot check Release signature; keyring file not available /usr/share/keyrings/debian-archive-keyring.gpg
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
...
...
7. Después de una serie de dependencias base y paquetes que se descargarán e instalarán en su sistema, se creará el contenedor. Cuando el proceso finalice, un mensaje mostrará la contraseña de su cuenta raíz predeterminada. Cambie esta contraseña una vez que inicie e inicie sesión en la consola del contenedor para estar seguro.
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Failed to read /proc/cmdline. Ignoring: No such file or directory
invoke-rc.d: policy-rc.d denied execution of start.
Timezone in container is not configured. Adjust it manually.
Root password is 'root', please change !
Generating locales (this might take a while)...
en_IN.en_IN...character map file `en_IN' not found: No such file or directory
/usr/share/i18n/locales/en_IN:55: LC_MONETARY: unknown character in field `currency_symbol'
done
Generation complete.
8. Ahora, puede usar lxc-ls para enumerar sus contenedores y lxc-info para obtener información sobre un contenedor en ejecución/detenido.
Para iniciar el contenedor recién creado en segundo plano (se ejecutará como un demonio especificando la opción -d ) emita el siguiente comando:
# lxc-start -n mydeb -d
9. Una vez que se haya iniciado el contenedor, puede hacer una lista de los contenedores en ejecución usando el comando lxc-ls --active y obtener información detallada sobre el contenedor en ejecución.
# lxc-ls --active
10. Para iniciar sesión en la consola del contenedor, ejecute el comando lxc-console contra un nombre de contenedor activo. Inicie sesión con el usuario root y la contraseña generada de forma predeterminada por lxc supervisor.
Una vez que haya iniciado sesión en el contenedor, puede ejecutar varios comandos para verificar la distribución mostrando el contenido del archivo /etc/issue.net , cambie la contraseña de root emitiendo el comando passwd o vea detalles sobre las interfaces de red con ifconfig .
[[email protected]~]# lxc-console -n mydcb
Connected to tty 1
Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
Debian GNU/Linux 8 mydcb tty1
mydcb login: root
Password:
Last login: Fri Apr 1 07:39:08 UTC 2016 on console
Linux mydcb 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
[email protected]:~# cat /etc/issue.net
Debian GNU/Linux 8
[email protected]:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3e:d9:21:d7
inet6 addr: fe80::216:3eff:fed9:21d7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5796 (5.6 KiB) TX bytes:648 (648.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
[email protected]:~# passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
11. Para desconectarse de la consola del contenedor y volver a la consola del host, dejando el contenedor en estado activo, presione Ctrl + a y luego q en el teclado.
Para detener un contenedor en ejecución, ejecute el siguiente comando.
# lxc-stop -n mydcb
12. Para crear un contenedor LXC basado en una plantilla de Ubuntu, ingrese al directorio /usr/sbin/ y cree el siguiente enlace simbólico debootstrap .
# cd /usr/sbin
# ln -s debootstrap qemu-debootstrap
13. Edite el archivo qemu-debootstrap con el Vi y reemplace las siguientes dos líneas MIRROR de la siguiente manera:
14. Finalmente, cree un nuevo contenedor LXC basado en la plantilla de Ubuntu que emita el mismo comando lxc-create .
Una vez que el proceso de generación del contenedor de Ubuntu finalice, un mensaje mostrará sus credenciales de inicio de sesión predeterminadas del contenedor, como se ilustra en la siguiente captura de pantalla.
# lxc-create -n myubuntu -t ubuntu
Contenedor> Crear contenedor LXC Ubuntu
Checking cache download in /var/cache/lxc/precise/rootfs-amd64 ...
Installing packages in template: ssh,vim,language-pack-en
Downloading ubuntu precise minimal ...
15. Para crear un contenedor específico basado en una plantilla local, use la siguiente sintaxis:
16. Por ejemplo, también se pueden crear contenedores específicos para diferentes distribuciones de distro y arquitecturas a partir de una plantilla genérica que se descargará de los repositorios de LXC como se ilustra en el siguiente ejemplo.
Aquí está la lista de modificadores de línea de comando de lxc-create :
-n = name
-t = template
-d = distibution
-a = arch
-r = release
17. Los contenedores se pueden eliminar de su host con el comando lxc-destroy emitido contra un nombre de contenedor.
# lxc-destroy -n mywheezy
18. Se puede clonar un contenedor a partir de un contenedor existente emitiendo el comando lxc-clone :
# lxc-clone mydeb mydeb-clone
19. Y, finalmente, todos los contenedores creados residen en el directorio /var/lib/lxc/. Si, por algún motivo, necesita ajustar manualmente la configuración del contenedor, debe editar el archivo de configuración de cada directorio de contenedor.
# ls /var/lib/lxc
Estas son solo las cosas básicas que necesita saber para trabajar en LXC.