iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >如何进行Linux 容器的建立和简单管理
  • 631
分享到

如何进行Linux 容器的建立和简单管理

2023-06-16 18:06:24 631人浏览 安东尼
摘要

如何进行linux 容器的建立和简单管理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。cgroups 简介LXC 项目由一个 Linux 内核补丁和一些用户空间

如何进行linux 容器的建立和简单管理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

cgroups 简介

LXC 项目由一个 Linux 内核补丁和一些用户空间(userspace) 工具组成。这些工具使用由补丁增加的内核新特性,提供一套简化的工具来维护容器。2.6.29 版本后的 Linux 内核版本已经包含该补丁提供的大部分功能。所以强烈建议使用***的内核源代码。LXC 在资源管理方面依赖 Linux 内核的 cgroups (Control Groups) 系统,cgroups 系统是 Linux 内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。它最初由 Google 的工程师提出,后来被整合进 Linux 内核。cgroups 也是 LXC 为实现虚拟化所使用的资源管理手段,可以说没有 cgroups 就没有 LXC。cgroups 文件系统结构见图 1 。

如何进行Linux 容器的建立和简单管理

图 1.cgroups 文件系统结构

相关名词解释

控制族群(control group):控制族群就是一组按照某种标准划分的进程。cgroups 中的资源控制都是以控制族群为单位实现。一个进程可以加入到一个控制族群,也可以迁移到另一个控制族群。

层级(hierarchy)。控制族群可以组织成 hierarchical 的形式,既一颗控制族群树。控制族群树上的子节点控制族群是父节点控制族群的孩子,继承父控制族群的特定的属性。

子系统(subsytem)。一个子系统就是一个资源控制器,比如中央处理器子系统就是控制中央处理器时间分配的一个控制器。子系统必须附加(attach)到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制族群都受到这个子系统的控制。主要包括如下 9 个子系统:

  • blkio : 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等)。

  • cpu : 这个子系统使用调度程序提供对 中央处理器的 cgroup 任务访问。

  • cpuacct : 这个子系统自动生成 cgroup 中任务所使用的中央处理器报告。

  • cpuset : 这个子系统为 cgroup 中的任务分配独立中央处理器(在多核系统)和内存节点。

  • devices : 这个子系统可允许或者拒绝 cgroup 中的任务访问设备。

  • freezer : 这个子系统挂起或者恢复 cgroup 中的任务。

  • memory : 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。

  • net_cls : 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。

  • ns :ns 子系统提供了一个将进程分组到不同名称空间的方法。在具体名称空间中,进程可彼此互动,但会与在其它名称空间中运行的进程隔绝。这些分开的名称空间在用于操作系统级别的虚拟化时,有时也称之为容器。

搭建***个 LXC 虚拟计算机

本文使用的 Linux 发行版是 ubuntu 12.10 ,首先安装软件包:

#apt-get install lxc

安装软件包后要检查 Linux 发行版的内核对 LXC 的支持情况,可以使用下面命令 lxc-checkconfig 查看,见图 2 。

如何进行Linux 容器的建立和简单管理

图 2.lxc-checkconfig 命令

lxc-checkconfig 命令检查之后如果所有项目显示“enabled”表示可以直接使用 LXC。

建立一个 Ubuntu Server LXC 虚拟计算机系统

使用如下命令构建(执行过程见图)3:

#lxc-create  -t  ubuntu -n cjhlxc1

说明这里使用的是 ubuntu 模板,模板文件保存在/usr/lib/lxc/templates/目录下,这个目录下还有其他模板,可以使用如下命令查看,命令输出如下:

# tree /usr/lib/lxc/templates/ /usr/lib/lxc/templates/ ├── lxc-busybox ├── lxc-debian ├── lxc-fedora ├── lxc-opensuse ├── lxc-sshd ├── lxc-ubuntu └── lxc-ubuntu-cloud

图 3.建立一个 Ubuntu Server LXC 系统

如何进行Linux 容器的建立和简单管理

说明:安装过程要持续一段时间,另外安装过程要保证互联网连接。

上面命令完成后, 会在 /var/lib/lxc 目录中, 产生虚拟计算机 cjhlxc1 ,它的目录结构见图 4 。

如何进行Linux 容器的建立和简单管理

图 4.虚拟计算机 cjhlxc1 目录结构

LXC 虚拟计算机的基本管理——了解 LXC 虚拟计算机的管理命令

LXC 常见命令说明见表 1:

如何进行Linux 容器的建立和简单管理

表 1 LXC 常见命令说明

说明:更加详细的 lxc 命令列表和使用方法请读者参考官方网站文档。

图 5 是主要 LXC 命令执行过程的示意图

如何进行Linux 容器的建立和简单管理

图 5.LXC 命令执行过程的示意图

LXC 常见命令说明举例

启动 LXC 虚拟计算机

# lxc-start  -n  cjhlxc1

确实的账号和密码都是 ubuntu 然后登录虚拟计算机见图 6:

如何进行Linux 容器的建立和简单管理

图 6.登录虚拟计算机

列出当前系统所有的容器

检查目前有哪几个容器启动(若没有任何结果,则目前都没有容器启动):

# lxc-ls cjhlxc1 foo

使用 console 登入容器第 3 个控制台:

$ lxc-console -n cjhlxc1 –t 3

说明:如果没有指定 -t N 选项,则一个没有被使用的控制台将自动选择。要退出控制台,使用快捷键 Ctrl-a q 。

停止运行一个容器:

# lxc-stop -n cjhlxc1

获取一个容器的状态:

# lxc-info -n ol6ctr1

把一个容器销毁:

# lxc-destroy -n cjhlxc11

复制一个容器:

# lxc-clone -o cjhlxc1 -n ol6ctr2

暂停或恢复一个容器:

# lxc-freeze -n cjhlxc1 # lxc-unfreeze -n cjhlxc1

LXC 虚拟网络接口设置

了解 LXC 内置的网络架构

不管是哪套虚拟系统,只要是运作在 Linux 系统架构之内,所使用的虚拟网络都是 Linux 系统缺省的虚拟网络架构(即 TAP/TUP, Bridge)图 7 是示意图 。

如何进行Linux 容器的建立和简单管理

图 7.LXC 虚拟网络接口示意图

图 7 这个结构中两个容器使用 Veth Bridge,因为默认情况下,LXC 的模板脚本设置网络都是基于 Veth Bridge。在这种模式下,容器从 dnsmasq 服务器获取其 IP 地址。主机允许的容器连接到网络的其余部分(使用 iptables 的 NAT 规则 ,但这些规则不允许传入的连接到容器)。

除了 Veth Bridge 外,LXC 虚拟计算机还支持 Macvlan Bridge 和 Macvlan VEPA。有时我们可能需要一块物理网卡绑定多个 IP 以及多个 MAC 地址,虽然绑定多个 IP 很容易,但是这些 IP 会共享物理网卡的 MAC 地址,可能无法满足我们的设计需求,所以有了 MACVLAN 设备,其工作

MACVLAN 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡。限于篇幅这里介绍 Macvlan Bridge 和 Macvlan VEPA,感兴趣的用户可以参考参考文献中的介绍。

与 KVM 相同 LXC 安装完成,缺省就会产生一个网络接口(包含以下功能:交换机(Switch Hub) + DHCP 服务器 + NAT + Cache DNS 服务器),网络接口名称也就是 lxcbr0,可以通过如下命令验证:

# brctl show bridge name bridge id    STP enabled    interfaces lxcbr0   8000.3eef2e882ac9  no   vetheCYpw4

由上面的命令输出图就可以明显看到 lxcbr0 的相关信息,而这个网络接口,除了扮演交换机的功能之外,缺省也提供了 NAT 与 DHCP 的功能,简单来说就是 lxcbr0 除了提供交换机的功能之外,也提供了 DHCP 服务与 DNS 缓存服务 , 再通过 iptables 启动 NAT 的功能,由以下命令可以来证明,命令输出如下:

# iptables -t nat -L -n Chain PREROUTING (policy ACCEPT) target     prot opt source               destination Chain INPUT (policy ACCEPT) target     prot opt source               destination Chain OUTPUT (policy ACCEPT) target     prot opt source               destination Chain POSTROUTING (policy ACCEPT) target     prot opt source               destination MASQUERADE  all  --  10.0.3.0/24         !10.0.3.0/24

DHCP 服务与 DNS 缓存服务的功能,可以通过如下命令验证:

#ps aux | grep lxc

命令输出见图 8:

如何进行Linux 容器的建立和简单管理

图 8.查看 DHCP 服务与 DNS 缓存服务

修改 LXC 网络接口的方法

一般我们是通过修改 lxcbr0 的设置文件的方法来实现的。通过〝ifconfig lxcbr0〞的命令,可以得知 lxcbr0 本身的 IP 地址,而由〝ps aux | grep dnsmasq〞的命令,也可以清楚看到 DHCP Server 分配的 IP 范围,因此可以知道 LXC 缺省虚拟网络预设的 IP 区段为 10.0.3.0/24,那么,这些信息,可以修改吗?当然可以,以上这些网络信息,是 LXC 缺省预设的网络设置,所以可以通过修改配置文件的方式,来修改相关信息,以符合实际应用的状况,可以利用编辑器来修改 LXC 的网络配置文件:

# vi /etc/default/lxc

清单 1./etc/default/lxc 文件内容:

LXC_BRIDGE="lxcbr0" LXC_ADDR="10.0.3.1" LXC_NETMASK="255.255.255.0" LXC_NETWORK="10.0.3.0/24" LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" LXC_DHCP_MAX="253" LXC_SHUTDOWN_TIMEOUT=120

用户修改后要重新启动网络服务,使用如下命令:

#service lxc-net restart

设置 LXC 使用物理网络接口

相比 KVM 来说,LXC 可以直接使用物理网络接口(比如在本文中物理网卡是 eth0、eth2,笔者准备把 eth0 分配给 LXC 虚拟网络 )。首先使用“ ifconfig –a”命令查看一下,其中而 eth2 为实体计算机实际对外联机所使用的网络接口,所 eth0 ,就可以拿来设定给 LXC 虚拟计算机来使用。然后修改修改 LXC 虚拟计算机的配置文件:/var/lib/lxc/cjhlxc1/config。

#vi /var/lib/lxc/cjhlxc1/config

清单 2 /var/lib/lxc/cjhlxc1/config 文件内容:

lxc.network.type=phys lxc.network.link=eth0 lxc.network.flags=up lxc.utsname = cjhlxc1 #lxc.network.hwaddr = 00:16:3e:f9:ad:be #此行要注释掉# lxclxc.devttydir = lxc lxc.tty = 4 lxc.pts = 1024 lxc.rootfs = /var/lib/lxc/myt2/rootfs lxc.mount  = /var/lib/lxc/myt2/fstab lxc.arch = amd64 lxc.cap.drop = sys_module mac_admin lxc.pivotdir = lxc_putold

修改完成后存盘退出。简单说明一下以上参数:

lxc.network.type 指定用于容器的网络类型,包括四种类型:

  • empty:建立一个没有使用的网络接口

  • veth:容器将链接到 lxc.network.link 定义的网桥上,从而与外部通信。之前网桥必须在预先建立。

  • macvlan:一个 macvlan 的接口会链接到 lxc.network.link 上。

  • phys: lxc.network.link 指定的物理接口分配给容器。

lxc.network.flags 用于指定网络的状态,up 表示网络处于可用状态。

lxc.network.link 用于指定用于和容器接口通信的真实接口,比如一个网桥 br0 。

lxc.network.hwaddr 用于指定容器的网络接口的 mac 地址。

下面修改主机网络配置文件:

#vim /etc/network/interface

注意此时配置文件是空文件,没有内容。通常可以设置为固定 IP 地址模式(见清单 3)或者通过 DHCP 服务器获取 IP 地址模式(见清单 4)

清单 3.固定 IP 地址模式:

auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp dns-nameservers 10.0.0.4

清单 4.通过 DHCP 服务器获取 IP 地址模式:

auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.0.3 netmask 255.255.255.0 dns-nameservers 10.0.0.4

修改完成后存盘退出。然后重新启动网络服务:

#/etc/init.d/networking restart

下面启动 LXC 虚拟计算机:

# lxc-start  -n  cjhlxc1

注意一旦 LXC 虚拟计算机启动成功,在宿主计算机上使用〝ifconfig -a〞查看主机网络接口,用户会发现此时网络接口 eth0 消失了,只有 eth2 。这是因为 eth0 已经让 LXC 虚拟计算机给使用了。然后我们使用如下命令“ lxc-console -n cjhlxc1”登录 LXC 虚拟计算机发现此时 LXC 虚拟计算机的网络接口是 eth0。然后我们可以使用 ping 命令测试一下 LXC 虚拟计算机和互联网是否联通。

LXC 中文名称就是 Linux 容器工具,容器可以提供轻量级的虚拟化,以便隔离进程和资源,使用 LXC 的优点就是不需要安装太多的软件包,使用过程也不会占用太多的资源,本文循序渐进地介绍在 Linux 容器的建立和管理方法以及虚拟网络接口的设置方法。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网操作系统频道,感谢您对编程网的支持。

--结束END--

本文标题: 如何进行Linux 容器的建立和简单管理

本文链接: https://www.lsjlt.com/news/284719.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行Linux 容器的建立和简单管理
    如何进行Linux 容器的建立和简单管理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。cgroups 简介LXC 项目由一个 Linux 内核补丁和一些用户空间...
    99+
    2023-06-16
  • 如何用Pureftpd+PureDB建立简单的Linux ftp网站
    这篇文章将为大家详细讲解有关如何用Pureftpd+PureDB建立简单的Linux ftp网站,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Pureftpd是一款快速,高质量,功能齐全的f...
    99+
    2023-06-16
  • PHP应用程序如何在Linux容器中进行部署和管理?
    随着云计算的发展,容器技术越来越受到关注,越来越多的企业开始将应用程序部署在容器中,以提高应用程序的可移植性、可扩展性和可靠性。而PHP是一种流行的Web开发语言,很多Web应用程序都是使用PHP编写的。本文将介绍如何在Linux容器中部...
    99+
    2023-07-25
    linux linux 容器
  • 如何进行Kafka 0.10.1.0 Cluster的搭建和Topic简单操作
    如何进行Kafka 0.10.1.0 Cluster的搭建和Topic简单操作,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。【kafka cluster机器】:机器名称&n...
    99+
    2023-06-03
  • 如何利用java和sqlserver建立简易图书管理系统
    本文小编为大家详细介绍“如何利用java和sqlserver建立简易图书管理系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何利用java和sqlserver建立简易图书管理系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-02
  • 如何在GitLab中进行容器镜像管理
    如何在GitLab中进行容器镜像管理引言:容器技术在近年来快速发展,成为了现代软件开发和部署的重要工具。而容器镜像作为容器的基石,对于软件的开发、测试和发布都起到了重要作用。GitLab作为一款流行的代码管理平台,不仅可以管理代码,还可以管...
    99+
    2023-10-22
    管理 gitlab 容器镜像
  • Linux 进程管理中如何进行调度和进程切换
    这篇文章将为大家详细讲解有关Linux 进程管理中如何进行调度和进程切换,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是调度按照某种调度算法,从进程的ready队列中选择进程给CPU。为...
    99+
    2023-06-15
  • 如何使用vuex进行菜单管理
    这篇文章主要为大家展示了“如何使用vuex进行菜单管理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用vuex进行菜单管理”这篇文章吧。vuex 的优势在...
    99+
    2024-04-02
  • 如何进行orion的简单测试
    如何进行orion的简单测试,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。orion是一个做IO测试的小巧工具,可以测试随机读写,模拟混合负载等。在oracle 11g已经...
    99+
    2023-06-06
  • 如何进行docker容器集群管理平台的比较
    如何进行docker容器集群管理平台的比较,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。容器化和微服务是当前最热话题,不久之前,笔者(据说因为现在都不用笔了,“...
    99+
    2023-06-19
  • 如何使用SSH进行Linux SysOps管理
    使用SSH进行Linux SysOps管理的步骤如下:1. 确保目标Linux服务器已安装SSH服务器并且已启动。如果没有安装SSH...
    99+
    2023-10-09
    Linux
  • 如何进行Linux用户权限管理
    本篇文章给大家分享的是有关如何进行Linux用户权限管理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在一个Linux系统中有很多人同时进行开发,所有合理的管理Linux用户是...
    99+
    2023-06-28
  • 如何进行IO流的简单分析
    如何进行IO流的简单分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。IO流的分类:1、根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:Inpu...
    99+
    2023-06-02
  • 容器化后的Spring应用如何使用Shell进行管理?
    随着容器化技术的普及,越来越多的企业开始将应用程序打包成容器镜像来部署和运行。Spring作为一个优秀的Java应用框架,也跟随着这个潮流,提供了多种容器化的方案,如Docker和Kubernetes。在容器化后的Spring应用中,为了更...
    99+
    2023-11-03
    容器 spring shell
  • 如何进行Linux系统中软连接的建立与删除
    这篇文章的内容主要围绕如何进行Linux系统中软连接的建立与删除进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!Linux系统中软连接是什么?Linu...
    99+
    2023-06-28
  • 如何进行Linux任务的前后台管理
    本篇文章给大家分享的是有关如何进行Linux任务的前后台管理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们知道,Linux 是一个多任务的操作系统,也就是说,在同一时间,系...
    99+
    2023-06-05
  • 如何使用 Dockerfile 创建一个简单容器
    目录Dockerfile写一个 Dockerfile优化 Dockerfilecontainer shellDockerfile Dockerfile 是用于指导 docker 创建...
    99+
    2024-04-02
  • 用容器管理 Java 和 NPM,是不是更加简单易用?
    随着互联网的迅速发展,Java 和 NPM 已成为现代应用程序开发的必备工具。然而,这两种工具的安装和管理过程可能会让开发人员感到困惑和繁琐。幸运的是,现在有一种新的方式来管理这两种工具,那就是使用容器技术。 本文将介绍如何使用容器技术来管...
    99+
    2023-10-29
    bash 容器 npm
  • Linux如何进行网络管理、软件安装、进程管理操作
    这篇文章给大家分享的是有关Linux如何进行网络管理、软件安装、进程管理操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1、网络管理1.1 网络状态查看在Linux中经常使用ifconfig,rou...
    99+
    2023-06-15
  • 如何进行JPA中JPQL的简单查询
    如何进行JPA中JPQL的简单查询,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JPQL:Java持久化查询语言,以面向对象的查询语法构造查询语句。JPA使用j...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作