阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux容器技术原理和使用

82次阅读
没有评论

共计 2145 个字符,预计需要花费 6 分钟才能阅读完成。

1.1 隔离和共享

在一个多员共用的开发环境或者一台服务器运行多个逻辑隔离的服务器进程。谁的运行环境也不希望影响到另一个谁。也就是一个物理机器需要虚拟化出多个环境或者容器。通过提供一种创建和进入容器的方式,操作系统让应用程序就像在独立的机器上运行一样,但又能共享很多底层的资源。

1.2 虚拟化 vs 容器

传统的虚拟化技术是通过硬件模拟或者操作系统软件实现,而容器技术可以比传统虚拟化更轻量级。

容器在提供隔离的同时,还通过共享这些资源节省开销,这意味着容器比真正的虚拟化的开销要小得多。例如,可以有效地共享公共文件(比如 glibc)的页缓存,因为所有容器都使用相同的内核,而且所有容器还常常共享相同的 libc 库(取决于容器配置)。这种共享常常可以扩展到目录中其他不需要写入内容的文件。

和传统虚拟化相比,容器启动很快,由于共享系统资源,一台主机可以运行上千个容器,并且容器镜像用类似 git 分发思想,用户更容易创建,分发,更新存储这些镜像。

1.3 前世和今生

今生是 docker 大流行的时代,而前世就是早于 1982 年的 chroot 工具,以及后面经过改进并且现在还在使用的 lxc 技术。早期的 docker 的代码实现基于 LXC(0.9 之前)。

Linux 容器功能是基于 cgroups 和 Namespace 来实现的. 所以要了解 Linux 容器必须先了解 cgroup 和 Namespace.

2.1、cgroups(控制组)

cgroups 是将进程分组管理的内核功能. 通过 cgroups 可以隔离进程, 同时还可以控制进程的资源占用 (CPU, 内存等等) 情况在操作系统底层限制物理资源,起到 Container 的作用。进程可用的 cpu 资源由 cpuset 指定。

2.2、Namespace (命名空间)

Namespace 让每个进程组有独立的 PID, IPC 和网络空间.Namespace 通过 clone 系统调用来实现的.

clone 系统调用的第 3 个参数 flags 就是通过设置 Namespace 来划分资源的.

LXC 依赖于 epel-release 的安装,EPEL(Extra Packages for Enterprise Linux)是 Fedora 社区打造提供高质量软件包的项目,相当于一个第三方源。

yum install epel-release -y

然后再安装 LXC 相关的工具包,和创建容器所需要的模板 lxc-templates

yum install lxc lxc-templates -y

安装完使用 lxc-checkconfig 检查下操作系统对容器技术的支持

Linux 容器技术原理和使用

3.1 LXC 工具包概览

LXC 所有的操作工具 api 都在这里,可以对 LXC 进行相应的操作。

Linux 容器技术原理和使用

LXC 所有命令

3.2 创建一个容器

使用预定义的模板创建一个容器。它会根据模板设置自动下载依赖环境包并安装。

lxc-create -n 容器名称 -t 模板(不需要加 lxc)lxc-create -n mariolu-console -t centos

模板就是第 3 节安装的 lxc-templates 工具包。所有模板放在这个目录下 /usr/share/lxc/templates/

Linux 容器技术原理和使用

LXC 的所有模板

跟 chroot 思想一样,安装完容器,所有的主机文件夹根目录被重定义到 /var/lib/lxc/mariolu-console

Linux 容器技术原理和使用

重新定义的 root 路径

3.3 启动容器

就像安装完机器后,我们要开机启动服务器。Lxc 也有相应的步骤就是

lxc-start -n mariolu-console
Linux 容器技术原理和使用

启动界面

但是我们很快就发现,启动需要密码,但是使用容器创建没有输入密码,难道是有什么默认密码吗

Linux 容器技术原理和使用

在这里并不能看到 root 密码,密码或者被用 x 字符替代,或者是一串 hash 码。

cat /var/lib/lxc/mariolu-console/rootfs/etc/shadowchroot /var/lib/lxc/mariolu-console/rootfs passwd

网络搜索没找到默认密码,但是找到了这么一句话:

The root password is set up as expired and will require it to be changedat first login, which you should do as soon as possible. If you lose the root password or wish to change it without starting the container, you can change it from the host by running the following command (which will also reset the expired flag)

chroot /var/lib/lxc/sspl-test/rootfs passwd

YES! Give Me Five! 这个告诉我们重置密码的命令。我们新开一个窗口,完成密码的重置,然后重新切换回原来的窗口,这时候就可以用密码愉快的登陆了。

Linux 容器技术原理和使用
Linux 容器技术原理和使用

登录成功

好啦!今天的分享到这里就结束了,希望大家持续关注马哥教育官网,每天都会有大量优质内容与大家分享!声明: 文章转载于网络,版权归原作者所有!

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-12-03发表,共计2145字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中