Docker是什么为什么是DockerDocker的技术原理介绍Docker的基础概念Docker实战Docker是什么(一)Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上。Docker是一个重新定义了程序开发测试、交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是docker提出的“Buildonce,Runanywhere”Docker是什么(二)Docker就是虚拟化的一种轻量级替代技术。Docker的容器技术不依赖任何语言、框架或系统,可以将App变成一种标准化的、可移植的、自管理的组件,并脱离服务器硬件在任何主流系统中开发、调试和运行简单的说就是,在Linux系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是docker最普遍的一个玩法为什么是Docker(一)虚拟机和docker的区别通过图片比较了Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现为什么是Docker(二)docker被称为软件工业上的集装箱技术集装箱技术出现前存在的问题运输过程货物损坏运输和装卸效率低下运输手续、环节繁多劳力强度大、传播周转慢相对于软件行业软件更新频繁,发布低效业务无法敏捷、环境一致性无法保证不同环境的部署、迁移成本高软件开发实施与交付周期长为什么是Docker(三)Docker的优势更快速的交付和部署对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。更高效的虚拟化Docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。更轻松的迁移和扩展Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。更简单的管理使用Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。对比传统虚拟机为什么是Docker(四)Docker生态圈与发展Google每周启动超过20亿个容器进行业务服务。国内,腾讯、阿里、百度、Ucloud、青云等云计算服务提供商已经将Docker用到实践DOCKER诞生后第一年(2015)的发展情况•贡献者增长了183%;•GitHub上关于Docker的项目增长了515%;•Docker提供的工作机会增长了1720%;•使用Docker构建的应用程序增长了934%(Boot2Docker下载量增加了1456%);•容器的下载量增加了18082%(这个是根据DockerHub上镜像下载量来统计的)。•DockerHub业务的进展:用户数量增长至24万,Repo增长至15万,Pull的数量超过5亿次Docker技术原理介绍(一)Docker服务架构采用C/S架构,Docker客户端和Docker守护进程交流,Docker守护进程做非常重要的工作,构建,运行和分发你的Docker容器。Docker技术原理介绍(二)Docker相关的核心技术之cgroupsLinux系统中经常有个需求就是希望能限制某个或者某些进程的分配资源。于是就出现了cgroups的概念,cgroup就是controllergroup,在这个group中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等。cgroups是将任意进程进行分组化管理的Linux内核功能。也可以通过启动容器时,指定参数进行资源分配Docker技术原理介绍(三)Docker相关的核心技术之AUFSAuFS是一个能透明覆盖一或多个现有文件系统的层状文件系统。支持将不同目录挂载到同一个虚拟文件系统下,可以把不同的目录联合在一起,组成一个单一的目录。这种是一种虚拟的文件系统,文件系统不用格式化,直接挂载即可。Docker一直在用AuFS作为容器的文件系统。当一个进程需要修改一个文件时,AuFS创建该文件的一个副本。AuFS可以把多层合并成文件系统的单层表示。这个过程称为写入复制(copyonwrite)。AuFS允许Docker把某些镜像作为容器的基础。例如,你可能有一个可以作为很多不同容器的基础的CentOS系统镜像。多亏AuFS,只要一个CentOS镜像的副本就够了,这样既节省了存储和内存,也保证更快速的容器部署。Docker技术原理介绍(四)Docker原理之App打包为了最大化重用Image,加快运行速度,减少内存和磁盘footprint,Dockercontainer运行时所构造的运行环境,实际上是由具有依赖关系的多个Layer组成的。这些image由AUFS文件系统加载合并到统一路径中,以只读的方式存在,最后再叠加加载一层可写的空白的Layer用作记录对当前运行环境所作的修改。有了层级化的Image做基础,理想中,不同的APP就可以既可能的共用底层文件系统,相关依赖工具等,同一个APP的不同实例也可以实现共用绝大多数数据,进而以copyonwrite的形式维护自己的那一份修改过的数据等Docker的基本概念(一)DockerImage•DockerImage是一个极度精简版的Linux程序运行环境,比如vi这种基本的工具没有,官网的Java镜像包括的东西更少,除非是镜像叠加方式的,如Centos+Java7•DockerImage是需要定制化Build的一个“安装包”,包括基础镜像+应用的二进制部署包•DockerImage内不建议有运行期需要修改的配置文件•Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image•DockerImage的最佳实践之一是尽量重用和使用网上公开的基础镜像Docker的基本概念(二)DockerContainerDockerContainer是Image的实例,共享内核DockerContainer里可以运行不同Os的Image,比如Ubuntu的或者CentosDockerContainer不建议内部开启一个SSHD服务,1.3版本后新增了dockerexec命令进入容器排查问题。DockerContainer没有IP地址,通常不会有服务端口暴露,是一个封闭的“盒子/沙箱”Docker的基本概念(三)DockerRegistry/Hub仓库是集中存放镜像文件的场所仓库分为公有仓库(Public)和私有仓库(Private)Push镜像到仓库;从窗口pull镜像到本地DockerContainer的生命周期检查本地是否存在镜像,如果不存在即从远端仓库检索利用镜像启动容器分配一个文件系统,并在只读的镜像层外挂载一层可读写层从宿主机配置的网桥接口中桥接一个虚拟接口到容器从地址池配置一个ip地址给容器执行用户指定的指令执行完毕后容器终止Docker实战(一)查找镜像#dockersearchimage_name获取镜像#dockerpullimage_name列出本地镜像#dockerimagesDocker容器之helloworld#dockerrunimages_nameecho“helloworld”Docker实战(二)列出所有启动的容器#dockerps–a提交容器的更改#dockercommitcontainer_idnew_image_name使用dockerFile构建镜像#dockerbuild–tnew_image_namedockerFile_path发布镜像#dockerpushimage_nameDocker实战(三)DockerFile介绍Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。相关网站://hub.docker.com/://yuedu.baidu.com/ebook/d817967416fc700abb68fca120谢谢!