GNU/Linux >> Tutoriales Linux >  >> Cent OS

Configurar Linux Container con LXC en CentOS 7/RHEL 7

Los contenedores Linux (LXC) son un método de virtualización ligero a nivel de sistema operativo que nos permite ejecutar múltiples sistemas Linux aislados (contenedores) en un solo host. LXC no proporciona todas las funciones del software de virtualización estándar, como VMware, VirtualBox y KVM, sino que proporciona un entorno virtual que tiene su propia CPU, memoria, bloques de E/S y red. LXC crea un entorno Linux tan parecido a una instalación estándar de Linux pero sin necesidad de un kernel separado.

LXC es un software gratuito y 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 y cómo crear y administrar LXC usando la línea de comandos así como usando el portal web de LXC .

Requisitos

LXC no está disponible en el repositorio base. Entonces necesitamos agregar el repositorio EPEL al servidor usando el siguiente comando.

# yum -y install epel-release

Los contenedores LXC usan redes puente para tener acceso a/desde una red externa, antes de iniciar el contenedor debemos crear un puente de red en CentOS 7 / RHEL 7 . El nombre del puente de red debe ser "virbr0"

Instalar LXC en CentOS 7

Una vez que haya completado los requisitos previos, es el momento de instalar LXC. Instale el LXC y otros paquetes importantes necesarios para que los contenedores funcionen correctamente.

# yum -y install lxc lxc-templates libcap-devel libcgroup busybox wget bridge-utils lxc-extra

Ejecute el siguiente comando para verificar que todo esté bien para ejecutar contenedores.

# lxc-checkconfig

 Kernel configuration not found at /proc/config.gz; searching...
 Kernel configuration found at /boot/config-3.10.0-327.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: 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

Creación de contenedores de Linux

LXC viene con plantillas listas para usar para una fácil instalación de contenedores, y puede enumerar las plantillas disponibles usando el siguiente comando.

# ls /usr/share/lxc/templates/

 lxc-alpine    lxc-archlinux  lxc-centos  lxc-debian    lxc-fedora  lxc-openmandriva  lxc-oracle  lxc-sshd    lxc-ubuntu-cloud
 lxc-altlinux  lxc-busybox    lxc-cirros  lxc-download  lxc-gentoo  lxc-opensuse      lxc-plamo   lxc-ubuntu

Para crear un contenedor, emita el siguiente comando.

# lxc-create -n centos_lxc -t centos

donde,

-n

-t

Una vez que haya emitido el comando anterior, LXC comenzará a crear el contenedor con el nombre "centos_lxc “.

Salida de muestra:

Host CPE ID from /etc/os-release: cpe:/o:centos:centos:7
 Checking cache download in /var/cache/lxc/centos/x86_64/7/rootfs ...
 Downloading centos minimal ...
 Loaded plugins: fastestmirror
 base                                                                                                                                             | 3.6 kB  00:00:00
 updates                                                                                                                                          | 3.4 kB  00:00:00
 Determining fastest mirrors
 .
 .
 .
 .
 Complete!
 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: Successsed: 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

Tenga en cuenta los detalles de inicio de sesión anteriores y debe solicitar esta información para iniciar sesión en los contenedores.

Credenciales de contenedores

Para iniciar sesión en el contenedor (centos_lxc ), use la contraseña raíz temporal almacenada en la siguiente ubicación. En nuestro caso, “Root-centos_lxc-KRzJLy ” es la contraseña raíz de centos_lxc .

# cat /var/lib/lxc/centos_lxc/tmp_root_pass

 Root-centos_lxc-KRzJLy

o

Restablezca la contraseña de root con el siguiente comando.

# chroot /var/lib/lxc/centos_lxc/rootfs passwd

PD:Aún debe iniciar los contenedores.

Inicio de contenedores de Linux

Después de crear los contenedores, inícielo usando el siguiente comando, se ejecuta en segundo plano.

# lxc-start -n centos_lxc -d

Ahora, toma la consola del contenedor usando el siguiente comando.

Nota:utilizo "-t" con "0" para conectar el contenedor con tty0, solo porque tty1 no me respondía.

# lxc-console -n centos_lxc -t 0

Ingrese el nombre de usuario y la contraseña para iniciar sesión. Puede encontrar la credencial al final de la salida durante la creación de un contenedor. Debe cambiar la contraseña raíz en el primer inicio de sesión.

Salida de muestra:

Connected to tty 0
 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
 CentOS Linux 7 (Core)
 Kernel 3.10.0-327.el7.x86_64 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 ~]#

Una vez que haya iniciado sesión, puede realizar todo el trabajo en este contenedor como lo haría en un servidor Linux normal.

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 al contenedor (el contenedor aún se está ejecutando), ejecute el siguiente comando.

# lxc-console -n centos_lxc -t 0

Trabajar con contenedores de Linux

Para enumerar los contenedores en la computadora host, use el siguiente comando.

# lxc-ls

 centos_lxc

Además, enumere los contenedores que están actualmente activos y ejecutándose en la computadora host.

# lxc-ls --active

 centos_lxc

Dado que solo tengo un contenedor que se está ejecutando actualmente, es por eso que podría ver el mismo resultado para ambos comandos.

Si desea obtener la información completa del contenedor en ejecución, emita el siguiente comando.

# lxc-info -n centos_lxc

 Name:           centos_lxc
 State:          RUNNING
 PID:            4047
 IP:             192.168.12.16
 CPU use:        0.47 seconds
 BlkIO use:      6.32 MiB
 Memory use:     4.19 MiB
 KMem use:       0 bytes
 Link:           vethM3N48G
 TX bytes:      1.53 KiB
 RX bytes:      1.94 KiB
 Total bytes:   3.47 KiB

El comando anterior le brinda información detallada (nombre, estado, dirección IP, CPU, memoria, E/S y uso de la red) del contenedor "centos_lxc".

También puede usar la dirección IP para conectarse a los contenedores en lugar de la consola LXC.

Puede detener un contenedor en ejecución usando el comando "lxc-stop", use el siguiente comando para detener un contenedor "centos_lxc".

# lxc-stop -n centos_lxc

Clonación de contenedores de Linux

LXC tiene el futuro de clonar un contenedor del contenedor existente, ejecute el siguiente comando para clonar un contenedor "centos_lxc" existente en un nuevo contenedor "centos_lxc_clone".

Nota:debe detener un contenedor en ejecución antes de iniciar la clonación.

# lxc-clone centos_lxc centos_lxc_clone
 Created container centos_lxc_clone as copy of centos_lxc

Compruebe si un contenedor se ha creado correctamente.

# lxc-ls
 centos_lxc  centos_lxc_clone

Puede empezar a trabajar con un nuevo contenedor como de costumbre.

# lxc_start -n centos_lxc_clone -d
# lxc_console -n centos_lxc_clone -t 0
 Connected to tty 0
 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
 CentOS Linux 7 (Core)
 Kernel 3.10.0-327.el7.x86_64 on an x86_64
 centos_lxc_clone login: root
 Password:
 Last login: Sat Mar 26 14:11:17 from 192.168.12.1
 [root@centos_lxc_clone ~]#

Apague el contenedor desde el interior de la consola.

[root@centos_lxc_clone ~]# poweroff

Tomar una instantánea

LXC también tiene otro futuro llamado instantánea, use los siguientes comandos.

Nota:debe detener un contenedor antes de tomar una instantánea.

# lxc-stop -n centos_lxc_clone

Para una demostración, estoy tomando la instantánea de centos_lxc_clone.

# lxc-snapshot -n centos_lxc_clone

Salida de muestra:

lxc_container: lxccontainer.c: lxcapi_snapshot: 2879 Snapshot of directory-backed container requested.
lxc_container: lxccontainer.c: lxcapi_snapshot: 2880 Making a copy-clone.  If you do want snapshots, then
lxc_container: lxccontainer.c: lxcapi_snapshot: 2881 please create an aufs or overlayfs clone first, snapshot that
lxc_container: lxccontainer.c: lxcapi_snapshot: 2882 and keep the original container pristine.

Para saber dónde se guarda la instantánea, ejecute el siguiente comando.

# lxc-snapshot -L -n centos_lxc_clone
 snap0 (/var/lib/lxcsnaps/centos_lxc_clone) 2016:03:26 10:59:10

En Centos 7, las instantáneas de LXC se almacenan en “/var/lib/lxcsnaps/

Restauración de instantáneas

Para restaurar un contenedor desde la instantánea, use el siguiente comando.

# lxc-snapshot -r snap0 -n centos_lxc_clone

Retirar Contenedores

Para eliminar un contenedor por completo, use el siguiente comando.

# lxc-destroy -n centos_lxc_clone

Ejecución de un contenedor de Ubuntu en CentOS 7

Encontré varios problemas cuando intentaba ejecutar un contenedor de Ubuntu en CentOS, pude ejecutar Ubuntu con la ayuda de algunos ajustes compartidos en otros sitios web.

Instale los siguientes paquetes para contenedores basados ​​en Debian.

# yum -y install debootstrap perl
# cd /usr/sbin ; ln -sf debootstrap qemu-debootstrap

Ejecute el siguiente comando para reemplazar el espejo de Debian por el espejo de ubuntu.

# sed -i 's/DEF_HTTPS_MIRROR="https:\/\/mirrors.kernel.org\/debian"/DEF_HTTPS_MIRROR="https:\/\/mirrors.kernel.org\/ubuntu"/g' /usr/sbin/debootstrap

Gracias a unix.stackexchange.com

Obtenga el llavero preciso de Ubuntu y colóquelo en el directorio de llaveros.

# cd /tmp
# wget "http://archive.ubuntu.com/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2011.11.21.tar.gz"
# tar xzf ubuntu-keyring_2011.11.21.tar.gz
# mkdir /usr/share/keyrings/
# cp /tmp/ubuntu-keyring-2011.11.21/keyrings/ubuntu-archive-keyring.gpg /usr/share/keyrings/

Gracias a blog.toxa.de

Cree un contenedor de Ubuntu usando el siguiente comando.

# lxc-create -n ubuntu_lxc -t ubuntu

Checking cache download in /var/cache/lxc/precise/rootfs-amd64 ... 
Installing packages in template: ssh,vim,language-pack-en
Downloading ubuntu precise minimal ...
I: Retrieving Release 
I: Retrieving Release.gpg 
I: Checking Release signature
I: Valid Release signature (key id 630239CC130E1A7FD81A27B140976EAF437D05B5)
I: Retrieving Packages 
I: Validating Packages 
I: Retrieving Packages 

Generation complete.
Setting up libdevmapper1.02.1 (2:1.02.48-4ubuntu7.4) ...
Setting up dmsetup (2:1.02.48-4ubuntu7.4) ...
update-initramfs: deferring update (trigger activated)
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Processing triggers for initramfs-tools ...
Processing triggers for resolvconf ...
invoke-rc.d: policy-rc.d denied execution of start.
Download complete
Copy /var/cache/lxc/precise/rootfs-amd64 to /var/lib/lxc/ubuntu_lxc/rootfs ... 
Copying rootfs to /var/lib/lxc/ubuntu_lxc/rootfs ...
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Creating SSH2 ECDSA key; this may take some time ...
Timezone in container is not configured. Adjust it manually.
##
# The default user is 'ubuntu' with password 'ubuntu'!
# Use the 'sudo' command to run tasks as root in the container.
##

En el resultado anterior, puede ver que el usuario predeterminado es "ubuntu" y la contraseña del usuario es "ubuntu".

Tome una consola del contenedor de Ubuntu con el siguiente comando.

# lxc_console -n ubuntu_lxc

Ubuntu 12.04.5 LTS ubuntu_lxc console
ubuntu_lxc login: ubuntu
Password: 
Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.10.0-327.10.1.el7.x86_64 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.
Would you like to enter a security context? [N]  
ubuntu@ubuntu_lxc:~$

PD:no he comprobado la funcionalidad del servidor, excepto el inicio de sesión, publique aquí cualquier problema.

Eso es todo. Sé social, comparte esto con tus amigos.


Cent OS
  1. Configurar el servidor SysLog en CentOS 6 / RHEL 6

  2. Configurar Linux Container con LXC en Ubuntu 16.04

  3. Configure Rsyslog con MySQL y LogAnalyzer en CentOS/RHEL 6/5

  4. CentOS / RHEL 7:Cómo modificar los argumentos de GRUB2 con grubby

  5. Cómo crear un contenedor LXC usando lxcbr0 y virbr0 en CentOS/RHEL

Cómo instalar Java en RHEL 8 / CentOS 8 Linux

Cómo instalar WordPress en RHEL 8 / CentOS 8 Linux

Cómo instalar GIMP en CentOS 8 / RHEL 8 Linux

Cómo configurar el servidor NFS en CentOS 8 / RHEL 8

Cómo configurar Jenkins en CentOS 8 / RHEL 8

Cómo instalar y configurar contenedores LXC Linux en CentOS/RHEL/Ubuntu