docker介绍
一、docker介绍
Docker 是基于 linux 内核实 现,Docker 最早采用 LXC 技术(LinuX Container 的简写,LXC 是 Linux 原生支持的 容器技术,可以提供轻量级的虚拟化, 可以说 docker 就是基于 LXC 发展起来 的,提供 LXC 的高级封装,发展标准的配置方法),而虚拟化技术 KVM(Kernelbased Virtual Machine) 基于模块实现, Docker 后改为自己研发并开源的 runc 技术运行容器 Docker 主机(Host):一个物理机或虚拟机,用于运行 Docker 服务进程和容器. Docker 服务端(Server):Docker 守护进程,运行 docker 容器. Docker 客户端(Client):客户端使用 docker 命令或其他工具调用 docker API. Docker 仓库(Registry): 保存镜像的仓库,类似于 git 或 svn 这样的版本控制系统 Docker 镜像(Images):镜像可以理解为创建实例使用的模板. Docker 容器(Container): 容器是从镜像生成对外提供服务的一个或一组服务.
二、.Docker对比虚拟机
资源利用率更高:一台物理机可以运行数百个容器,但是一般只能运行数十个 虚拟机.
开销更小:不需要启动单独的虚拟机占用硬件资源.
启动速度更快:可以在数秒内完成启动.
Docker的优势
. 快速部署:短时间内可以部署成百上千个应用,更快速交付到线上
. 高效虚拟化:不需要额外hypervisor支持,基于linux内核实现应用虚拟化,相比虚拟机大幅提高性能和效率
. 节省开支:提高服务器利用率,降低IT支出
. 简化配置:将运行环境打包保存至容器,使用时直接启动即可
. 环境统一:将开发,测试,生产的应用运行环境进行标准化和统一,减少环境不一样带来的各种问题
. 快速迁移和扩展:可实现跨平台运行在物理机、虚拟机、公有云等环境,良好的兼容性可以方便将应用从A宿主机迁移到B宿主机,甚至是A平台迁移到B平台
Docker的缺点
隔离性:多个容器共用宿主机的内核,各应用之间的隔离不如虚拟机彻底
docker(容器)的技术软件:
docker
coreOS的rkt,
阿里的Pouch
LXC:Linux Container。可以提供轻量级的虚拟化,以便隔离进程和资源
docker(容器)的核心技术
为了保证容器生态的标准性和健康可持续发展,包括Linux 基金会、Docker、微软、红帽谷歌和、IBM、等公司在2015年6月共同成立了一个叫open container(OCI)的组织,其目的就是制定开放的标准的容器规范,
目前OCI一共发布了两个规范,分别是runtime spec和 image format spec,有了这两个规范,不同的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性。
目前主流的三种runtime:
Lxc:linux上早期的runtime,Docker早期就是采用lxc作为runtime
runc:目前Docker默认的runtime,runc遵守OCI规范,因此可以兼容lxc
rkt:是CoreOS开发的容器runtime,也符合OCI规范,所以使用rktruntime也可以运行Docker容器
容器管理工具 :管理工具连接runtime与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给runtime执行。
Docker:虽然目前 Docker 是管理 Linux 容器最好的工具,Centos7,Runc的管理工具是docker engine,docker engine包含后台deamon和cli两部分,大家经常提到的Docker就是指的docker engine
Podman即Pod Manager tool,从名称上可以看出和kubernets的pod的密切联系,不过就其功能来说,简而言之:alias docker = podman
,是CentOS 8 新集成的功能,或许不久的未来会代替docker ,Podman是一个 为 Kubernetes 而生的开源的容器管理工具 。
lxc是lxd的管理工具
Rkt的管理工具是rkt cli
容器定义工具
容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建。
Docker image:是docker 容器的模板,runtime依据docker image创建容器
Dockerfile:包含N个命令的文本文件,通过dockerfile创建出docker image
ACI(App container image):与docker image类似,是CoreOS开发的rkt容器的镜像格式
镜像仓库 Registry
统一保存镜像而且是多个不同镜像版本的地方,叫做镜像仓库
.Docker hub:docker官方的公共仓库,已经保存了大量的常用镜像,可以方便大家直接使用
.阿里云,网易等第三方镜像仓库
.Image registry:docker 官方提供的私有仓库部署工具,无web管理界面,目前使用较少
.Harbor:vmware 提供的自带web界面自带认证功能的镜像仓库,目前有很多公司使用
编排工具
当多个容器在多个主机运行的时候,单独管理容器是相当复杂而且很容易出错,而且也无法实现某一台主机宕机后容器自动迁移到其他主机从而实现高可用的目的,也无法实现动态伸缩的功能,因此需要有一种工具可以实现统一管理、动态伸缩、故障自愈、批量执行等功能,这就是容器编排引擎
容器编排通常包括容器管理、调度、集群定义和服务发现等功能
.Docker swarm:docker 开发的容器编排引擎
.Kubernetes:google领导开发的容器编排引擎,内部项目为Borg,且其同时支持docker和CoreOS
.Mesos+Marathon:Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初是由加州大学伯克利分校的AMPLab开发的,后在Twitter得到广泛使用。通用的集群组员调度平台,mesos(资源分配)与marathon(容器编排平台)一起提供容器编排引擎功能
docker(容器)的依赖技术
容器网络:
docker自带的网络docker network仅支持管理单机上的容器网络,当多主机运行的时候需要使用第三方开源网络,例如calico、flannel等
服务发现:
容器的动态扩容特性决定了容器IP也会随之变化,因此需要有一种机制开源自动识别并将用户请求动态转发到新创建的容器上,kubernetes自带服务发现功能,需要结合kube-dns服务解析内部域名
容器监控:
可以通过原生命令docker ps/top/stats 查看容器运行状态,另外也可以使Prometheus 、heapster等第三方监控工具监控容器的运行状态
数据管理:
容器的动态迁移会导致其在不同的Host之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷/存储挂载等方式解决
日志收集:
docker 原生的日志查看工具docker logs,但是容器内部的日志需要通过ELK等专门的日志收集分析和展示工具进行处理