Docker简介

igxiaoshan Lv5

Docker理念

  • Docker是基于Go语言实现的云开源项目
    • docker的主要目标是 “ Build, Ship and Run Any App , Anywhere” 也就是通过对应用组件的 封装, 分发, 部署, 运行等生命周期的管理,使用的APP (可以是一个WEB应用或者数据库应用等等) 及其运行环境能够做到 “一次镜像,到处运行”
1
Linux容器技术的出现就解决了这样的问题,而Docker就是在它的基础上发展过来的.将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而Docker容器在任何操作系统上都是一致的,这就实现了跨平台,跨服务器.只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作.

总结: 解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

Docker下载

官网 : https://docker.com/

仓库 : https://hub.docker.com/

Docker的基本组成

  • 镜像(images)

    • Docker镜像就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建多个容易,相当于是一个root文件系统.比如官方镜像centos:7就包含了完整的一套centos:7最小系统的root文件系统.相当于容器的”源代码”;docker镜像文件类似于Java的类模板,而docker容器实例类似于Java中new出来的实例对象
  • 容器 (container)

    • 从面向对象角度
      • Docker利用容器独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境.容器是用镜像创建的运行实例.就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体.容器为镜像提供了一个标准的和隔离的运行环境;它可以被启动,开始,停止,删除.每个容器都是相互隔离的,保证安全的平台
    • 从镜像容器角度
      • 可以把容器看成一个简易版的Linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序
  • 仓库 : (repository)

    • 集中存放镜像文件的场所
    • 仓库分为公开库(public) 和私有库(private)两种
  • 总结

    • Docker本身是一个容器运行载体,或者称之为管理引擎.我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是images镜像文件,只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来的一个对象)
    • image文件可以看做是容器的模板,Docker根据image文件生成容器的实例,同一个image文件,可以生成多个同时运行的容器实例
    • 解析仓库/镜像/容器的概念
      • image文件生成的容器实例,本身也是一个文件,称之为镜像文件
      • 一个容器运行一种服务,当我们需要的时候,就可以docker客户端创建一个对应的运行实例,也就是我们的容器
      • 仓库就是放一堆镜像的地方,可以把镜像发布到仓库中,需要的时候直接拉下来

Docker运行环境

Docker是一个client-server结构的系统,Docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器

容器,是一个运行时环境,就是前面说的集装箱

Docker架构

Docker是一个 C/S 模式的架构,后端是一个松耦合架构,众多模块各司其职

  • docker运行的基本流程
    • 用户使用Docker Client 与 Docker Daemon 建立通信,并发送请求给后者
    • Docker Daemon 作为Docker 架构中的主体部分,首先提供Docker Server的功能使其可以接受 Docker Client 的请求
    • Docker Engine执行Dcoker 内部的一系列工作,每一项工作都是以一个Job的形式的存在
    • Job的运行过程中,当需要容器镜像是,则从Docker Registry中下载镜像,并通过镜像管理驱动 Graph Driver将下载镜像以Graph的形式存储
    • 当需要为Docker创建网络环境时,通过网络管理驱动Network Driver创建并配置Docker容器网络环境
    • 当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec Driver来完成
    • Libcontainer是一项独立的容器管理包,Network Driver 以及 Exec driver 都是通过Libcontainer来实现具体对容器进行的操作

Dcoker启动原理

Docker为什么会比VM虚拟机快

  • docker有着比虚拟机更少的抽象层

    • 由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

  • docker利用的是宿主机的内核,而不需要加载操作系统OS内核

    • 当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。