| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 03|容器技术基本原理之Namespace -> 正文阅读 |
|
[系统运维]03|容器技术基本原理之Namespace |
以前被面试或者面试别人的时候,出现频率比较高的一个问题是:看你简历上写熟悉容器技术,那你是怎么理解容器的?还算可以的回答是:容器技术本身不是新的技术,容器本质上就是宿主机操作系统上的一个特殊的进程,利用Namespace和Cgroup技术实现了资源的隔离与限制,并且实现了容器镜像,解决了应用程序分发的问题。答到这里,可以说对容器的理解还是比较全面的了。 Docker的安装:本不想写网上一搜一堆,且不需要理解的东西,但是看好多文章里写的安装过程,多少有点坑,所以还是写一下,安装过程就在ubuntu上操作,因为CentOS7将来也就不维护了,听说ebay生产环境系统也都用ubuntu了。 step1: 更新ubuntu apt-get源
step2: 添加Docker官方GPG key
step3: 安装Docker稳定版仓库地址
step4: 安装Docker
通常安装完Docker就自动运行了,但是很多人想长期用这个Docker作为一个test或staging环境,那么直接用估计会有问题,Docker默认的存储目录在/var/lib/docker/下,有些主机的这个盘很小,尤其是云主机,用一段时间把系统盘占满了,还得迁走,就很麻烦,不如一步到位,把数据存储目录放到较大的盘上,比如/data/docker/。 step5: 编辑/lib/systemd/system/docker.service文件,在ExecStart选项后加上--data-root=/data/docker,这样就自定义了数据目录,结果如下所示:
然后重新加载systemd并重启Docker进程即可。
step6: 验证容器已经安装成功
用Docker运行一个Nginx容器:Docker作为工具来用,其实没有什么复杂的东西,日常只要掌握Dockerfile,会用一些基本的命令就可以了,下面以Nginx为基础,制作我们的镜像并运行。 step1: 编写Dockerfile
step2: 生成Docker镜像
step3: 查看生成的镜像,并使用该镜像启动容器
step4: 查看容器IP地址,并使用容器IP访问nginx服务,这里我们介绍使用nsenter命令,场景是我们的nginx镜像中并没有ifconfig命令,但是我们又想查看IP地址,这时就可以通过nsenter命令进入到容器的Namespace,并用宿主机上的命令来调整容器。
转入正题,细说Namespace: Namespace不是一项新技术,它是内核自带的一项功能,Docker之所以能实现资源隔离,就是调用了内核的Namespace功能。该功能对内核资源进行隔离,使得容器进程都可以在单独的命名空间中运行,并且只可以访问当前容器命名空间的资源。 Linux下的资源类型有很多,那么Namespace就也分为下面几类对资源进行限制:
上面列出了各种资源的隔离,下面就拿 PID namespace 来举例,看看这个在Linux操作系统里是如何实现的,Linux 系统中创建进程的系统调用是 clone(),如下代码所示:
但是一旦我们传入了 CLONE_NEWPID 参数,新创建的进程就进入了一个独立的空间,在这个空间里它自己的PID是1,在外面看来它就是一个正常的进程,进程号可能是xxx这种,但肯定不是1,因为1号进程是操作系统的systemd进程,如下代码就实现了进程隔离:
通俗来讲,一个进程在启动后,Namespace就给他一通包装,然后这个进程就在自己的小天地里自由的玩耍了。但齐天大圣终穷逃不出如来的五指山,对于开发者来讲,它仍然是操作系统上的一个进程罢了。 对于大多数人来讲,我们只需要知道Docker是如何实现进程隔离的,如果以后有需要去深入挖掘,就按着操作系统的Namespace功能的方向去找就好了。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 0:22:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |