Sådan installeres, oprettes og administreres LXC (Linux Containers) i RHEL/CentOS 7


LXC, akronym for Linux Containers, er en letvægts Linux-kernebaseret virtualiseringsløsning, der praktisk talt kører oven på operativsystemet, så du kan køre flere isolerede distributioner på samme tid.

Forskellen mellem LXC og KVM virtualisering er, at LXC ikke emulerer hardware, men deler det samme kernenavnsområde, svarende til chroot-applikationer.

Dette gør LXC til en meget hurtig virtualiseringsløsning sammenlignet med andre virtualiseringsløsninger, såsom VMware.

Denne artikel vil guide dig om, hvordan du kan installere, implementere og køre LXC-containere på en CentOS/RHEL- og Fedora-distribution.

Et fungerende Linux-operativsystem med minimal installation:

  1. Installation af CentOS 7 Linux
  2. Installation af RHEL 7
  3. Installation af Fedora 23 Server

Trin 1: Installation af LXC Virtualization i Linux

1. LXC virtualisering leveres gennem Epel repositories. For at bruge denne repo skal du åbne en terminal og installere Epel repositories i dit system ved at udstede følgende kommando:

# yum install epel-release

2. Inden du fortsætter med LXC-installationsprocessen, skal du sikre dig, at Perl sprogtolk og debootstrap-pakker er installeret ved at udstede nedenstående kommandoer.

# yum install debootstrap perl libvirt

3. Installer endelig LXC virtualiseringsløsning med følgende kommando.

# yum install lxc lxc-templates

4. Når LXC-tjenesten er installeret, skal du kontrollere, om LXC og libvirt-dæmonen kører.

# 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.

og kontroller LXC-kernevirtualiseringsstatus ved at udstede kommandoen nedenfor.

# 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

Trin 2: Opret og administrer LXC-containere i Linux

5. For at liste tilgængelige LXC-skabelonbeholdere, der allerede er installeret på dit system, skal du udstede nedenstående kommando.

# 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. Processen med at oprette en LXC-container er meget enkel. Kommandosyntaks til oprettelse af en ny container forklares nedenfor.

# lxc-create -n container_name -t container_template

I nedenstående uddrag opretter vi en ny container med navnet mydeb baseret på en debian -skabelon, der trækkes fra LXC-arkiver.

 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. Efter en række basisafhængigheder og pakker, der downloades og installeres i dit system, oprettes containeren. Når processen er afsluttet, vises en standardadgangskode til root-kontoen i en meddelelse. Skift denne adgangskode, når du starter og logger ind på containerkonsollen for at være sikker.

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. Nu kan du bruge lxc-ls til at liste dine containere og lxc-info for at få information om en kørende/stoppet container.

For at starte den nyoprettede container i baggrunden (køres som en dæmon ved at angive indstillingen -d ) skal du udstede følgende kommando:

# lxc-start -n mydeb -d

9. Når containeren er startet, kan du liste kørende containere ved hjælp af kommandoen lxc-ls --active og få detaljerede oplysninger om den kørende container.

# lxc-ls --active

10. For at logge ind på containerkonsollen skal du udstede kommandoen lxc-console mod et kørende containernavn. Log ind med brugerrod og adgangskoden genereret som standard af lxc supervisor.

Når du er logget ind i containeren, kan du køre flere kommandoer for at kontrollere distributionen ved at vise filindholdet /etc/issue.net , skift rodadgangskoden ved at udstede passwd kommando eller se detaljer om netværksgrænseflader med 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. For at løsne sig fra containerkonsollen og gå tilbage til din værtskonsol og lade containeren være i aktiv tilstand skal du trykke på Ctrl + a og derefter q på tastaturet.

For at stoppe en kørende container udstedes følgende kommando.

# lxc-stop -n mydcb

12. For at oprette en LXC-container baseret på en Ubuntu-skabelon skal du indtaste /usr/sbin/ -mappen og oprette følgende debootstrap-symlink.

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

13. Rediger qemu-debootstrap -fil med Vi-editoren, og udskift følgende to SPEJL-linjer som følger:

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

For reference, se følgende indhold og placer ovenstående to linjer som anført:

....
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. Opret endelig en ny LXC-container baseret på Ubuntu-skabelon, der udsteder den samme lxc-create -kommando.

Når processen med at generere Ubuntu-containeren er afsluttet, viser en meddelelse dine standardindloggingsoplysninger til containeren som illustreret på nedenstående skærmbillede.

# 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. Brug følgende syntaks for at oprette en bestemt container baseret på lokal skabelon:

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

Her er et uddrag af oprettelse af en debian wheezy container med en amd64 systemarkitektur.

# 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. For eksempel kan specifikke containere til forskellige distro-udgivelser og arkitekturer også oprettes ud fra en generisk skabelon, som downloades fra LXC-arkiver som illustreret i nedenstående eksempel.

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

Her er listen over lxc-create kommandolinjekontakter:

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

17. Containere kan slettes fra din vært med kommandoen lxc-destroy udstedt mod et containernavn.

# lxc-destroy -n mywheezy

18. En container kan klones fra en eksisterende container ved at udstede lxc-clone kommando:

# lxc-clone mydeb mydeb-clone

19. Og endelig findes alle oprettede containere i /var/lib/lxc/ -mappen. Hvis du af en eller anden grund skal justere containerindstillinger manuelt, skal du redigere konfigurationsfilen fra hver containermappe.

# ls /var/lib/lxc

Dette er bare de grundlæggende ting, du har brug for at vide for at arbejde dig rundt i LXC.