Linux Container

Linux Container,第1张

LXC是Linux Containers的缩写,是linux内核自带的容器化工具,用于进程隔离,namespace隔离文件系统隔离。提供一种轻量的虚拟化解决方案。

本文的 *** 作基于的Ubuntu系统。

Ubuntu下直接安装

安装完成后查看配置情况

启动LXC container

配置桥接网络

TODO

查看一下当前可用的模板

利用可用的模板创建一个centos的容器

命令中

创建完成后,利用工具lxc-ls可以查看当前建立的container

新建立的container的文件系统保存在目录 /var/lib/lxc/<container>/rootfs 下面,同时还有一个配置文件config

从一个已经创建好的container克隆出一个新的来

查看克隆好的新的lxc container

修改config文件,通过添加一行配置修改cpu分配,例如分配了CPU 0给container

首先在container内部创建一个文件夹,比如说 /mnt/share

然后主机上也创建一个文件夹,比如说'/tmp/share'

这个时候主机上保存container文件系统的目录下面也会产生 /mnt/share 这个目录,找到这个目录的绝对路径

修改container的配置文件config, 添加一行

这几个flag 可以在调用clone时候作为参数传入,从而实现namespace的隔离,

从这个角度来说,container跟主要是进程角度的隔离,而不是传统的虚拟机,

因为它底层用用的同一个内核来调度。

cgroup 是linux 内核的另外一个控制和隔离进程的特性,他分为cpu ,memory,net,io等几个子系统,从而实现对进程cpu,内存,磁盘,网络等资源使用的控制。

制作自己容器,需要一个image ,可以从网上下一个,也可以自己制作,制作很简单,新装一个 *** 作系统,安装一些需要用到的软件包,然后用tar 制作 / 目录下的压缩包,去掉一些虚拟文件系统的文件,本文用的是自己制作的centos 6.5 的image。

容器实现过程可以归纳为

1, 用clone系统调用 创建子进程,传入namespace的那几个参数,实现namespace的隔离

2, 父进程中创建veth pair ,一个veth在自己的namespace,将另一个设置为子进程的namespace,实现container和宿主机的网络通信

3, 父进程创建cgroup memory和cpuset子系统,将子进程attach到cgroup子系统上,实现container 的资源限制和隔离

4, 子进程在自己的namespace里,设置主机名,mount proc虚拟文件系统,设置veth ip,chroot到centos 6镜像的位置, 最终将进程镜像替换成/bin/bash

5, 父进程调用waitpid 等待子进程退出


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7285802.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存