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. Eclipse equinox implementation of OSGi

    Bundle package org.osgi.framework; public interface Bundle extends Comparable<Bundle> { int UN ...

  2. ArcGIS软件操作——地图制图

    ArcGIS软件操作系列二(地图制图) 2016年毕业,参加工作,除了平时出差,大部分时间都在使用ArcGIS处理数据.制图,在此,先将一些制图的小心得撰写出来,希望能与各位共同交流. 1 数据准备: ...

  3. Html5 突破微信限制实现大文件分割上传

    先来前端代码 <!DOCTYPE html> <html> <head> <meta name="viewport" content=&q ...

  4. Fiddler-修改HTTP请求参数

    在进行 App 测试时,经常需要修改请求参数,以获得不同的显示效果,以查看相应的页面显示处理.例如:可以通过修改 HTTP请求 的参数,来获取不同的响应结果. 下面以修改 HTTP请求的商品系统编号为 ...

  5. broadcastemit

    http://code.angularjs.org/1.0.2/docs/api/ng.$rootScope.Scope#$broadcast scope可以以类似于DOM事件的方式进行事件传播.事件 ...

  6. 利用SQL Server Management Studio(SSMS)复制数据库

    利用SQL Server Management Studio(SSMS)复制数据库 标签(空格分隔): SQLServer 前言 今天由于客户购买的软件版本确认了,而之前进行开发的本地数据库版本较低, ...

  7. python_列表/元组/元组列表以及如何使用

    1.list是处理一组有序项目的数据结构 #定义一个列表 list=[1,2,3] print type(list) print list[0] 输出: <type 'list'> 1 2 ...

  8. Android(java)学习笔记29:泛型类的概述和使用

    1. 泛型类的概述和使用 泛型类用法一: 下面我们首先定义泛型类: package cn.itcast_04; /* * 泛型类:把泛型定义在类上 */ public class ObjectTool ...

  9. python nmap模块 端口探测

    今天添加端口探测功能,主要实现方式是通过nmap模块调用,扫描1-65535端口.上一篇中已经将UP的PC机全部获取到,这里直接从已知在线的PC中进行端口扫描就可以了,会节省很多时间. 代码如下,还是 ...

  10. POJ 2528 Mayor's posters 【区间离散化+线段树区间更新&&查询变形】

    任意门:http://poj.org/problem?id=2528 Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total S ...