0%

HTTP的全称 HyperText Transfer Protocol,即超文本传输协议,程序员自己发明的协议之一,基于TCP的应用层协议。 HTTP协议是基于请求-响应的模式:

mark

HTTP是一种无状态协议,HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。

mark

现在即将开始真正踏上构造自己的容器的道路。我们会基于当前的操作系统创建一个与宿主机隔离的容器环境,下面就开始吧。在开始之前我们需要先对Linux的proc文件系统做一个介绍:

如果你对这些基本知识已经很熟悉了,请直接略过。Linux下的/proc文件系统是由内核提供的,它其实不是一个真正的文件系统,只包含了系统运行时的信息(比如系统内存、mount设备信息、一些硬件配置等),它只存在于内存中,而不占用外存空间。它以文件系统的形式,为访问内核数据的操作提供接口。实际上,很多系统工具都是简单地去读取这个文件系统的某个文件内容,比如lsmod,其实就是cat /proc/modules。当遍历这个目录的时候,会发现很多数字,这些都是为每个进程创建的空间,数字就是它们的PID。

mark

mark

在之前的文章中我们探究了Docker是如何使用AUFS文件系统的,现在我们开始动手实践一下AUFS,用简单的命令来创建一个AUFS文件系统,感受下如何使用AUFS和COW实现文件管理。

Union File System

Union File System,简称UnionFS,关于联合文件系统我之前的一篇博客里也写过的 《Docker镜像与数据容器卷》 ,是一种为Linux、FreeBSD 和NetBSD操作系统设计的,把其他文件系统联合到一个联合挂载点的文件系统服务。它使用branch把不同文件系统的文件和目录“透明地”覆盖,形成一个单一一致的文件系统。这些branch或者是read-only的,或者是read-write的,所以当对这个虚拟后的联合文件系统进行写操作的时候,系统是真正写到了一个新的文件中。看起来这个虚拟后的联合文件系统是可以对任何文件进行操作的,但是其实它并没有改变原来的文件,这是因为unionfs用到了一个重要的资源管理技术,叫写时拷贝。

之前几篇文章讲述了Linux的Cgroups技术, 《Linux-Cgroups的资源控制》 ,主要是通过Cgroups实现了对进程的资源限制,那么在Docker中是如何运用Cgroups的呢?我们知道Docker是通过Cgroups去做的容器的资源限制和监控,我们下面就以一个实际的容器实例来看下Docker是如何配置Cgroups的:docker run -m 设置内存限制

mark

可以看到Docker通过为每个容器创建Cgroup并通过Cgroup去配置的资源限制和资源监控。

xxx.png 前段时间用到了Apache Freemarker来做前端页面,发现一个问题,就是JavaBean的Long类型和Integer类型向模板中注入的时候,只要是注入input类型,那么大 于999的数字则不会被显示,这个问题我也问了Apache官方的论坛:https://issues.apache.org/jira/browse/FREEMARKER-132 ,果然是官方站点呀,反馈还是很快的,系统还自动发了邮件!

今天主要是说说Linux的Cgroup技术,之前介绍的是构建Linux容器的namespace技术,它能够很好的帮助进程隔离出自己单独的空间,但Docker又是怎么限制每个空间的大小,保证他们不会互相争抢呢?这就要用到Linux的Cgroups技术。

mark

Linux Cgroups(Control Groups) 提供了对一组进程及将来的子进程的资源的限制 ,控制和统计的能力,这些资源包括CPU,内存,存储,网络等。通过Cgroups,可以方便的限制某个进程的资源占用,并且可以实时的监控进程的监控和统计信息。

mark

在上次的文章 《虚拟化的基石——Namespace》 中主要讲述了Namespace的作用,却没有详细的拿代码举证,上次仅仅证明了UTS Namespace,剩下五个命名空间全在这篇文章了,主要是IPC Namespace、PID Namespace、Mount Namespace、User Namespace、Network Namespace的概念的理解以及使用代码证明!