Docker简介
Docker是一个轻量级容器技术,是直接运行在操作系统之上的,而不是运行在虚拟机中,通过namespace实现了虚拟机技术的资源隔离,通过cgroup实现资源限制,通过写时复制实现了高效的文件操作
Docker支持将软件编译成一个镜像,在这个镜像里做好对软件的各种配置,然后进行发布,使用者可以运行这个镜像,运行中的镜像就被称之为容器
运维人员可以直接使用这个镜像,将其发布到任何装有Docker的机器上,可以有效地解决微服务架构下服务粒度细、服务数量多所导致的开发环境搭建、部署以及运维成本高的问题
cgroup
cgroup全称是control group,即控制组,cgroup的api以一个伪文件系统的实现方式,用户进程可以通过文件系统实现cgroup的组件管理;cgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源分配和再利用;所有资源管理的功能都以子系统的方式实现,接口统一子任务创建之初与其父任务处于同一个cgroup的控制组
实现的功能:
- 资源限制:可以对任务使用的资源总额进行限制
- 优先级分配:通过分配的cpu时间片数量以及磁盘io带宽大小,相当于控制了任务运行优先级
- 资源统计:可以统计系统的资源使用量,如cpu时长等
- 任务控制:cgroup可以对任务执行挂起、恢复等操作
Docker组成
Docker引擎Docker Engine
Docker引擎可以理解为一个运行在服务器上的后台进程,本质上是一个服务,只要启动该服务,就可以随时使用,可通过Docker命令与Docker引擎进行通信
Docker客户端Docker Client
Docker客户端分为命令客户端和Rest Api客户端
Docker镜像Docker Images
Docker镜像就类似于光盘,用来创建Docker容器。
通过镜像启动一个容器,一个镜像就是一个可执行的包,其中包括运行应用程序所需要的所有内容包括代码、库、环境变量、配置文件等,当代码启动起来之后,就成了容器
Docker容器Docker Containers
运行该Docker镜像便会启动一个Docker容器,该容器中将运行镜像中封装的程序。容器就是镜像运行的一个实例,在一个Docker镜像上理论上可以运行多个Docker容器,每个容器都是相互隔离的
容器是镜像的运行实例,当被运行时有镜像状态和用户进程,可以使用docker ps
查看
Docker镜像注册中心Docker Registry
Docker官方提供了一个叫做Docker Hub的镜像注册中心,用于存放公开和私有的Docker镜像仓库,可通过Docker Hub拉取Docker镜像
最核心的两个部分,一个是镜像Images,一个是容器Containers。镜像运行起来就是容器。容器运行的过程中,基于原始镜像做了改变,比如安装了程序,添加了文件,也可以提交回去(commit)成为镜像
特点
Docker是通过在底层封装了Linux容器技术来实现的,其可以快速运行、节省资源、便于交付、容器管理
- 文件系统隔离,每个容器都存放在独立的文件系统中
- 资源隔离,每个容器都有自己独立的ip、网络和端口
- 日志记录,docker会收集和记录每个进程容器的标准流,用于实时检索