docker的入门简介
可能写的不是很完美,需要大家指正修改和意见(谢谢合作)
docker的入门:
docker的好处:
1.更快交付你的应用(Faster delivery of your applications)
2.让部署和测试更加简单(Deploying and scaling more easily)
3.实现更高密度和更多的负载 (Achieving higher density and running more workloads)
docker的目标:
docker的目标是实现轻量级的操作系统虚拟化解决方案,创建软件程序可移植的轻量容器
docker底层实现
- docker的基础是linux容器(LXC)等技术
- 在LXC的基础上docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。
- docker是使用Cgroups来提供的容器隔离,而union文件系统用于保存镜像并使容器变得短暂

简介Cgroups:
Cgroups是linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对cpu,内存等资源实现精细话的控制,目前越来越火的轻量级容器docker就是使用了Cgroups提供的资源限制能力来完成cpu,内存部分的资源控制 另外,开发者也可以使用Cgoups提供的精细化控制能力,限制某一个或者某一组进程的资源调用,比如在一个部署web服务器也部署可后端计算模块的八核服务器上,可以使用Cgroups限制web server仅可以使用计算计6核,把剩下的两核给后端计算模块 本文从以下四个方面描述cgroups的原理及用法:
1.Cgroups概念及原理
2.Cgroups文件系统概念及原理
3.Cgroups使用方法介绍
4.Cgroups实践中的例子
概念及原理:
Cgroups子系统
cgroups的全称是control(管理) groups,cgroups为每种可以控制的资源定义了一个子系统,典型的子系统介绍如下:
- cpu子系统:主要限制进程cpu使用率
- cpuacct子系统:可以统计cgroups中的进程的cpu试用报告
- cpuset子系统:可以为Cgroups中的进程分配单独的cpu节点或者内存节点
- memory子系统:可以限制进程的memory使用量。
- blkio子系统:可以限制进程的块设备io
- devices子系统:可以控制进程能访问某些设备
- net_cls子系统,可以标记Cgroups中进程的网络数据包,然后可以使用tc模块(traffic control)对数据包进行控制
- freezer子系统:可以挂起或者恢复cgroups中的进程
- ns子系统:可以使用不同Cgroups下面的进程使用不同的namespace
这里边的每一个子系统都需要与内核的其他模块配合来完成资源控制,比如对cpu资源的限制是通过进程调度模块根据cpu子系统的配置完成的
对内存资源限制的规则是内存模块根据memory子系统配置来完成的
对网络数据包的控制则需要traffic control子系统来配合完成
本文不会讨论内核是如何使用每一个子系统来实现资源的限制,而是重点放在内核是如何把 cgroups 对资源进行限制的配置有效的组织起来的,和内核如何把cgroups
配置和进程进行关联的,以及内核是如何通过 cgroups 文件系统把cgroups的功能暴露给用户态的。
深入Cgroups
http://blog.jobbole.com/88836/
http://www.ttlsa.com/linux/use-cgroups-to-limit-mongodb-memory-usage/
docker和虚拟机的对比:
虚拟机;vmware需要模拟整台服务器包括硬件,每台虚拟机都需要有自己的操作系统,
虚拟机只要被开启,那么分配给他的资源他将全部使用,每一台虚拟机包括应用,必要的二进制和库以及一个完整的用户操作系统
容器:容器是和宿主机操作系统共享硬件资源及操作系统,可以实现资源的动态分配,在容器内包含应用和其所有的依赖包,但是与其他容器共享内核,容器在宿主机在用户空间以分离的进程运行
优点:
- 启动快秒级别
- 需要的资源较少,docker在操作系统级别进行虚拟化,docker容器和内核交互,几乎没有性能损耗,性能优于通过hypervisor层与内核层的虚拟化
- 部署快:不用建立实体樯隔离(多NameSpace),有样板间可参考(镜像服务)

docker的特性:
交互式shell:docker可以分配一个虚拟终端并关联到任何容器的标准输入上,列入运行一个一次性交互shell
文件系统隔离:每个进程容器运行在完全独立的根文件系统里
写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间
资源隔离:可以使用cgroups为每个进程分配不同的系统资源
网络隔离:每个进程容器运行在自己的网络空间里,拥有自己的虚拟接口和IP地址
日志记录:docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索
变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用已创建更多的容器,无需使用模板或手动配置
docker几个引擎(主要组建):

- server,就是一个守护进程,他会一直运行在后台
- rest api,说明如何与server交互和指示它执行命令
- client,是客户书写指令的地方,也俗称shell
- image;俗称镜像
- container:容器,装载和运行镜像
- network:网络,容器通过暴漏端口与主机端口绑定,达到接受来自主机的信号
- volume:外挂为了能够持久化数据以及共享容器之间的数据docker提供出了volume的概念
docker运行流程:

当我们想运行一个容器的时候docker会:
- 拉取一个镜像,若本地不存在则在网上拉取
- 创建新的容器
- 分配union文件系统并且挂着一个可读写的层,任何修改容器的操作都会被记录在这个读写层上,你可以保存这些修改成新的镜像,也可以选择不保存,那么下次运行改镜像的时候所有修改操作都会被消除
- 分配网络\桥接接口,创建一个允许容器与本地主机通信的网络接口
- 设置ip地址,从池中寻找一个可用的ip地址附加到容器上,换句话说,localhost并不能访问到容器
- 运行你指定的程序
- 捕获并且提供应用输出,包括输入、输出、报错信息
docker的入门简介的更多相关文章
- 自动化集成:Docker容器入门简介
前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述Docker基础用法. 一.Docker简介 1.基础 ...
- Docker 从入门到实践(一)Docker 简介
读前须知:本教程大部分都是[Docker 从入门到实践 ]一书的知识,有兴趣可以直接观看书籍.同时,借鉴书籍的知识,如有侵权,请告知我,我会删除处理.谢谢. 一.什么是 Docker? Docker ...
- Docker新手入门:基本用法
Docker新手入门:基本用法 1.Docker简介 1.1 第一本Docker书 工作中不断碰到Docker,今天终于算是正式开始学习了.在挑选系统学习Docker以及虚拟化技术的书籍时还碰到了不少 ...
- Docker技术入门与实战第2版-高清文字版
Docker技术入门与实战第2版-高清文字版 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取 ...
- Docker技术入门与实战
Docker技术入门与实战 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取分享码 本书目录结 ...
- 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】
最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 ...
- docker-9 supervisord 参考docker从入门到实战
参考docker从入门到实战 使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机 ...
- Docker 简单入门
Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737
- 掌握 Ajax,第 1 部分: Ajax 入门简介
转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...
随机推荐
- 11-基于CPCI的中频功率放大收发板
1.板卡参数介绍 无线输入口 无线发射口 1M~3GHZ,可调,步进100HZ(非跳频模式) 功率:≤﹢10±2.5 dBm 收发通道数 收发各1通道/板 中频输入输出 70MHz, 5MHz/30M ...
- 百度小程序-form表单点击提交,input框内容不会清空
百度小程序与微信小程序相似度90%.微信小程序转换为百度小程序,部分还是需要人工修改! 做了一个form留言表单,点击提交之后,input框第一次会清空,但是第二次就不会清空了! 不多说直接上代码! ...
- js 属性getset
属性访问器 一.像C#写实体类一样的写法 var attr={ $x:10,//必须$开头 get x() { return this.$x+1; }, set x(val) { this.$x=va ...
- 获取mysql数据库表字段的备注信息
SELECT COLUMN_NAME as field_name , COLUMN_COMMENT as remark FROM information_schema.COLUMNS WHERE T ...
- Centos7安装Nginx1.14.0
一.官网下载 http://nginx.org/en/download.html 版本说明: Nginx官网提供了三个类型的版本 Mainline version:Mainline 是 Nginx 目 ...
- springmvc的@ModelAttribute
1:作用:执行任何方法前都要先执行一下有这个标识的方法. 用途:表单回显的时候先从数据库中查询出来放到这个方法中. 1):模拟表单 <form action="first/testMo ...
- 前端自动化-gulp入门
前不久本人写了一篇关于gulp安装和配置的文章,其实当时还是懵逼的状态,但是今天再次温习了一遍,感觉对整个流程有个整体的理解了,下面以一个实例给大家分享下我的经验供参考和学习. 1.首先安装nodej ...
- [CSP-S模拟测试]:v(hash表+期望DP)
题目背景 $\frac{1}{4}$遇到了一道水题,又完全不会做,于是去请教小$D$.小$D$看了$0.607$眼就切掉了这题,嘲讽了$\frac{1}{4}$一番就离开了.于是,$\frac{1}{ ...
- intellijidea 设置字体等
http://blog.csdn.net/asmcvc/article/details/17144951 1.下载安装AndroidStudio:http://developer.android.co ...
- 2018-2019-20175203 实验二 《Java面向对象程序设计》
2018-2019-20175203 实验二 <Java面向对象程序设计>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑 ...