Docker是一个重新定义了程序开发测试、交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是docker提出的“Build once,Run anywhere”
Docker与linux内核的关系
docker与linux内核的关系
Cgroup: 对资源进行限制(如对物理资源CPU、内存、I/O的限制)
Namespace:对进程进行隔离
Chroot: 能改变当前运行的进程和子进程的根目录
AUFS:联合文件系统,Docker利用AUFS将不同的Layer结合到1个image中去
Docker优势
高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用效率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。
更快速的启动时间
传统的虚拟机技术启动应用服务往往需要几分钟,而Docker容器应用,由于直接运行与宿主内核,无需启动完整的操作系统,因此何以做到秒级、甚至是毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
一致的运行环境
开发过程中一个常见的问题是环境一直问题,由于开发环境、测试环境、生产环境不一致,导致有一些bug并未在开发过程中发现。而Docer的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。从而不会再出现[这段代码在我的电脑上没问题的囧句]
持续交付和部署
使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile开进行镜像构建,并结合将持续集成体统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署。
更轻松的迁移
Docker使用的分层存储以及镜像的技术,是的应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于镜像进一步扩展镜像也变得非常简单。此外,Docker团队同各个开元项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境中使用,又可以作为基础进一步制定,大大的降低了应用服务的镜像制作成本。
Docker的三个基本概念:1.镜像2.容器3.仓库
Docker镜像
Docker镜像是一个特殊的文件系统,除了提供容器运行所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名券、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会改变。
Docker容器
镜像和容器的关系,就像是面向对象程序设计中类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行属于自己的独立的命名空间。因此,容器可以拥有自己的root文件系统、自己地网络适配、自己的进程空间,甚至自己的用户id空间。容器内的进城是运行在一个隔离的环境里,使用起来,就好像是在一个独立与宿主的系统下操作一样。这种特征使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特征,很多人初学Docker时常常会混淆容器和虚拟机。
Docker仓库
仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。目前,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载
网友评论