logo头像

你需要一点点勇气

Docker 基本概念

一、Why Docker?

  Problem - 软件开发中的问题:

  环境配置是软件开发过程中的难题,不同的计算机可能使用不同的操作系统,有不同的系统配置。一个软件可以执行的必要条件是,软件的运行依赖存在,并且对操作系统进行了正确的配置。

  所以当软件从开发环境移植到,客户机运行环境、或者测试环境的时候,可能因为操作系统设置不正确或者缺少依赖,而不能运行。比如运行JAVA应用程序,必须有JRE,还需要配置JAVA环境变量。

  简而言之,软件运行因为需要在不同机器上配置环境变量,引入依赖库。就会变的十分复杂,操作冗余。

  Solution - 软件带所需环境安装:

  (1)虚拟机

  虚拟机是一种软件带环境安装的方法,虚拟机是对硬件的一种抽象,可以将一个服务器拆分成多台服务器。Hypervisor允许多个VM在一个物理机上运行,每个VM都包括一份独立的对操作系统,应用软件,必要的二进制文件和库的复制。从而做到软件带环境安装到虚拟机。

图1 VM

  (2)Docker

  Docker是软件带环境安装的另外一种方法,docker容器是对app层的抽象,Docker容器将代码和依赖打包。多个容器可以同时运行在一个物理机上 并且共享操作系统内核,每一个容器都可以被视为相互独立且隔离的进程。容器是基于沙盒机制的,容器之间不会有任何接口。

图2 Docker

  (3)Docker容器 vs VM

  • 容器是进程级别的,只包含用到的资源,容量小,启动速度快。容器运行在操作系统上,和宿主机器共享硬件资源和操作系统,可以实现资源的动态分配。容器包含应用和依赖包,与其他容器共享内核。在宿主操作系统中,用户控件以分离的进程运行。可以最优化操作系统内存的应用。
  • 虚拟机需要模拟整个机器包括硬件,每个虚拟机都有自己的操作系统。虚拟机被启动之后,分配给虚拟机的所有资源都会被占用,虚拟机除了包含应用程序,二进制和库,还有一个完成的用户操作系统。所以,资源有些浪费,并且启动速度缓慢。

二、什么是Docker?

  Docker是一个开源的容器引擎,开发者可以将应用程序和程序所依赖的包,一起打包到一个文件中,运行文件即可产生一个虚拟容器,程序在虚拟容器中运行,无需考虑物理机运行环境的不同。

三、Docker架构及基本概念

图3 Docker架构

Docker架构图中包含如下几个部分:

  (1)Docker Client客户端:Docker客户端可以通过命令行或者其他工具,调用Docker Engin API与 Docker守护进程Daemon进行通信。

  (2)Docker Machine:是一个简化了的docker命令行安装工具,通过简单的命令可以在不同的平台上安装docker。

  (3)Docker Hosts主机:运行Docker守护进程daemon和容器container的,物理或者虚拟机器,可以是local本地主机或者remote远程主机。

  (4)Docker Daemon守护进程:运行在宿主机后台,等待接收来自客户端的消息,Docker客户端通过调用API与守护进程交互,执行对应操作,如容器的创建,运行,暂停,终止,删除。

  (5)Docker Image镜像:镜像image是用来创建容器container的模版,一个宿主机上可以存在多个镜像(image1、image3), 一个镜像可以创建多个容器(container3a、container3b),类似于Java中类与对象的关系。镜像可以从Docker Hub上下载。

  (6)Docker Container容器:容器是通过镜像创建的,容器是动态的,镜像是静态的,一个容器可以运行一个或者一组应用,内部可以安装任何软件和库文件,可以对内部环境变量做任何配置。每个容器之间都是相互隔离的,容器之间可以共享操作系统内核,但是不共享容器内部资源。

  (7)Docker Registries注册服务器:注册服务器是存放镜像仓库的地方,一个registry可以包含多个repository, 每个repository中可以包含多个镜像,如不同版本的相关iamges, ubuntu:2.2, ubuntu:2.3 ….. ubuntu:latest。

  (8)Docker Repository仓库:用来保存镜像,可以理解为代码控制中的代码仓库,类似于Maven的中央仓库。Docker公司的官方仓库存放在Docker Hub。Repository是开源项目,所以任何人都可以部署自己的私有仓库并注册在private registry,类似push到github。

Docker架构:

  Docker采用C/S架构,客户端通过调用远程API管理Docker容器,Docker daemon作为服务端接受来自客户端的请求,并执行相应任务。客户端可服务器可以在同一个宿主机,可以个在不同机器上。

四、容器云技术 kubernets和swarm

  • 两者都是容器的编排服务,把底层的宿主主机抽象化,然后将应用从镜像开始,以docker的方式部署到宿主机上
  • Kubernetes: 轻量级、以实现核心功能为重、实施快速、适合小规模部署
  • Swarm: 企业级、功能全、支持场景多、适合做企业级docker云方案