博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 容器_Linux容器的幕后花絮
阅读量:2523 次
发布时间:2019-05-11

本文共 4962 字,大约阅读时间需要 16 分钟。

linux 容器

您可以拥有没有 Linux容器吗? 没有 ? 没有 ?

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

Docker建立在LXC之上,如今有许多平台直接或间接利用LXC的工作。 这些平台中的大多数平台使创建和维护容器变得非常简单,对于大型部署而言,使用此类专用服务是很有意义的。 但是,并不是每个人都在管理大型部署或访问大型服务来了解容器化。 好消息是,您可以使用运行Linux的PC和本文仅创建,使用和学习容器。 本文将通过研究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:
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运行实际容器

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

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

翻译自:

linux 容器

转载地址:http://veczd.baihongyu.com/

你可能感兴趣的文章
Composite UI Application Block (CAB) 概念和术语
查看>>
64位MATLAB和C混合编程以及联合调试
查看>>
原生js大总结二
查看>>
PHP基础
查看>>
UVa 11488 超级前缀集合(Trie的应用)
查看>>
Django 翻译与 LANGUAGE_CODE
查看>>
[转]iOS教程:SQLite的创建数据库,表,插入查看数据
查看>>
【转载】OmniGraffle (一)从工具栏开始
查看>>
初识ionic
查看>>
java 中打印调用栈
查看>>
开发 笔记
查看>>
数据挖掘算法比赛 - 简单经验总结
查看>>
生成商户订单号/退款单号
查看>>
使用Android OpenGL ES 2.0绘图之六:响应触摸事件
查看>>
我们过去几年做对了哪些事
查看>>
ubuntu 16.04LTS
查看>>
javascript深入理解js闭包
查看>>
Java Bigdecimal使用
查看>>
SQL注入之绕过WAF和Filter
查看>>
jquery validate使用方法
查看>>