如何在Fedora Linux 26上安装和设置LXC(Linux容器)
如何在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