解决的问题:(解决了运行环境和配置问题的软件容器问题)
1.我本地运行没问题啊; 环境不一致. -- 把我的环境打包放到集装箱 2.那个哥们又写了死循环,怎么这么卡; 多用户的操作系统下,会相互影响.---docker 在运行时,互不影响 3.淘宝在双11的时候,用户量暴增; 运维成本过高的问题.--一个命令可以瞬间部署千台机器 4.学习一门技术,学习安装成本过高; 关于安装软件成本过高.--联网拉取集装箱
Docker的思想 1.集装箱:会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿到这个集装箱就可以了. 2.标准化:2.1运输的标准化:docker有个码头,所有上传的集装箱都存在了这个码头上,当谁需要某一个环境,就直接派大海豚去搬运一个集装箱就可以了.(码头就是所谓的仓库) 2.2命令的标准化:dockers提供了一系列的命令,帮助我们去获取集装箱等操作. 2.3提供了REST的API:衍生出了很多的图形化姐买你,rancher. 3.隔离性:Docker在运行集装箱内容时,会在linux的内核中,单独的开辟一片空间,这篇空间不会影响到其他程序. 注册中心.(超级码头,仓库,上面放的就是集装箱) 镜像.(集装箱) 容器.(运行起来的镜像)
docker 是ces,基于客户端浏览器的结构。docker是一个开源的应用容器引擎,让开发者可以打包他们的应用及依赖包到一个可移植的容器中,然后发布到任何流程的linux机器上,也可以实现虚拟化。
容器是完全使用沙盒机制,相互之间不会有任何借口。几乎没有性能开销。可以很容易地在机器和数据中心运行。最重要的是容器不依赖于任何语言、框架或包装系统。
(沙盒:也叫沙箱sandbox.是一种虚拟技术多用于计算机安全技术。)
docker服务相当于鲸鱼,container 容器就是集装箱。
docker 容器技术和虚拟机技术 对比:
相同点:都是虚拟化技术。
不同点:
docker相对于vm虚拟机,少了虚拟机操作系统这一层,所以docker的效率比虚拟机高。
(如:平时你的物理系统启动需要几秒?10秒 换成docker启动同样的应用只需要1-2秒)
一个虚拟机可以跑很多个docker,一个docker可以有和多个容器。
工作流程:服务器A上运行docker Engine服务,在docker Engine上启动很多容器container,从外网docker hub上把image操作系统镜像下载,放到container容器运行。这样一个容器的实例就运行起来了,最后,通过docker client 对 docker容器虚拟化平台进行控制。
docker特性:
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
资源隔离:系统 资源,像cpu和内容等可以分配到不同的容器中,使用cgroup.
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。
日志记录:docker 将会手机和记录每个进程容器的标准流stdout/stderr/stdin,用于实时检索或批量检索。
变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模版或手动配置。
交互式shell: docker可以分配一个虚拟终端并关联到任何容器的标准输入上(如运行一个一次性交互shell)
docker优点:
1、一些优势和vm虚拟机一样,但不是所有都一样。
(比vm小,比vm快,docker容器的尺寸减小相比整个虚拟机大大简化了分不到云和从云分发时间和开销。so, docker启动一个容器实例时间很短,一两秒就可以启动一个实例。)
2、对于在笔记本电脑,数据中心的虚拟机,及任何的云上,运行形同的没有变化的应用程序,IT的发布速度更快。
Docker是一个开放的平台,构建,发布和运行分布式应用程序(分布式 微服务、saas)。
Docker 使应用程序能够快速从组建组装和避免开放和生产环境之间的摩擦。
3、可以在部署在公司局域网或云或虚拟机上使用它。
4、开放人员并不关心具体哪个linux操作系统使用docker,开发人员可以根据所有依赖关系构建相应的软件,针对他们所选择的操作系统。然后,再部署时一切是完全一样的,因为一切都在dockerimage的容器上运行。 开发人员负责并且能够确保所有相关性得到满足。
5、Google,微软,亚马孙,ibm都支持docker
6、docker支持unix/linux 操作系统,也支持Windows或Mac。
docker缺点:(docker只用于计算,存储交给别人)
1、docker用于应用程序时是最有用的,但不包含数据。日志跟踪和数据库等应放到docker容器外。一个容器的镜像通常都很小,不适合存大量数据,
存大量数据时需要通过外部挂载的方式使用,如,nfs,ipsan,mfs等。
Oracle 不适合使用docker来运行,数据太多;sqlserver(200m左右);postgresql mysql ; 非关系类型redis mongo
docker 的组成: 镜像,容器,仓库
镜像:只读的模版,相当于root文件系统;Java中的类;
容器: Java中new 出来的对象; 可以看成一个简易的liunx 环境
仓库:是存放镜像的地方;