docker基础
核心技术:
一:cgroups,全称controller group,重要概念为子系统既资源控制器,它可以限制服务器上的cpu,mem,iops,iobandwide,net,device,access等。
二:LXC,全称Linux containers,基于容器的操作系统层级的虚拟化技术。它提供一个共享kernel的OS级虚拟化方法,不需要重复加载kernel,container的kernel和host共享,加快container启动减少内存消耗,基于LXC的虚拟化的IO和cpu性能几乎接近baremetal的性能。 性能:LXC >> KVM >> XEN 内存利用:LXC >> KVM >> XEN 隔离程度:XEM >> KVM >> LXC
三:AUFS,一个能透明覆盖一或多个现有文件系统的层状文件系统。可以将不同目录挂载到一个虚拟文件系统下面。当一个进程需要修改一个文件时,AUFS创建该文件的一个副本,AUFS可以把多层合并成文件系统的单层表示,称为写入复制(copy on write)。
四:App打包,LXC基础上,Docker额外提供Feature包括:标准统一的打包部署运行方案。 为最大化重用image,加快速度以及减少内存和磁盘footprint,docker container构造的环境是由依赖关系的多个layer组成。 例如: 一个Apache可能是在基础的roots image的基础上叠加了包含例如emacs等各种工具的image,这些image由AUFS文件系统加载合并到统一路径中,以只读的方式存在,最后再叠加加载一层可写的空白的layer用作记录对当前运行环境所作的修改。 将image层级化后,理想中不同的app就可以尽可能的共用底层文件系统、相关依赖工具等,同一个app的不同实例也可以实现共用绝大多数数据,进而以copy on write的形式保护自己的那一份修改过的数据。
名词解读:
一:image,一个极度精简版的Linux程序运行环境。 需要定制Build的一个安装包,它包括基础镜像和应用的二进制部署包。 它不建议有运行期需要修改的配置文件。 dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖。当前目录下包含dockerfile,使用命令build来创建image。 它的最佳实践之一是尽量重用和使用网上公开的基础镜像。
二:container,它是image的实例,共享内核。 它可以运行不同os的image。 它不建议内部开启SSHD服务,1.3版本后新增了docker exec命令进入容器排查问题。 它没有ip地址,通常不会有服务端口暴露,是一个封闭的容器(盒子/沙箱)。
三:daemon,它是创建和运行container的Linux守护进程,也是docker最主要的核心组件。 它可以理解为docker container的container。 它可以绑定本地端口并提供rest api服务,用来远程访问和控制。
四:registry/hub,hub上可以轻松下载已经容器化的应用镜像,既拉既用。还可以绑定自己的代码托管系统(目前支持github和bitbucket)配置自动生成镜像功能,这样在hub会在代码更新时自动生成对应的镜像。
linux技能:磁盘、文件、日志、用户、权限、安全、网络。 虚拟机:VMware workstation/virtbox熟练使用,虚机clone,组网,host-only网络,nat网络等。