GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Configurar Linux Container con LXC en Ubuntu 16.04

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:xx
Reiniciar 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 KiB
222

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//snaps

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.


Ubuntu
  1. Configuración del servidor WebDAV en Ubuntu Linux

  2. Configuración inicial del servidor con Ubuntu 14.04

  3. Cómo instalar WordPress con Docker en Ubuntu

  4. Cómo configurar la conmutación por error de IP con KeepAlived en Ubuntu y Debian

  5. Configurar un punto de acceso Wifi en Linux Mint/Ubuntu

Cómo actuar como DJ en Ubuntu Linux con Mixxx

Cómo configurar GlassFish 4.1 con JAVA 8 en Ubuntu 15.04

Cómo conectar Kindle Fire HD con Ubuntu Linux

Configurar Linux Container con LXC en CentOS 7/RHEL 7

Cómo configurar WordPress en Ubuntu Server con Apache

Cómo configurar el cortafuegos con UFW en Ubuntu Linux