Docker 原理手册
Docker 架构
-
Registry 镜像仓库,用于存放镜像;
-
Docker Daemon 是docker的核心组件,包括docker的服务端功能,主要由Server和Egnine两部分构成:
- Server:作为服务端,对外提供服务能力;
- Engine:Daemon核心模块,基于Job的工作模式,将一个个外部事件转化为Job进行执行;
- Cli
命令行客户端,实现命令行操作管控;
- API
支持多语言的API;
Docker 特点
只要是IT企业,只要在做架构,软件开发,交付甚至更广范围内的IT方向同事都在谈容器,谈微服务,但很多人不是特别理解docker到底是什么,只是从文档上看那些文邹邹的解释,在这里我从我自己的理解给大家谈谈docker。
docker 是什么?
我在这里以农村装小麦的袋子为例子来讲,谁让我是来自农村的呢。如果觉得不恰当就笑笑,不要喷我。
-
你有一个大袋子,装什么都可以,装进去之后,我们从外面看到的就是袋子,例如:你装了书进去,装了电脑进去,从外面看不到里面的东西。
-
用袋子装东西的时候,一个一个往里面塞,从袋子底部到顶部,一个一个摞在一起,装到袋口,满了,不好意思,不能再装了。
-
在装东西的时候,你心灵手巧,做了小铃铛,系在每个装到袋子里的东西上,把铃铛露在外面,并写下对应位置和名字在铃铛上,写位置便于了解装进去的东西在袋口还是袋底。
-
你有好多的东西,你装了好多袋子,每个袋子你进行编号,并贴在袋子上;
-
终于打包好了,但是你突然有个很二的想法,我要把我的东西全部原样再弄一份,例如:一个袋子装了很多的书,就再一模一样买一份;有一袋玩具,就让玩具厂一模一样给我做一袋;这太烦了,要联系各个厂家,卖家。我要自己做神笔马良,你牛逼地发明了一支笔,可以想搞什么就原样复制一个,袋子也可以用笔画出来。
-
最后你发现,袋子是软的,装了东西会变形,甚至袋子是由弹性的,塞多了重东西会把袋子搞破,于是,你对袋子高了个标准(长宽高固定)
-
太开心了,就算袋子出问题了,任性地扔掉它,再用笔对着原先的画一个。
到此,故事讲完了,我来给你对标下:
- 你那牛逼的笔就是:docker daemon
- 你的袋子就是:docker 镜像和容器
- 你给袋子的长宽高:就是你对容器的资源限制以及与其它的容器的隔离
- 一层一层往袋子里装,就是镜像分层
- 袋子容量就是:最大分层
到这里,我们看看Docker到底是什么?
- 是世界领先的软件容器平台
- 使用 Google 公司推出的 Go 语言进行开发实现
- 基于 Linux 内核 的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离
- 属于操作系统层面的虚拟化技术
由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器
docker 特点及作用?
特点
-
能够自动执行重复性任务
-
标准化
-
隔离
-
轻量
-
安全
作用
-
一致的运行环境
-
更快速的启动时间
-
弹性伸缩,快速扩展
-
迁移方便
-
持续交付和部署
查看进程信息
此处以容器中运行的Jboss服务为例:
# docker ps
获取容器的id:226618af206a
# dockekr top 226618af206a
创建容器步骤
- 从进程方面看
docker-1.12.6的过程
* dockerd 启动
* dockerd 创建docker-containerd进程
* docker-containerd创建docker-containerd-shim进程
* docker-containerd-shim 创建entrypoint的执行命令进程