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:
- Installation af CentOS 7 Linux
- Installation af RHEL 7
- 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 <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 :~# 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.