本文共 4962 字,大约阅读时间需要 16 分钟。
linux 容器
您可以拥有没有 Linux容器吗? 没有 ? 没有 ?
是的你可以。 在Docker成为家喻户晓的容器的几年前(也就是说,如果您生活在数据中心中), 项目提出了运行一种虚拟操作系统,共享同一内核但包含在定义的进程组中的概念。
Docker建立在LXC之上,如今有许多平台直接或间接利用LXC的工作。 这些平台中的大多数平台使创建和维护容器变得非常简单,对于大型部署而言,使用此类专用服务是很有意义的。 但是,并不是每个人都在管理大型部署或访问大型服务来了解容器化。 好消息是,您可以使用运行Linux的PC和本文仅创建,使用和学习容器。 本文将通过研究LXC,它的工作原理,工作原理以及出现问题时的故障排除方法来帮助您了解容器。
如果尚未安装,则可以使用软件包管理器安装 。
在Fedora或类似的设备上,输入:
$ sudo dnf install lxc lxc-templates lxc-doc
在Debian,Ubuntu和类似系统上,输入:
$ sudo apt install lxc
大多数容器都假定网络可用,并且大多数容器工具都希望用户能够创建虚拟网络设备。 容器所需的最基本的单元是网桥,它或多或少地相当于网络交换机的软件。 网络交换机有点像用于拆分耳机插Kong的智能Y适配器,因此两个人可以使用单独的耳机听到相同的声音,除了音频信号,网络交换机还可以桥接网络数据。
您可以创建自己的软件网桥,以便您的主机计算机和容器OS可以通过单个网络设备(以太网端口或无线网卡)发送和接收不同的网络数据。 这是一个重要的概念,一旦您从手动生成的容器中毕业,通常就会迷失方向,因为无论部署的大小如何,您运行的每个容器都不太可能拥有专用的物理网卡。 了解容器与虚拟网络设备进行通信非常重要,因此,如果容器失去网络连接,则知道从哪里开始进行故障排除。
要在计算机上创建网桥,您必须具有适当的权限。 对于本文,请使用sudo命令以root特权进行操作。 (但是,LXC文档提供了一个配置,以授予用户执行此操作的权限,而无需使用sudo 。)
$ sudo ip link add br0 type bridge
验证是否已创建虚拟网络接口:
$ sudo ip addr show br0 7: br0:mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 26:fa:21:5f:cf:99 brd ff:ff:ff:ff:ff:ff
由于br0被视为网络接口,因此它需要自己的IP地址。 选择一个与网络上任何现有IP地址都不冲突的有效本地IP地址,并将其分配给br0设备:
$ sudo ip addr add 192.168.168.168 dev br0
最后,确保br0已启动并正在运行:
$ sudo ip link set br0 up
LXC容器的配置文件可以很复杂,因为它需要在网络和主机系统中定义容器的位置,但是对于此示例,该配置很简单。 在您喜欢的文本编辑器中创建一个文件,并定义容器的名称和网络所需的设置:
lxc.utsname = opensourcedotcom lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = 4a:49:43:49:79:bd lxc.network.ipv4 = 192.168.168.1/24 lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3596
将此文件另存为您的主目录中的mycontainer.conf 。
lxc.utsname是任意的。 您可以随心所欲地调用容器; 它是您启动和停止它时要使用的名称。
网络类型设置为veth ,这是一种虚拟以太网跳线。 这个想法是,第ve个连接从容器到桥接设备,该设备由lxc.network.link属性(设置为br0)定义 。 容器的IP地址与网桥设备位于同一网络中,但唯一以避免冲突。
除了veth网络类型和up网络标志之外,您还发明了配置文件中的所有值。 可从man lxc.container.conf中获得属性列表。 (如果您的系统上缺少该文件,请检查软件包管理器以获取单独的LXC文档软件包。) / usr / share / doc / lxc / examples中有几个示例配置文件,您稍后应查看。
至此,您已成为可操作容器的三分之二:您拥有网络基础结构,并且已在虚拟PC中安装了虚拟网卡。 现在,您所需要做的就是安装操作系统。
但是,即使在此阶段,也可以通过在容器空间内启动外壳来看到LXC在工作。
$ sudo lxc-execute --name basic \ --rcfile ~/mycontainer.conf /bin/bash \ --logfile mycontainer.log #
在这个非常裸露的容器中,查看您的网络配置。 对您来说,它应该看起来很熟悉,但很独特。
# /usr/sbin/ip addr show 1: lo:mtu 65536 qdisc noqueue state [...] link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo [...] 22: eth0@if23: [...] qlen 1000 link/ether 4a:49:43:49:79:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.168.167/24 brd 192.168.168.255 scope global eth0 valid_lft forever preferred_lft forever inet6 2003:db8:1:0:214:1234:fe0b:3596/64 scope global valid_lft forever preferred_lft forever [...]
您的容器知道其虚假的网络基础结构和熟悉的唯一内核。
# uname -av Linux opensourcedotcom 4.18.13-100.fc27.x86_64 #1 SMP Wed Oct 10 18:34:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
使用exit命令离开容器:
# exit
建立一个完全容器化的环境比网络和配置步骤要复杂得多,因此您可以从LXC借用容器模板。 如果没有任何模板,请在软件存储库中查找单独的LXC模板包。
默认的LXC模板位于/ usr / share / lxc / templates中 。
$ ls -m /usr/share/lxc/templates/ lxc-alpine, lxc-altlinux, lxc-archlinux, lxc-busybox, lxc-centos, lxc-cirros, lxc-debian, lxc-download, lxc-fedora, lxc-gentoo, lxc-openmandriva, lxc-opensuse, lxc-oracle, lxc-plamo, lxc-slackware, lxc-sparclinux, lxc-sshd, lxc-ubuntu, lxc-ubuntu-cloud
选择您喜欢的,然后创建容器。 本示例使用Slackware。
$ sudo lxc-create --name slackware --template slackware
观看正在执行的模板几乎和从头开始构建模板一样具有教育意义。 它非常冗长,您可以看到lxc-create将容器的“根”设置为/ var / lib / lxc / slackware / rootfs,并且正在下载多个软件包并将其安装到该目录。
仔细阅读模板文件可以使您更好地了解所涉及的内容:LXC设置了最小的设备树,通用后台打印文件,文件系统表(fstab),初始化文件等。 它还阻止启动容器中没有意义的某些服务(例如用于硬件检测的udev)。 由于模板涵盖了广泛的典型Linux配置,因此如果您要设计自己的模板,明智的做法是将工作基于最接近要设置的模板。 否则,您一定要避免LXC项目已经绊倒并解决的遗漏错误(如果没有其他问题)。
一旦安装了最小操作系统环境,就可以启动容器。
$ sudo lxc-start --name slackware \ --rcfile ~/mycontainer.conf
您已经启动了该容器,但是尚未附加它。 (与前面的基本示例不同,这次您不仅运行shell,还运行了容器化的操作系统。)按名称附加到它。
$ sudo lxc-attach --name slackware #
检查环境的IP地址是否与配置文件中的IP地址匹配。
# / usr / sbin / ip addr SHOW | grep eth 34 : eth0@if35: < BROADCAST , MULTICAST , UP , LOWER_UP > mtu 1500 [ ... ] 1000 link / ether 4a: 49 : 43 : 49 : 79 :bd brd ff:ff:ff:ff:ff:ff link - netnsid 0 inet 192 . 168 . 168 . 167 / 24 brd 192 . 168 . 168 . 255 scope global eth0
退出容器,然后将其关闭。
# exit $ sudo lxc-stop slackware
在现实生活中,LXC使创建和运行安全容器变得容易。 自2008年LXC推出以来,容器已经走了很长一段路,因此请利用其开发人员的专业知识来发挥自己的优势。
尽管上的LXC指令使该过程变得简单,但本指南的手动操作应该有助于您了解幕后情况。
翻译自:
linux 容器
转载地址:http://veczd.baihongyu.com/