Kako namestiti, ustvariti in upravljati LXC (zabojniki za Linux) v RHEL/CentOS 7


LXC, kratica za Linux Containers, je lahka rešitev za virtualizacijo na osnovi jedra Linuxa, ki se praktično izvaja na vrhu operacijskega sistema in omogoča istočasno izvajanje več ločenih distribucij.

Razlika med virtualizacijo LXC in KVM je v tem, da LXC ne posnema strojne opreme, temveč si deli isti imenski prostor jedra, podobno kot aplikacije chroot.

Zaradi tega je LXC zelo hitra rešitev za virtualizacijo v primerjavi z drugimi rešitvami za virtualizacijo, kot je VMware.

Ta članek vas bo vodil po tem, kako lahko namestite, postavite in zaženete vsebnike LXC v distribucijah CentOS/RHEL in Fedora.

Delujoči operacijski sistem Linux z minimalno namestitvijo:

  1. Namestitev CentOS 7 Linux
  2. Namestitev RHEL 7
  3. Namestitev strežnika Fedora 23

1. korak: Namestitev LXC virtualizacije v Linux

1. Virtualizacija LXC je na voljo prek Epelovih skladišč. Če želite uporabiti to repo, odprite terminal in v sistem namestite repozitorije Epel, tako da izdate naslednji ukaz:

# yum install epel-release

2. Preden nadaljujete s postopkom namestitve LXC, zagotovite, da so nameščeni tolmači Perl in paketi debootstrap z izdajo spodnjih ukazov.

# yum install debootstrap perl libvirt

3. Na koncu namestite še rešitev LXC za virtualizacijo z naslednjim ukazom.

# yum install lxc lxc-templates

4. Po namestitvi storitve LXC preverite, ali se izvajata demon LXC in libvirt.

# systemctl status lxc.service
# systemctl start lxc.service
# systemctl start libvirtd 
# systemctl status lxc.service
 systemctl status lxc.service
lxc.service - LXC Container Initialization and Autoboot Code
   Loaded: loaded (/usr/lib/systemd/system/lxc.service; disabled)
   Active: inactive (dead)

 systemctl start lxc.service
 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.

in preverite stanje virtualizacije jedra LXC z izdajo spodnjega ukaza.

# lxc-checkconfig
 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

2. korak: Ustvarjanje in upravljanje vsebnikov LXC v Linuxu

5. Če želite seznam razpoložljivih vsebnikov predlog LXC, ki so že nameščeni v vašem sistemu, izdajte spodnji ukaz.

# ls -alh /usr/share/lxc/templates/
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. Postopek ustvarjanja vsebnika LXC je zelo preprost. Sintaksa ukaza za ustvarjanje novega vsebnika je pojasnjena spodaj.

# lxc-create -n container_name -t container_template

V spodnjem odlomku bomo na podlagi predloge debian ustvarili nov vsebnik z imenom mydeb , ki bo odstranjen iz skladišč LXC.

 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. Po vrsti osnovnih odvisnosti in paketov, ki bodo preneseni in nameščeni v vašem sistemu, bo ustvarjen vsebnik. Ko se postopek konča, bo sporočilo prikazalo vaše privzeto geslo za korenski račun. Ko zaženete to geslo, ga spremenite, da boste varni.

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. Zdaj lahko z lxc-ls navedete vsebnike in lxc-info za pridobitev informacij o delujočem/ustavljenem vsebniku.

Če želite zagnati novo ustvarjeni vsebnik v ozadju (zažene se kot demon z določitvijo možnosti -d ), izdajte naslednji ukaz:

# lxc-start -n mydeb -d

9. Po zagonu vsebnika lahko z ukazom lxc-ls --active izpišete tekoče vsebnike in dobite podrobne informacije o delujočem vsebniku.

# lxc-ls --active

10. Če se želite prijaviti v konzolo vsebnika, izdajte ukaz lxc-console proti delujočemu imenu vsebnika. Prijavite se z uporabniškim korenom in geslom, ki ga je privzeto ustvaril nadzornik lxc.

Ko ste prijavljeni v vsebnik, lahko zaženete več ukazov, da preverite distribucijo tako, da prikažete vsebino datoteke /etc/issue.net , spremenite korensko geslo z izdajo ukaza passwd ali si oglejte podrobnosti o omrežnih vmesnikih z ifconfig .

# lxc-console -n mydeb
# cat /etc/issue.net
# ifconfig
# passwd
 lxc-console -n mydcb

Connected to tty 1
Type &ltCtrl+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 :~# cat /etc/issue.net
Debian GNU/Linux 8
[email :~# 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 :~# passwd root
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

11. Če se želite ločiti od konzole vsebnika in se vrniti na gostiteljsko konzolo, pri čemer pustite vsebnik v aktivnem stanju, pritisnite Ctrl + a in nato q na tipkovnici.

Če želite ustaviti tekoči vsebnik, izdajte naslednji ukaz.

# lxc-stop -n mydcb

12. Če želite ustvariti vsebnik LXC, ki temelji na predlogi Ubuntu, vnesite imenik /usr/sbin/ in ustvarite naslednjo debootstrap symlink.

# cd /usr/sbin
# ln -s debootstrap qemu-debootstrap

13. Uredite datoteko qemu-debootstrap z urejevalnikom Vi in zamenjajte naslednji dve vrstici OGLEDALA, kot sledi:

DEF_MIRROR=”http://mirrors.kernel.org/ubuntu”
DEF_HTTPS_MIRROR=”https://mirrors.kernel.org/ubuntu”

Za referenco glejte naslednjo vsebino in postavite zgornji dve vrstici, kot je navedeno:

....
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. Na koncu ustvarite nov vsebnik LXC na podlagi predloge Ubuntu, ki izda isti ukaz lxc-create .

Ko se postopek ustvarjanja vsebnika Ubuntu konča, se prikažejo privzete poverilnice za prijavo vsebnika, kot je prikazano na spodnjem posnetku zaslona.

# lxc-create -n myubuntu -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 ...

15. Če želite na podlagi lokalne predloge ustvariti poseben vsebnik, uporabite naslednjo sintakso:

# lxc-create -n container_name -t container_template -- -r distro_release -a distro_architercture 

Tu je odlomek ustvarjanja debian piskajočega vsebnika s sistemsko arhitekturo amd64.

# lxc-create -n mywheezy -t debian -- -r wheezy -a amd64
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. Na primer, iz splošne predloge, ki se bo prenesla iz skladišč LXC, je mogoče ustvariti posebne vsebnike za različne izdaje distro in arhitekture, kot je prikazano v spodnjem primeru.

# lxc-create -n mycentos6 -t download -- -d centos -r 6 -a i386

Tu je seznam stikal ukazne vrstice lxc-create :

-n = name 
-t = template
-d = distibution
-a = arch
-r = release

17. Zabojnike lahko z vašega gostitelja izbrišete z ukazom lxc-kill , izdanim za ime vsebnika.

# lxc-destroy -n mywheezy

18. Vsebnik lahko klonirate iz obstoječega vsebnika z izdajo ukaza lxc-clone :

# lxc-clone mydeb mydeb-clone

19. In končno, vsi ustvarjeni vsebniki se nahajajo v imeniku /var/lib/lxc/. Če morate iz nekega razloga ročno prilagoditi nastavitve vsebnika, morate urediti konfiguracijsko datoteko iz vsakega imenika vsebnika.

# ls /var/lib/lxc

To so le osnovne stvari, ki jih morate vedeti, da se boste lažje potrudili po LXC.