docker一:基础原理

docker的体系结构

docker使用c/s架构,docker daemon(守护进程)作为server端接受client的请求,并处理(创建、运行、分发容器)他们可以运行在一个机器上,也通过sockerts或者RESTful API通信。

docker client host

docker pull docker daemon

docker run container1

docker container2

docker有三个内部组件

docker images

docker registries 登记

docker container

docker images就是一个只读的模板。比如:一个image可以包含一个Ubuntu的操作烯烃,里面安装了apache或者你需要的应用程序。images可以用来创建docker containers,docker提供了一个很简单的机制来创建images或者更新现有的images,你甚至可以直接其他人那里下载一个已经做好的images

Docker registries(登记)

Docker registries也叫docker仓库,它有公有仓库和私有仓库2种形式,他们都可以用来让你上传和下载images。公有的仓库也叫Docker Hub。它提供了一个巨大的image库可以让你下载,你也可以在自己的局域网内建一个自己的私有仓库。

Docker containers

Docker containers也叫docker容器,容器是从image镜像创建的。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、安全的平台。

2、Docker image的工作原理

每个docker都有很多层次构成,docker使用union file systems将这些不同的层结合个image中去。

AUFS(AnotherUnionFS)是一种Union FS,简单来说就是支持将不同目录挂载到同一个虚拟文件系统下(unite serveral directories into a single virtual filesystem)的文件系统,更进一步的理解,AUFS支持为每一个成员目录(类似Git Branch)设定readonly、readwrite和whiteout-able权限,同时AUFS里有一个类似分层的概念,对readonly权限的branch可以逻辑上进行修改(增量地,不影响readonly部分的)通常union fs有两个用途,一方面可以实现实现部建筑LVM、RAID将多个第三课挂到同一个目录下,另一个更常用的就是将一个readonly的branch和一个writeable的branch联合在一起,live cd正是基于此方法可以允许在os image不改变的基础上允许用户在其上进行一些写操作。Docker 在AUFS上构建的container image也正是如此。

3、docker仓库

docker仓库用来保存我们的images,当我们创建了自己的image之后我们就可以使用push命令将它上传到公有或者私有仓库,这样下次要在另一台机器上使用这个image时候,只需要从仓库上pull下来就可以了。

4、Docker容器

当我们运行docker run -i -t ubuntu /bin/bash命令是,docker在后台运行的操作如下:

如果本地有ubuntu这个image就从它创建容器,否则从公有仓库下载,从image创建容器,分配一个文件系统,并在只读的image层外面挂载一层可读写的层,从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去,从地址池配置一个ip地址给容器,执行你个指定的程序,在这里启动/bin/bash进程,-i -t指定标准标准和输出

5、docker底层技术

docker底层的2个核心技术分别是namespaces和control groups

1),pid namespace

不同用户的进程就是通过pid namespace(命名空间)隔离开的,且不同namespace中可以有相同pid。所有的LXC进程在docker中的父进程为docker进程,每个lxc进行具有不同的namespace。同时由于允许嵌套,因此可以很方便的实现docker in docker。

pid     namespace :linux通过命名空间管理进程pid,对于同一进程(同一个task_struct),在不同的命名空间中,看到的pid号不相同,每个pid命名空间有一套自己的pid管理方法,所以在不同的命名空间中调用getpid(),看到的pid号是不同的。pid命名空间是一个父子关系的结构,系统初始只有一个pid命名空间,后面如果在fork进程的时候,加上新建pid命名空间的选项,那么这个新的命名空间的父命名空间就是初始的那个命名空间,在这个命名空间fork出的进程,在子命名空间和父命名空间都有一个pid号相对应到这个task_struct上。 task_struct任务结构

LXC为Linux Container的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。

2),net namespace

有了pid namespace,每个namespace中的pid能够相互隔离,但是网络端口还是共享host的端口。网络隔离是通过net namespace实现的,每个net namespace有独立的network devices,IP

addresses,IP routing tables,/proc/net目录。这样每个container的网络就能隔离开来。docker默认采用veth的方式将container中的虚拟网卡同host的一个docker bridge:docker()链接在一起。

3)ipc namespace

container中进程交互还是采用Linux常见的进程间交互方法(interprocess communication-IPC),包括常见的信号量、消息队列和共享内存。然而同VM不同的是,container的进程间交互实际上还是host上具有相同pid namespace中的进程间交互,因此需要在IPC资源申请时加入namespace信息-每个IPC资源有一个唯一的32位ID。

4)mnt namespace

一个特定的目录执行。mnt namespace 允许不同namespace的进程看到的文件结构不同,这样每个namespace中的进程所看到的文件目录就被隔离开了。同chroot不同,每个namespace中的conrainer在/proc/mounts的信息只包含所在namespace的mount point(挂载点)

5)uts namespace

UTS("UNIX Time-sharing system")namespace允许每个container拥有独立的hostname和domain

name,使其在网络上可以被视作一个独立的节点而非host上的一个进程。

6)user namesapce

每个container可以有不同的user和group id,也就是说可以在container内部用container内部想的用户执行程序而非host上的用户。

control groups主要用来隔离各个容器和宿主主机的资源利用。

时间: 2024-10-14 06:26:17

docker一:基础原理的相关文章

Docker容器的原理与实践 (下)

欢迎访问网易云社区,了解更多网易技术产品运营经验. Docker原理分析 Docker架构 镜像原理 镜像是一个只读的容器模板,含有启动docker容器所需的文件系统结构及内容Docker以镜像和在镜像基础上构建的容器为基础,以容器开发.测试.发布的单元将应用相关的所有组件和环境进行封装,避免了应用在不同平台间迁移所带来的依赖问题,确保了应用在生产环境的各阶段达到高度一致的实际效果. 主要特点 分层     镜像采用分层构建,每个镜像由一系列的镜像层组成, 当需要修改容器内的某个文件时,只对处于

Linux高可用集群方案之heartbeat基础原理及逻辑架构

 这篇文章我们主要学习heartbeat高可用集群的基础原理及逻辑架构,以及heartbeat的简单配置  ll  本文导航    · heartbeat之基本原理   · heartbeat之集群组件   · heartbeat之心跳连接   · heartbeat之脑裂(资源争用.资源隔离) · heartbeat之配置文件   · heartbeat至高可用集群配置  ll  要求  掌握heartbeat高可用集群的相关组件及简单配置   heartbeat之基本原理  heartbea

49 Linux操作系统原理、虚拟化技术基础原理

04 虚拟化技术基础原理 一.配置虚拟化网络 1.编辑配置文件 #关闭NetworkManager [[email protected] ~]# service NetworkManager stop [[email protected] ~]# chkconfig NetworkManager off    [[email protected] ~]# chkconfig --list NetworkManager NetworkManager  0:关闭  1:关闭  2:关闭  3:关闭

web socket and web worker 基础原理及使用

个人认为HTML5最吸引人的两大功能, web socket 和 worker为构建高效能的web应用提供了新的参考方案. 大体来说,web socket提供更高效的传输协议,web worker提供多线程提高web应用计算效率.最近项目有用到,对应两个问题的解决,目前运行效果来看还是很不错. 这里主要是总结这两个技术的基础原理,和常用API.备忘,也列举关键掌握点,入门和基础使用足以. Web Socket websocket是一种协议,本质上和http,tcp一样.协议是用来说明数据是如何传

核花宝典之脑功能成像(fMRI)基础原理

首发于Jinaffe长璟鹿的医学影像小漫画 关注专栏 写文章 核花宝典之脑功能成像(fMRI)基础原理 Jinaffe长璟鹿 4 个月前 我们只看图,不说话... ... 医学科普漫画 4 收藏 分享 举报 文章被以下专栏收录 Jinaffe长璟鹿的医学影像小漫画 不会画小漫画的女博士不是好的长颈鹿呀 进入专栏 2 条评论 写下你的评论 取消评论 筱贰获 长璟鹿姐姐好有才呀~~~ 0 赞 3 个月前 回复赞 举报 王善诚 题主自己画的吗?挺有才 0 赞 16 天前 回复赞 举报 推荐阅读 核花宝

X-ray/CT成像基础原理

首发于Jinaffe长璟鹿的医学影像小漫画 关注专栏 写文章 X-ray/CT成像基础原理 Jinaffe长璟鹿 5 个月前 我们只看图,不说话... ... 医学影像科普漫画 16 收藏 分享 举报 文章被以下专栏收录 Jinaffe长璟鹿的医学影像小漫画 不会画小漫画的女博士不是好的长颈鹿呀 进入专栏 15 条评论 写下你的评论 取消评论 叶茂青 这字看着真心累 0 赞 5 个月前 回复赞 举报 长胜兄 MRI呢 0 赞 5 个月前 回复赞 举报 查看对话 Jinaffe长璟鹿(作者)回复叶

第三十三天 LVS基础原理、调度算法、NAT和DR的实现 、LXC虚拟化

大规模站点构建框架 LVS的基础原理 LVS调度方法及NAT模型的实现 LVS  dr模型及lxc虚拟化 一.大规模站点架构框架 http: stateless keep-alive cookie: session 系统的:可扩展性.高可用性:99%, 99.9%, 99.999% .性能: 可扩展性: 容量:在一定时间内能完成的工作量 scale up: 向上扩展 scale out: 向外扩展 Cluster: 集群 构建高可扩展性系统的重要原则:在系统内部尽量避免串行化和交互 调度器:di

28_1_iptables系列之基础原理

iptables/netfilter:工作在linux内核中的网络防火墙,是一组工具.    netfilter:正真起作用的是netfilter,它是一个框架:    iptanles:是生成防火墙规则,并且将其附加在netfilter上真正实现数据报文过滤.nat.mangle等规则生成的工具. 1.一些网络知识:   ip报文首部,Tcp报文首部   事实上,网络防火墙的主要功能是根据报文首部实现的.(1)ip报文首部:   0:版本号(4),IP首部大小[结果*4](4),服务类型(8)

Web Service 之 http基础原理

Web Service 之 http基础原理 ========================================================================= 概述: 网络通信基础 ★进程间通信:IPC Socket(套接字):ip:port ★Client <--> Server Server: listen(监听状态,表示服务器正在等待新的传输链接进入) Client: ★客户端与服务器间通信实际上是客户端套接字和服务器端套接字间通信 IP:PORT(Cl

第五十二课 linux操作系统原理、虚拟机基础原理

linux操作系统原理 linux操作系统原理 虚拟机技术基础原理 虚拟机技术基础原理