程序小寨

Docker高级应用(随笔)

2018-12-19  本文已影响13人  梦中一点心雨

在实际应用中,因为一些问题而对Docker做了更深层次的了解,下面将列举一些Docker容器及Linux操作系统相关的知识。

资源隔离

Linux内核从2.4.19开始引入namespace的概念,其目的是将某个特定的全局系统资源(global system resource)通过抽象方法使得namespace中的进程看起来拥有它们自己的隔离的全局系统资源实例。

namespace 系统调用参数 隔离内容 在容器语境下的隔离效果
UTS CLONE_NEWUTS 主机名和域名 每个容器可以有自己的hostname和domainname
IPC CLONE_NEWIPC 信号量、消息队列和共享内存 每个容器有其自己的System V IPC和POSIX消息队列文件系统,因此,只有在同一个IPC的进程之间才能互相通信
PID CLONE_NEWPID 进程编号 每个PID中的namespace中的进程可以有其独立的PID;每个容器可以有其PID为1的root进程;也使得容器可以在不同的host之间迁移,因为namespace中的进程ID和host无关了。这也使得容器中的每个进程有两个PID:容器中的PID和host上的PID
Network CLONE_NEWNET 网络设备、网络栈、端口等 每个容器都有其独立的网络设备,IP地址,IP路由表,/proc/net目录,端口号等。这也使得多个容器内的同一个应用都绑定在各自容器的80端口上
Mount CLONE_NEWNS 挂载点(文件系统) 每个容器能看到不同的文件系统层次结构
User CLONE_NEWUSER 用户和组ID空间 在User中的进程的用户和组ID可以和在host上不通。每个container可以有不同的user和group id;一个host上的非特权用户可以成为User中的特权用户

Docker的资源隔离也是通过这六种方式实现的,在容器启动时,Docker会创建这六种namespace实例,然后把容器中的所有进程放到这些namespace中,使得Docker容器中只能看到隔离的系统资源。

网络模式

docker目前支持四种网络工作的方式,分别为host,container,none,bridge。下面简单介绍下这几种网络模式。

上一篇 下一篇

猜你喜欢

热点阅读