如何在Fedora Linux 26上安装和设置LXC(Linux容器)

时间:2020-01-09 10:39:17  来源:igfitidea点击:

如何在Fedora Linux版本26服务器上安装,创建和管理LXC(Linux容器,一种操作系统级别的虚拟化)?

LXC是Linux容器的缩写。
它只不过是用于在单个Linux主机上运行多个隔离的Linux发行版(系统容器)的操作系统级虚拟化技术。
本教程向您展示如何在Fedora Linux服务器上安装和管理LXC容器。

设置示例

LXC通常被描述为轻量级虚拟化技术。
您可以将LXC视为类固醇的根基 Jail。
没有涉及来宾操作系统。
您只能使用LXC运行Linux发行版。
您不能使用LXC运行MS-Windows或* BSD或任何其他操作系统。
您可以使用LXC运行CentOS,Fedora,Ubuntu,Debian,Gentoo或任何其他Linux发行版。
传统的虚拟化(例如KVM/XEN/VMWARE)和半虚拟化需要为每个实例提供完整的操作系统镜像。
您可以使用传统虚拟化来运行任何操作系统。

安装LXC

执行以下dnf命令以在Fedora 26上安装lxc和相关软件包:

$ sudo dnf install lxc lxc-templates lxc-extra debootstrap libvirt perl gpg

启动并启用所需的服务

首先使用systemctl命令启动名为libvirtd和lxc的虚拟化守护程序:

$ sudo systemctl start libvirtd.service
$ sudo systemctl start lxc.service
$ sudo systemctl enable lxc.service

输出示例:

Created symlink /etc/systemd/system/multi-user.target.wants/lxc.service ? /usr/lib/systemd/system/lxc.service.

验证服务正在运行:

$ sudo systemctl status libvirtd.service

和:

$ sudo systemctl status lxc.service

LXC网络

要查看为lxc配置的网络接口,请运行:

$ sudo brctl show

输出示例:

bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400293323	yes		virbr0-nic

您必须在文件/etc/lxc/default.conf中将default bridge设置为virbr0:

$ sudo vi /etc/lxc/default.conf

示例配置(用lxc.network.link的virbr0替换lxcbr0):

lxc.network.type = veth
lxc.network.link = virbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:xx:xx:xx

保存并关闭文件。
要查看容器使用的DHCP范围,请执行:

$ sudo systemctl status libvirtd.service | grep range

输出示例:

Jul 13 07:25:31 theitroad-f26 dnsmasq-dhcp[3760]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h

要检查当前内核是否支持lxc,请执行:

$ lxc-checkconfig

输出示例:

Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-4.11.9-300.fc26.x86_64
--- Namespaces --
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: 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
FUSE (for use with lxcfs): 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

如何创建Ubuntu Linux容器?

执行以下命令以创建Ubuntu 16.04 LTS容器:

$ sudo lxc-create -t download -n ubuntu-c1 -- -d ubuntu -r xenial -a amd64

输出示例:

Setting up the GPG keyring
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

--
You just created an Ubuntu container (release=xenial, arch=amd64, variant=default)

To enable sshd, run: apt-get install openssh-server

For security reason, container images ship without user accounts
and without a root password.

Use lxc-attach or chroot directly into the rootfs to set a root password
or create user accounts.

要设置管理员密码,请运行:

$ sudo chroot /var/lib/lxc/ubuntu-c1/rootfs/ passwd ubuntu
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

确保root帐户被锁定:

$ sudo chroot /var/lib/lxc/ubuntu-c1/rootfs/ passwd

要开始容器运行:

$ sudo lxc-start -n ubuntu-c1

要登录名为ubuntu-c1的容器,请使用先前设置的ubuntu用户和密码:

$ lxc-console -n ubuntu-c1

输出示例:
启动指定容器的控制台

现在,您可以安装软件包并配置服务器。
例如,要启用sshd,请运行apt-get命令/apt命令:

ubuntu@ubuntu-c1:~$ sudo apt-get install openssh-server

要从lxc-console退出,请输入Ctrl + a q退出控制台会话并返回主机。

如何创建Debain Linux容器?

执行以下命令以创建Debian 9容器:

$ sudo lxc-create -t download -n debian-c1 -- -d debian -r stretch -a amd64

输出示例:

Setting up the GPG keyring
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

--
You just created a Debian container (release=stretch, arch=amd64, variant=default)

To enable sshd, run: apt-get install openssh-server

For security reason, container images ship without user accounts
and without a root password.

Use lxc-attach or chroot directly into the rootfs to set a root password
or create user accounts.

设置根帐户密码,运行:

$ sudo chroot /var/lib/lxc/debian-c1/rootfs/ passwd

启动容器并登录以进行管理,运行:

$ sudo lxc-start -n debian-c1
$ lxc-console -n debian-c1

如何创建CentOS Linux容器?

输入以下命令来创建CentOS 7容器:

$ sudo lxc-create -t download -n centos-c1 -- -d centos -r 7 -a amd64

输出示例:

Setting up the GPG keyring
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

--
You just created a CentOS container (release=7, arch=amd64, variant=default)

To enable sshd, run: yum install openssh-server

For security reason, container images ship without user accounts
and without a root password.

Use lxc-attach or chroot directly into the rootfs to set a root password
or create user accounts.

设置root帐户密码并启动容器:

$ sudo chroot /var/lib/lxc/centos-c1/rootfs/ passwd
$ sudo lxc-start -n centos-c1
$ lxc-console -n centos-c1

如何创建Fedora Linux容器?

执行以下命令来创建Fedora 25容器:

$ sudo lxc-create -t download -n fedora-c1 -- -d fedora -r 25 -a amd64

输出示例:

Setting up the GPG keyring
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

--
You just created a Fedora container (release=25, arch=amd64, variant=default)

To enable sshd, run: dnf install openssh-server

For security reason, container images ship without user accounts
and without a root password.

Use lxc-attach or chroot directly into the rootfs to set a root password
or create user accounts.

设置root帐户密码并启动容器:

$ sudo chroot /var/lib/lxc/fedora-c1/rootfs/ passwd
$ sudo lxc-start -n fedora-c1
$ lxc-console -n fedora-c1

如何创建CentOS 6 Linux容器并将其存储在btrfs中?

您需要将硬盘创建为btrfs或将其格式化为btrfs并使用该硬盘:

# mkfs.btrfs /dev/sdb
# mount /dev/sdb /mnt/btrfs/

如果您没有/dev/sdb,请使用dd或fallocate命令创建镜像,如下所示:

# fallocate -l 10G /theitroad-btrfs.img
# losetup /dev/loop0 /theitroad-btrfs.img
# mkfs.btrfs /dev/loop0
# mount /dev/loop0 /mnt/btrfs/
# btrfs filesystem show

输出示例:

Label: none  uuid: 4deee098-94ca-472a-a0b5-0cd36a205c35
	Total devices 1 FS bytes used 361.53MiB
	devid    1 size 10.00GiB used 3.02GiB path /dev/loop0

现在创建一个CentOS 6 LXC:

# lxc-create -B btrfs -P /mnt/btrfs/ -t download -n centos6-c1 -- -d centos -r 6 -a amd64
# chroot /mnt/btrfs/centos6-c1/rootfs/ passwd
# lxc-start -P /mnt/btrfs/ -n centos6-c1
# lxc-console -P /mnt/btrfs -n centos6-c1
# lxc-ls -P /mnt/btrfs/ -f

输出示例:

NAME       STATE   AUTOSTART GROUPS IPV4            IPV6 
centos6-c1 RUNNING 0         -      192.168.122.145 

如何查看所有可用镜像的列表?

执行以下命令:

$ lxc-create -t download -n NULL -- --list

如何列出系统上现有的容器?

执行以下命令:

$ lxc-ls -f

输出示例:

NAME      STATE   AUTOSTART GROUPS IPV4            IPV6 
centos-c1 RUNNING 0         -      192.168.122.174 -    
debian-c1 RUNNING 0         -      192.168.122.241 -    
fedora-c1 RUNNING 0         -      192.168.122.176 -    
ubuntu-c1 RUNNING 0         -      192.168.122.56  

如何查询有关容器的信息?

语法为:

$ lxc-info -n {container}
$ lxc-info -n centos-c1

输出示例:

Name:           centos-c1
State:          RUNNING
PID:            5749
IP:             192.168.122.174
CPU use:        0.87 seconds
BlkIO use:      6.51 MiB
Memory use:     31.66 MiB
KMem use:       3.01 MiB
Link:           vethQIP1US
TX bytes:      2.04 KiB
RX bytes:      8.77 KiB
Total bytes:   10.81 KiB

如何停止/启动/重启容器?

语法为:

$ sudo lxc-start -n {container}
$ sudo lxc-start -n fedora-c1
$ sudo lxc-stop -n {container}
$ sudo lxc-stop -n fedora-c1

如何监视容器统计信息?

要显示容器,每秒更新一次,按内存使用排序:

$ lxc-top --delay 1 --sort m

要显示容器,每秒更新一次,按cpu排序,请使用:

$ lxc-top --delay 1 --sort c

要显示容器,每秒更新一次,按块I/O排序,请使用:

$ lxc-top --delay 1 --sort b

如何销毁/删除容器?

语法为:

$ sudo lxc-destroy -n {container}
$ sudo lxc-stop -n fedora-c2
$ sudo lxc-destroy -n fedora-c2

如果容器正在运行,请先将其停止并销毁:

$ sudo lxc-destroy -f -n fedora-c2

如何创建,列出和还原容器快照?

快照操作的语法如下。
请注意,您必须使用快照感知文件系统,例如BTRFS/ZFS或LVM。

为容器创建快照

$ sudo lxc-snapshot -n {container} -c "comment for snapshot"
$ sudo lxc-snapshot -n centos-c1 -c "13/July/17 before applying patches"

列出容器的快照

$ sudo lxc-snapshot -n centos-c1 -L -C

恢复容器快照

$ sudo lxc-snapshot -n centos-c1 -r snap0

销毁/删除容器快照

$ sudo lxc-snapshot -n centos-c1 -d snap0