Los contenedores de Linux (LXC) son un software de virtualización de nivel de sistema operativo liviano y de código abierto que nos ayuda a ejecutar múltiples sistemas Linux aislados (contenedores) en un solo host de Linux. LXC proporciona un entorno Linux tan parecido a una instalación estándar de Linux pero sin la necesidad de un kernel separado. LXC no es un reemplazo del software de virtualización estándar como VMware, VirtualBox y KVM, pero es lo suficientemente bueno para proporcionar un entorno aislado que tiene su propia CPU, memoria, bloque de E/S y red.
LXC se publica bajo la licencia GNU LGPLv2.1+. El proyecto LXC está patrocinado por Canonical Ltd, que está detrás del sistema operativo Ubuntu.
En esta guía, le mostraré cómo instalar LXC en Ubuntu 16.04 y cómo crear y administrar LXC usando la línea de comando así como usando el Portal web de LXC .
Este tutorial también debería funcionar en versiones anteriores de Ubuntu, como Ubuntu 14.04/14.10/15.04/15.10
Requisitos previos:
Los contenedores LXC usan redes de puente para tener acceso a/desde una red externa, antes de iniciar el contenedor debemos crear un puente de red en Ubuntu.
Siga los pasos para configurar el puente en Ubuntu; Estoy creando una interfaz puenteada “br0 ” utilizando tarjeta ethernet “ens33 ”
$ sudo nano /etc/network/interfaces # interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback ##Bridge Name ### auto br0 ### Bridge Information iface br0 inet static bridge_ports ens33 bridge_stp off bridge_fd 9 ### Bridge IP ### address 192.168.12.15 netmask 255.255.255.0 network 192.168.12.0 broadcast 192.168.12.255 gateway 192.168.12.2 dns-nameservers 8.8.8.8
Instalar LXC en Ubuntu 16.04:
Ahora es el momento de instalar LXC. Instale el LXC y otros paquetes para que los contenedores funcionen correctamente.
$ sudo apt-get install lxc lxc-templates wget bridge-utils
Emita el siguiente comando para comprobar que todo está bien para ejecutar contenedores.
$ sudo lxc-checkconfig Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-4.4.0-15-generic --- 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 FUSE (for use with lxcfs): enabled --- Checkpoint/Restore --- checkpoint restore: enabled 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
Configuración de la red LXC:
Deshabilite el puente predeterminado “lxcbr0 “, se creó como parte de la instalación de LXC.
$ sudo nano /etc/default/lxc-net
Establecer "USE_LXC_BRIDGE ” a “falso “.
USE_LXC_BRIDGE="false"
Configure LXC para usar el puente “br0 “, que creamos antes. Si ya tiene algún otro puente configurado, puede establecerlo en el siguiente archivo.
$ sudo nano /etc/lxc/default.conf
lxc.network.type = veth lxc.network.link = br0 # Replace with your bridge name lxc.network.flags = up lxc.network.hwaddr = 00:16:3e:xx:xx:xxReiniciar el servidor para habilitar el puente de red
Creación del primer contenedor de Linux:
LXC le proporciona las plantillas listas para usar para una fácil instalación de contenedores de Linux. Las plantillas generalmente se encuentran en /usr/share/lxc/templates .
$ sudo ls /usr/share/lxc/templates/ lxc-alpine lxc-archlinux lxc-centos lxc-debian lxc-fedora lxc-openmandriva lxc-oracle lxc-slackware lxc-sshd lxc-ubuntu-cloud lxc-altlinux lxc-busybox lxc-cirros lxc-download lxc-gentoo lxc-opensuse lxc-plamo lxc-sparclinux lxc-ubuntu
Vamos a crear nuestro primer contenedor de Ubuntu, ejecute el siguiente comando en la terminal
$ sudo lxc-create -n ubuntu_lxc -t ubuntu
donde,
-n
-t
LXC comenzará a crear el contenedor “ubuntu_lxc “, obtendrías un resultado como el siguiente.
Salida de muestra:
Checking cache download in /var/cache/lxc/xenial/rootfs-amd64 ... Installing packages in template: ssh,vim,language-pack-en Downloading ubuntu xenial minimal ... I: Retrieving InRelease I: Checking Release signature I: Valid Release signature (key id 790BC7277767219C42C86F933B4FE6ACC0B21F32) I: Retrieving Packages I: Validating Packages I: Retrieving Packages I: Validating Packages I: Resolving dependencies of required packages... I: Resolving dependencies of base packages... . . . Download complete Copy /var/cache/lxc/xenial/rootfs-amd64 to /var/lib/lxc/ubuntu_lxc/rootfs ... Copying rootfs to /var/lib/lxc/ubuntu_lxc/rootfs ... Generating locales (this might take a while)... en_IN.UTF-8... done Generation complete. Creating SSH2 RSA key; this may take some time ... 2048 SHA256:2gY+KoAVdyeFbKZSjueMtV5pxuMNvPIltXCazRYSpJA root@raj-virtual-machine (RSA) Creating SSH2 DSA key; this may take some time ... 1024 SHA256:+pXVAkgv7kUDs2iNf7AKbyHMe58OIopJFtnfwJ1fpK0 root@raj-virtual-machine (DSA) Creating SSH2 ECDSA key; this may take some time ... 256 SHA256:vh1u7wgeMPMeZTWvidZT34FTsQ+oQUKBpJzazjp1Khc root@raj-virtual-machine (ECDSA) Creating SSH2 ED25519 key; this may take some time ... 256 SHA256:qZvWvYnmJusDZhq5IJ/r8UsWBkrSHUg2vWCevMJgFZk root@raj-virtual-machine (ED25519) invoke-rc.d: policy-rc.d denied execution of start. Current default time zone: 'Etc/UTC' Local time is now: Thu Apr 7 17:53:19 UTC 2016. Universal Time is now: Thu Apr 7 17:53:19 UTC 2016. ## # The default user is 'ubuntu' with password 'ubuntu'! # Use the 'sudo' command to run tasks as root in the container. ##
Tome nota de los detalles de inicio de sesión, necesitaría esta información para iniciar sesión en los contenedores.
Si desea crear un contenedor basado en Ubuntu 14.04, use el siguiente comando.
$ sudo lxc-create -t ubuntu -n trusty_lxc -- -r trusty -a amd64
-r
-un
Inicio de contenedores de Linux:
Una vez que haya creado los contenedores, inícielo con el siguiente comando, -d para ejecutar los contenedores en segundo plano.
$ sudo lxc-start -n ubuntu_lxc -d
Ahora, toma una consola del contenedor usando el siguiente comando.
$ sudo lxc-console -n ubuntu_lxc
Ingrese el nombre de usuario (ubuntu) y la contraseña (ubuntu) para iniciar sesión. Puede encontrar la credencial predeterminada al final de la salida durante la creación de un contenedor.
Salida de muestra:
Connected to tty 1 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself Ubuntu Xenial Xerus (development branch) ubuntu_lxc pts/0 ubuntu_lxc login: ubuntu Password: Welcome to Ubuntu Xenial Xerus (development branch) (GNU/Linux 4.4.0-15-generic x86_64) * Documentation: https://help.ubuntu.com/ The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. ubuntu@ubuntu_lxc:~$
Puede realizar todo su trabajo en este contenedor como lo hace en un servidor Linux.
Para salir de la consola del contenedor, presione “Ctrl+a” seguido de “q” . Ahora, volverá a la terminal de la computadora host.
Si desea volver a conectarse a la consola del contenedor (el contenedor aún se está ejecutando), ejecute el siguiente comando.
$ sudo lxc-console -n ubuntu_lxc
Trabajar con contenedores de Linux:
Para enumerar los contenedores disponibles en la máquina host, use el siguiente comando.
$ sudo lxc-ls ubuntu_lxc
Use el siguiente comando para enumerar los contenedores que se están ejecutando actualmente en la computadora host.
$ sudo lxc-ls --active ubuntu_lxc
Podría ver el mismo resultado para ambos comandos, ya que solo tengo un contenedor que se está ejecutando actualmente.
Puede usar el siguiente comando para enumerar los contenedores con información detallada.
$ sudo lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 ubuntu_lxc RUNNING 0 - 192.168.12.18 -
Para obtener los detalles del contenedor en ejecución, emita el siguiente comando.
$ sudo lxc-info -n ubuntu_lxc Name: ubuntu_lxc State: RUNNING PID: 2933 IP: 192.168.12.18 CPU use: 0.90 seconds BlkIO use: 20.96 MiB Memory use: 31.67 MiB KMem use: 0 bytes Link: vethFLQOYF TX bytes: 3.21 KiB RX bytes: 6.41 KiB Total bytes: 9.62 KiB222
Puede usar la dirección IP para conectarse a los contenedores.
Puede detener la ejecución de contenedores usando el comando "lxc-stop", use el siguiente comando para detener "ubuntu_lxc".
$ sudo lxc-stop -n ubuntu_lxc
Contenedores de clonación:
LXC ofrece la función de clonar un contenedor desde el contenedor existente, ejecute el siguiente comando para clonar un contenedor "ubuntu_lxc" existente en un nuevo contenedor "ubuntu_lxc_clone".
Nota:debe detener un contenedor antes de iniciar la clonación.
$ sudo lxc-copy -n ubuntu_lxc -N ubuntu_lxc_clone
Compruebe si un contenedor se ha creado correctamente.
$ sudo lxc-ls ubuntu_lxc ubuntu_lxc_clone
Puede iniciar el contenedor clonado y comenzar a trabajar en él.
$ sudo lxc-start -n ubuntu_lxc_clone
$ sudo lxc-console -n ubuntu_lxc_clone Connected to tty 1 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself Ubuntu Xenial Xerus (development branch) ubuntu_lxc_clone pts/0 ubuntu_lxc_clone login: ubuntu Password: Last login: Sat Apr 9 16:15:22 UTC 2016 from 192.168.12.1 on pts/4 Welcome to Ubuntu Xenial Xerus (development branch) (GNU/Linux 4.4.0-15-generic x86_64) * Documentation: https://help.ubuntu.com/ To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. ubuntu@ubuntu_lxc_clone:~$
Apague el contenedor desde la consola LXC.
ubuntu@ubuntu_lxc_clone:~$ sudo poweroff
Tomar una instantánea:
LXC también ofrece otra característica llamada instantánea, siga los pasos a continuación para realizar la instantánea.
Nota:antes de tomar una instantánea, asegúrese de que el contenedor no se esté ejecutando. Detenga un contenedor en ejecución con el siguiente comando.
$ sudo lxc-stop -n ubuntu_lxc_clone
Para una demostración, tomemos una instantánea de ubuntu_lxc_clone.
$ sudo lxc-snapshot -n ubuntu_lxc_clone
Salida de muestra:
lxc-snapshot: lxccontainer.c: do_lxcapi_snapshot: 3371 Snapshot of directory-backed container requested. lxc-snapshot: lxccontainer.c: do_lxcapi_snapshot: 3372 Making a copy-clone. If you do want snapshots, then lxc-snapshot: lxccontainer.c: do_lxcapi_snapshot: 3373 please create an aufs or overlayfs clone first, snapshot that lxc-snapshot: lxccontainer.c: do_lxcapi_snapshot: 3374 and keep the original container pristine.
Para saber dónde se guarda la instantánea, ejecute el siguiente comando.
$ sudo lxc-snapshot -L -n ubuntu_lxc_clone snap0 (/var/lib/lxc/ubuntu_lxc_clone/snaps) 2016:04:09 22:35:16
En Ubuntu, las instantáneas de LXC se almacenan en “/var/lib/lxc/
Restauración de instantánea:
Para restaurar un contenedor desde la instantánea que tomamos anteriormente, use el siguiente comando.
$ sudo lxc-snapshot -r snap0 -n ubuntu_lxc_clone
Destrucción de Contenedores:
Para eliminar un contenedor, use el siguiente comando.
Nota:debe eliminar las instantáneas antes de destruir los contenedores. ($sudo lxc-snapshot -d snap0 -n ubuntu_lxc_clone)
$ sudo lxc-destroy -n ubuntu_lxc_clone
Ejecución de un contenedor CentOS en Ubuntu 16.04:
Instale el paquete "yum" para contenedores basados en Redhat.
$ sudo apt-get install yum
Cree un contenedor de CentOS 7 con el siguiente comando.
$ sudo lxc-create -n centos_lxc -t centos -- -R 7 -a x86_64 Host CPE ID from /etc/os-release: Checking cache download in /var/cache/lxc/centos/x86_64/7/rootfs ... Downloading centos minimal ... base | 3.6 kB 00:00 base/primary_db | 5.3 MB 12:26 updates | 3.4 kB 00:00 updates/primary_db | 3.9 MB 02:17 Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package chkconfig.x86_64 0:1.3.61-5.el7 will be installed Complete! Fixing rpmdb location ... Download complete. Copy /var/cache/lxc/centos/x86_64/7/rootfs to /var/lib/lxc/centos_lxc/rootfs ... Copying rootfs to /var/lib/lxc/centos_lxc/rootfs ... sed: can't read /var/lib/lxc/centos_lxc/rootfs/etc/init/tty.conf: No such file or directory Storing root password in '/var/lib/lxc/centos_lxc/tmp_root_pass' Expiring password for user root. passwd: Success sed: can't read /var/lib/lxc/centos_lxc/rootfs/etc/rc.sysinit: No such file or directory sed: can't read /var/lib/lxc/centos_lxc/rootfs/etc/rc.d/rc.sysinit: No such file or directory Container rootfs and config have been created. Edit the config file to check/enable networking setup. The temporary root password is stored in: '/var/lib/lxc/centos_lxc/tmp_root_pass' The root password is set up as expired and will require it to be changed at first login, which you should do as soon as possible. If you lose the root password or wish to change it without starting the container, you can change it from the host by running the following command (which will also reset the expired flag): chroot /var/lib/lxc/centos_lxc/rootfs passwd
Puede obtener las credenciales predeterminadas al final de la salida.
Inicie y tome una consola del contenedor de Ubuntu con el siguiente comando. Debe cambiar la contraseña raíz en el primer inicio de sesión.
$ sudo lxc-start -n centos_lxc -d $ sudo lxc-console -n centos_lxc Connected to tty 1 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself CentOS Linux 7 (Core) Kernel 4.4.0-15-generic on an x86_64 centos_lxc login: root Password: You are required to change your password immediately (root enforced) Changing password for root. (current) UNIX password: New password: Retype new password: [root@centos_lxc ~]#
¡Eso es todo! gracias por leer. Sé social, comparte esto con tus amigos.