打开微信,使用扫一扫进入页面后,点击右上角菜单,
点击“发送给朋友”或“分享到朋友圈”完成分享
传统服务器的问题:
1)A说:我本地运行没有问题。 B说:但是我的服务器也没有问题。
--依赖操作系统,运行环境(JDK版本,tomcat版本),代码与环境耦合程度,配置;
2)系统好卡,哪个哥们写了死循环吗?
--同一个服务器之间互相影响,共享CPU和内存等。
3)双十一需要流量撑不住,但是过了双十一服务器又太富裕。
--伸展性以满足流量洪峰,缩容以降低成本需求。也即是scale up/scale down
以上的要求催生了容器的发展。这里展示下容器的发展:
目前主流的容器有:Docker、Kubernetes和Microservice
解释一:Docker technology is one implementation of container d virtualization technology
解释二:Docker is a platform for developers and sysadmins to develop, deploy, and run applications with containers.
从英文不难看出:Docker是开发人员和系统管理员开发、部署和运行带有容器的应用程序的平台。是一种基于容器实现虚拟化技术的一种平台或技术。
创始人:Solomon Hykes ,2013年 Docker对外开源,2014年 全球开始流行。
docker发展:
2010 | 2013 | 2014.6 | 2014.7 | 2015.4 |
dotCloud PAAS | Docker 开源 | Docker 1.0 | C轮$4000W | D轮$9500W |
主要三个方面:集装箱/标准化和隔离方面进行说明:
1)集装箱:有规则地打包物品,这种特性,使得程序放到哪都能运行。一图胜千言,优势如下图:
2)标准化:运输方式,存储方式和API接口
运输方式:犹如超级码头;
存储方式:不用管你的文件存储在哪,只要专注命令
API接口:执行同样的命令,即可完成操作3
3)隔离:轻量级,秒开(LXC的内核)
实体机 | 虚拟机 | 容器 | |
优点 | 部署简单,分钟计算各个app间的隔离好资源利用率有提升 | 启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离 | |
缺点 | 价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升 | 启动慢,分钟级别Image比较大,G级别系统性能损失比较大 | 安全和隔离对比虚机要差 |
实体机 | 虚拟机 | 容器 | |
优点 | 部署简单,分钟计算各个app间的隔离好资源利用率有提升 | 启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离 | |
缺点 | 价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升 | 启动慢,分钟级别Image比较大,G级别系统性能损失比较大 | 安全和隔离对比虚机要差 |
实体机 | 虚拟机 | 容器 | |
优点 | 部署简单,分钟计算各个app间的隔离好资源利用率有提升 | 启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离 | |
缺点 | 价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升 | 启动慢,分钟级别Image比较大,G级别系统性能损失比较大 | 安全和隔离对比虚机要差 |
实体机 | 虚拟机 | 容器 | |
优点 | 部署简单,分钟计算各个app间的隔离好资源利用率有提升 | 启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离 | |
缺点 | 价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升 | 启动慢,分钟级别Image比较大,G级别系统性能损失比较大 | 安全和隔离对比虚机要差 |
实体机 | 虚拟机 | 容器 | |
优点 | 部署简单,分钟计算各个app间的隔离好资源利用率有提升 | 启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离 | |
缺点 | 价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升 | 启动慢,分钟级别Image比较大,G级别系统性能损失比较大 | 安全和隔离对比虚机要差 |
实体机 | 虚拟机 | 容器 | |
优点 | 部署简单,分钟计算各个app间的隔离好资源利用率有提升 | 启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离 | |
缺点 | 价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升 | 启动慢,分钟级别Image比较大,G级别系统性能损失比较大 | 安全和隔离对比虚机要差 |
实体机 | 虚拟机 | 容器 | |
优点 | 部署简单,分钟计算各个app间的隔离好资源利用率有提升 | 启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离 | |
缺点 | 价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升 | 启动慢,分钟级别Image比较大,G级别系统性能损失比较大 | 安全和隔离对比虚机要差 |
实体机 | 虚拟机 | 容器 | |
优点 | 部署简单,分钟计算各个app间的隔离好资源利用率有提升 | 启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离 | |
缺点 | 价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升 | 启动慢,分钟级别Image比较大,G级别系统性能损失比较大 | 安全和隔离对比虚机要差 |
实体机 | 虚拟机 | 容器 | |
优点 | 部署简单,分钟计算各个app间的隔离好资源利用率有提升 | 启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离 | |
缺点 | 价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升 | 启动慢,分钟级别Image比较大,G级别系统性能损失比较大 | 安全和隔离对比虚机要差 |
实体机 | 虚拟机 | 容器 | |
优点 | 部署简单,分钟计算各个app间的隔离好资源利用率有提升 | 启动秒开占资源少,单机可开1000以上容器系统性能损失少App间资源隔离 | |
缺点 | 价格成本高部署麻烦,时间按照月/周计算迁移麻烦各app的隔离差,app1能看到app2的文件资源侵占厉害,一个app拖死整个系统资源利用率难提升 | 启动慢,分钟级别Image比较大,G级别系统性能损失比较大 | 安全和隔离对比虚机要差 |
Docker可以看作是容器虚拟化的相关技术的组合:
1)cgroups(control groups,控制组群)(limits how much you can use)作用是限制一个进程组的资源(包括内存,CPU ,磁盘IO,网络等)。一组进程放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。
2)Namespace (limits what you can see)命名空间,它主要做访问隔离,即同一个命名空间的多个资源(memory, CPU, network, pid) 可以互相看到,但是之外的看不到。Namespace是Linux Kernel提供的一种内核级别环境隔离的方法。作用:进程空间隔离/文件系统隔离/域名空间隔离等等
3)UnionFS(联合文件系统):用于制作image
build镜像,ship容器,run仓库
Doctor镜像:犹如一个集装箱,用于存放一系列文件。使用上图使用的UnionFS,同一个文件系统可以看多个文件。分成进行存储:从下往上:最底层的引导层,第二层是Linux系统,第三四层为程序所需的镜像系统,这几层都是只读层。最上层的writable container是可读可写的。
Doctor容器:本质上是一个进程或者虚拟机,一般为我们编写的为最上层的writable container,这个以下的部分一般是不动的,若是要修改,需要进行依次拷贝,把下层的镜像拷贝到writable container,进行修改后再加上自己的部分即可。这样就保证了底层环境不变性。便于开发和运维的一致性。
Doctor仓库:存储镜像的地方,有利于自己或他人使用。(当然一般大公司都有自己的仓库)
国外:Docker hub:http://hub.docker.com
国内:网易云平台:https://c.163yun.com/hub#/library Daocloud:https://hub.daocloud.io/
典型C/S架构分为三个Client,DOCKER_HOST,Registry。如下图所示。
Client:表示本地执行的docker命令载体
DOCKER_HOST:本机安装docker环境下的镜像和容器以及API-docker daemon
Registry:远端的docker 仓库。
流程:
一般执行命令后,比如docker pull ,docker client 将连接docker daemon;
Docker daemon 从docker Hub(docker仓库)拉取(比如hello-world) 的镜像,注意这里优先从DOCKER_HOST的image调取,没有的时再连接远端的Registry。
Docker daemon 从镜像创建了一个新的容器,这个容器运行了这个可执行的文件,产生输出;
Docker daemon把输出变成输出流给到docker client, docker client呈现给终端。
容器以后的发展:更轻量级和更安全性
相关链接
1. https://mp.weixin.qq.com/s/7o8QxGydMTUe4Q7Tz46Diw
2. https://www.runoob.com/docker/docker-inspect-command.html
3. 参考1:https://en.wikipedia.org/wiki/Cgroups
热门帖子
精华帖子