Docker 是什么?

Docker是一个开源的应用容器引擎,基于Go语言开发 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何主流的 Linux版本、Microsoft Windows以及包括VM、裸机服务器和云在内的任何基础设施上运行。更重要的是Docker性能开销极低。

Docker的优势:

  • Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题。——一致的运行环境
  • 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。——更快速的启动时间
  • 避免公用的服务器,资源会容易受到其他用户的影响。——隔离性
  • 善于处理集中爆发的服务器使用压力。——弹性伸缩,快速扩展
  • 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。——迁移方便
  • 使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。——持续交付和部署

Docker 引擎

Docker 引擎是一个包含以下组件的客服端/服务端(CS)应用程序

  • 服务器:它是一个长时间运行程序的守护进程。(dockerd 命令)
  • REST API:它指定了程序可以用来与守护进程对话并指导它该做什么的接口。
  • 客服端:它是一个命令行接口(CLI)。(docker 命令)

CLI使用Docker REST API来控制或通过脚本或直接CLI命令与Docker守护进程交互。许多其他Docker应用程序使用底层API和CLI。

Docker 客服端与Docker 守护进程通信,Docker 守护进程负责构建、运行和分发Docker 容器。Docker 客服端和守护线程可以在同一个系统上运行,也可以将Docker客服端链接到远程Docker 守护进程。Docker 客服端和守护线程使用REST API 通过UNIX套接字或网络接口进行通信。

Docker 守护进程(daemon)

Docker 守护进程(dockerd) 监听Docker API 请求并管理Docker 对象,如:镜像、容器、网络和volumes。守护进程还可以与其他守护进程通信来管理Docker 服务。

Docker 客服端(Client)

Docker 客服端(docker)是Docker 用户与Docker 交互的主要方式。当你使用诸如这样的命令时(docker run),客服端发送这些命令给守护进程(dockerd)其执行,这个Docker 命令使用了Docker API 接口。Docker 客服端可以与多个守护进程进行通信。

Docker registries

Docker registries存储这Docker 镜像。Docker Hub 和 Docker Cloud 是任何人都可以使用的公共Docker registries,并且Docker 默认配置在Docker Hub上查找镜像。你甚至可以运行你自己的私人registries。如使用Docker Datacenter (DDC),它包括Docker Datacenter (DDC)。

Docker 对象(objects)

Docker 对象包括:镜像、容器、网络、volumes、插件和其他对象。

镜像和容器

镜像是轻量的、可执行的独立软件包,它包含应用程序运行所需的:代码、运行环境、系统库、环境变量和配置文件。通过运行镜像可以来启动容器。

容器是镜像运行时的实例。当镜像被执行时,镜像在内存中变成(一个有状态的镜像,或一个用户进程)容器。您可以通过docker ps 命令查看所有正在运行的容器列表

可以将容器和镜像的关系类似与面向对象编程中对象与类。

Docker 面向对象
容器 对象
镜像

容器和虚拟机

容器中运行原生 Linux和共享主机与其它容器的内核。它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量化。

虚拟机运行一个完整的“客户”操作系统,通过虚拟机管理程序虚拟访问主机资源。一般来说,虚拟机提供的环境比大多数应用程序需要的资源更多。

简单来说,容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。

                                        

观察两者对比图,传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

容器与虚拟机总结:

  • 容器(Container)是一个应用层面抽象,用于将代码和依赖打包在一起。多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行。与虚拟机相比,容器占用空间少(容器镜像大小通常只有几十兆),瞬间就能完成启动。
  • 虚拟机(VM)是一个物理硬件层抽象,用于将一台服务器变成多太服务器。管理程序允许多个VM在一台机器上运行。每一个VM都包含一整套系统、一个或多个应用、必要的二进制文件和资源库,因此占用大量空间。而且VM启动也十分缓慢。
  • 容器和虚拟机并不存是谁取代谁,而是两者可以和谐共存。
特性 容器(Container) 虚拟机(VM)
启动 秒级别 分钟级别
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个 单机支持几十个

Docker(一):概述的更多相关文章

  1. Docker 前沿概述

    目录 Docker 前沿概述 什么是Docker? Docker的基本概念 容器(Container) -- 镜像运行时的实体 镜像(Image) -- 一个特殊的文件系统 仓库(Repository ...

  2. Docker基本原理概述

    Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...

  3. docker 网络概述及网络模式详解

    docker 网络概述及网络模式详解 1.网络概述 2.网络模式详解 1.网络概述: Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0) ...

  4. Docker(1)--概述

    Docker概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,您可以以与管理应用程序相同的方式来管理 ...

  5. 001.Docker简介概述

    一 简介 Docker最初是dotCloud公司的一个内部项目,诞生于 2013 年初,由google公司开源的Go语言开发. Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移 ...

  6. Docker 开发概述

    This page lists resources for application developers using Docker. Develop new apps on Docker If you ...

  7. Docker的概述

    什么是Docker 1.容器技术 在计算机的世界中,容器拥有一段漫长且传奇的历史.容器与管理程序虚拟化(hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一 ...

  8. docker 框架概述

    docker的框架 docker 使用传统的client-server架构模式,用户端通过docker client 与docker  daemon 建立通信,并将请求发送给后者,而docker后端时 ...

  9. Docker之概述

    我们常常需要将应用程序部署在独立的系统环境中,而使用物理机器部署会浪费大量的物理资源.能否讲物理机器虚拟成一个一个容器,而将程序部署在各自的容器中?Docker是一个能够把开发的应用程序自动部署到容器 ...

  10. Docker 01 概述

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

随机推荐

  1. 常见ie6的浏览器兼容bug

    1.文字本身的大小不兼容 同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的, ie下实际占高16px,下留白3px ff 下实际占高17px,上留白1px,下留白3px ...

  2. sheepdog

  3. angularJS 单页面 两个及以上个 ng-app 的处理方式

    <div ng-app="myApp1" ng-controller="myCtrl1"> 名: <input type="text ...

  4. Oracle:environment variable "PATH" does not exceed the recommended length

    今天重新安装oracle11g,突然在检测时报了以下错误: Environment variable: "PATH" - This test checks whether the ...

  5. 【Hibernate那点事儿】—— Hibernate知识总结

    前言: 上一篇简单的讲解了下Hibernate的基础知识.这里对Hibernate比较重要的一些知识点,进行总结和归纳. 手码不易,转载请注明!——xingoo 总结的知识点: 1 关于hiberna ...

  6. Ext,合计保留两位小数

    1. features: [{ ftype: 'summary', dock: 'bottom' }], 2. summaryType: function(records){ return '合计'; ...

  7. Locust性能测试3 no-web运行

    Locust也支持no-web的方式运行,直接通过控制台设置并发用户数.每秒启动用户数.持续压测时间. locust -f 脚本路径 -c 用户数 -r 每秒启动用户数 --run-time 持续压测 ...

  8. bootstrap table通过ajax获取后台数据展示在table

    1. 背景 bootstrap table 默认向后台发送语法的dataType为 json,但是为了解决跨域问题我们需要将dataType改为jsonp,这时就需要修改bootstrap table ...

  9. Android(java)学习笔记57:PC and Phone 通信程序

    1. 首先我写的程序代码如下: package com.himi.udpsend; import java.net.DatagramPacket; import java.net.DatagramSo ...

  10. 泛型约束-swift

    1.泛型定义本体有参量类型约束: 2.泛型扩展对参量类型约束: 3.函数参量约束: 泛型类型的访问控制: 1.与类型无关的通用函数,泛型的任何实例都可以访问: 2.与类型有关的函数(通过扩展约束实现) ...