linux 容器_Linux容器的幕后花絮

linux 容器

您可以拥有没有Docker的 Linux容器吗? 没有OpenShift ? 没有Kubernetes

是的你可以。 在Docker成为家喻户晓的容器的几年前(也就是说,如果您生活在数据中心中), LXC项目提出了运行一种虚拟操作系统,共享同一内核但包含在定义的进程组中的概念。

Docker建立在LXC之上,如今有许多平台直接或间接利用LXC的工作。 这些平台中的大多数平台使创建和维护容器变得非常简单,对于大型部署而言,使用此类专用服务是很有意义的。 但是,并不是每个人都在管理大型部署或访问大型服务来了解容器化。 好消息是,您可以使用运行Linux的PC和本文仅创建,使用和学习容器。 本文将通过研究LXC,它的工作原理,工作原理以及出现问题时的故障排除方法来帮助您了解容器。

避开简单性

Linux容器网站。

安装LXC

如果尚未安装,则可以使用软件包管理器安装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: <BROADCAST,MULTICAST> 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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> [...] 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运行实际容器

在现实生活中,LXC使创建和运行安全容器变得容易。 自2008年LXC推出以来,容器已经走了很长一段路,因此请利用其开发人员的专业知识来发挥自己的优势。

尽管linuxcontainers.org上的LXC指令使该过程变得简单,但本指南的手动操作应该有助于您了解幕后情况。

翻译自: https://opensource.com/article/18/11/behind-scenes-linux-containers

linux 容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值