Cum se instalează, se creează și se administrează LXC (containerele Linux) în RHEL / CentOS 7
LXC , acronimul pentru Containerele Linux , este o soluție ușoară de virtualizare bazată pe kernelul Linux care practic rulează pe sistemul de operare, permițându-vă să difuzați mai multe distribuții izolate în același timp .
Diferența dintre LXC și virtualizarea KVM este că LXC nu emite hardware, ci împărtășește același spațiu de nume kernel, similar cu aplicațiile chroot.

Acest lucru face LXC o soluție de virtualizare foarte rapidă în comparație cu alte soluții de virtualizare, cum ar fi KVM, XEN sau VMware.
Acest articol vă va îndruma asupra modului în care puteți instala, implementa și executa containere LXC pe distribuții CentOS/RHEL și Fedora.
Un sistem de operare Linux cu instalare minimă:
- Installation of CentOS 7 Linux
- Installation of RHEL 7
- Installation of Fedora 23 Server
Pasul 1: Instalarea virtualizării LXC în Linux
1. Virtualizarea LXC este furnizată prin depozitele Epel. Pentru a utiliza acest repo, deschideți un terminal și instalați arhivele Epel în sistemul dvs. prin emiterea următoarei comenzi:
# yum install epel-release
2. Înainte de a continua procesul de instalare LXC, asigurați-vă că sunt instalate Perl interpretor de limbă și pachete debootstrap prin emiterea comenzilor de mai jos.
# yum install debootstrap perl libvirt
3. În cele din urmă, instalați soluția de virtualizare LXC cu următoarea comandă.
# yum install lxc lxc-templates
4. După instalarea serviciului LXC, verificați dacă se execută daemon LXC și libvirt .
# systemctl status lxc.service # systemctl start lxc.service # systemctl start libvirtd # systemctl status lxc.service
Stare> Verificați starea Daemon LXC div>
[[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.
și verificați starea de virtualizare a kernel-ului LXC prin emiterea comenzii de mai jos.
# lxc-checkconfig
Configurare> Verificați configurarea virtualizării kernelului LXC div>
[[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
Pasul 2: Creați și administrați containerele LXC în Linux
5. Pentru a lista lista de șabloane LXC disponibile, contactele deja instalate în sistemul dvs. conțin comanda de mai jos.
# ls -alh /usr/share/lxc/templates/
Containere> Listă de containere pentru șabloane LXC div>
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. Procesul de creare a unui container LXC este foarte simplu. Sintaxa de comandă pentru a crea un nou container este explicată mai jos.
# lxc-create -n container_name -t container_template
În fragmentul de mai jos vom crea un nou container numit mydeb
pe baza unui șablon debian
care va fi extras din depozitele LXC.
Container> Crearea containerului LXC div>
[[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. După o serie de dependențe de bază și pachete care vor fi descărcate și instalate în sistemul dvs., containerul va fi creat. Când procesul se termină, un mesaj va afișa parola implicită pentru contul rădăcină. Schimbați această parolă odată ce ați pornit și conectați-vă la consola de containere pentru a fi sigură.
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. Acum puteți utiliza lxc-ls
pentru a vă afișa containerele și lxc-info
pentru a obține informații despre un container rulat/oprit.
Pentru a porni noul container creat în fundal (se va executa ca un daemon prin specificarea opțiunii -d
), lansați următoarea comandă:
# lxc-start -n mydeb -d
9. După ce containerul a fost pornit, puteți să listați containerele care rulează utilizând comanda lxc-ls - active
și să obțineți informații detaliate despre containerul care rulează.
# lxc-ls --active
10. Pentru a vă conecta la lansarea consolei de contacte, comanda lxc-consolă
împotriva unui nume de container care rulează. Conectați-vă cu root-ul utilizatorului și parola generată în mod prestabilit de către supervizorul lxc.
După ce v-ați conectat în container, puteți rula mai multe comenzi pentru a verifica distribuția prin afișarea conținutului fișierului /etc/issue.net
, modificând parola de root prin emiterea comenzii passwd
sau vizualizați detalii despre interfețele de rețea cu ifconfig
.
# lxc-console -n mydeb # cat /etc/issue.net # ifconfig # passwd
LXC
[[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. Pentru a vă detașa de pe consola de containere și a vă întoarce la consola gazdă, lăsând containerul în stare activă, apăsați Ctrl + a
, apoi q < pe tastatură.
Pentru a opri lansarea unui container, executați următoarea comandă.
# lxc-stop -n mydcb
12. Pentru a crea un container LXC bazat pe un șablon Ubuntu, introduceți directorul /usr/sbin/
și creați următorul simbolink debootstrap .
# cd /usr/sbin # ln -s debootstrap qemu-debootstrap
Editați qemu-debootstrap
cu editorul Vi și înlocuiți următoarele două linii MIRROR <
DEF_MIRROR=”http://mirrors.kernel.org/ubuntu” DEF_HTTPS_MIRROR=”https://mirrors.kernel.org/ubuntu”
Pentru referință, consultați următorul conținut și plasați cele două linii de mai sus, după cum este indicat:
.... MAKE_TARBALL="" EXTRACTOR_OVERRIDE="" UNPACK_TARBALL="" ADDITIONAL="" EXCLUDE="" VERBOSE="" CERTIFICATE="" CHECKCERTIF="" PRIVATEKEY="" DEF_MIRROR=”http://mirrors.kernel.org/ubuntu” DEF_HTTPS_MIRROR=”https://mirrors.kernel.org/ubuntu”
14. În final, creați un nou container LXC bazat pe șablonul Ubuntu care emite aceeași comandă lxc-create
.
Odată ce procesul de generare a containerului Ubuntu se termină, un mesaj va afișa datele de conectare implicite pentru containere așa cum este ilustrat în imaginea de mai jos.
# lxc-create -n myubuntu -t ubuntu
LXC
Checking cache download in /var/cache/lxc/precise/rootfs-amd64 ... Installing packages in template: ssh,vim,language-pack-en Downloading ubuntu precise minimal ...
15. Pentru a crea un container specific bazat pe șabloane locale, utilizați următoarea sintaxă:
# lxc-create -n container_name -t container_template -- -r distro_release -a distro_architercture
Iată un fragment de creare a unui container debian wheezy cu o arhitectură de sistem amd64 .
# lxc-create -n mywheezy -t debian -- -r wheezy -a amd64
recipient
debootstrap is /sbin/debootstrap Checking cache download in /var/cache/lxc/debian/rootfs-wheezy-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... I: Found additional required dependencies: insserv libbz2-1.0 libdb5.1 libsemanage-common libsemanage1 libslang2 libustr-1.0-1 I: Found additional base dependencies: adduser debian-archive-keyring gnupg gpgv isc-dhcp-common libapt-pkg4.12 libbsd0 libclass-isa-perl libedit2 libgdbm3 libgssapi-krb5-2 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libncursesw5 libprocps0 libreadline6 libssl1.0.0 libstdc++6 libswitch-perl libusb-0.1-4 libwrap0 openssh-client perl perl-modules procps readline-common I: Checking component main on http://http.debian.net/debian... I: Retrieving libacl1 2.2.51-8 I: Validating libacl1 2.2.51-8 I: Retrieving adduser 3.113+nmu3 I: Validating adduser 3.113+nmu3 I: Retrieving apt 0.9.7.9+deb7u7 I: Validating apt 0.9.7.9+deb7u7 I: Retrieving libapt-pkg4.12 0.9.7.9+deb7u7 I: Validating libapt-pkg4.12 0.9.7.9+deb7u7 I: Retrieving libattr1 1:2.4.46-8 I: Validating libattr1 1:2.4.46-8 I: Retrieving base-files 7.1wheezy9 I: Validating base-files 7.1wheezy9 I: Retrieving base-passwd 3.5.26 ...
16 De exemplu, pot fi create containere specifice pentru diferite distribuții de date și arhitecturi dintr-un șablon generic care va fi descărcat din depozitele LXC, după cum se ilustrează în exemplul de mai jos.
# lxc-create -n mycentos6 -t download -- -d centos -r 6 -a i386
Iată lista comutatoarelor de comandă lxc-create
:
-n = name -t = template -d = distibution -a = arch -r = release
17. Containerele pot fi șterse de la gazdă cu comanda lxc-destroy
emisă împotriva unui nume de container.
# lxc-destroy -n mywheezy
18. Un container poate fi clonat dintr-un container existent prin emiterea unei comenzi lxc-clone
:
# lxc-clone mydeb mydeb-clone
19. Și, în final, toate contactele create se găsesc în directorul /var/lib/lxc/
. Dacă din anumite motive trebuie să ajustați manual setările pentru container, trebuie să editați fișierul de configurare din fiecare director de containere.
# ls /var/lib/lxc
Acestea sunt doar lucrurile de bază pe care trebuie să le cunoașteți pentru a vă deplasa în jurul LXC.