Docker(一):概述
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(一):概述的更多相关文章
- Docker 前沿概述
目录 Docker 前沿概述 什么是Docker? Docker的基本概念 容器(Container) -- 镜像运行时的实体 镜像(Image) -- 一个特殊的文件系统 仓库(Repository ...
- Docker基本原理概述
Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...
- docker 网络概述及网络模式详解
docker 网络概述及网络模式详解 1.网络概述 2.网络模式详解 1.网络概述: Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0) ...
- Docker(1)--概述
Docker概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,您可以以与管理应用程序相同的方式来管理 ...
- 001.Docker简介概述
一 简介 Docker最初是dotCloud公司的一个内部项目,诞生于 2013 年初,由google公司开源的Go语言开发. Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移 ...
- Docker 开发概述
This page lists resources for application developers using Docker. Develop new apps on Docker If you ...
- Docker的概述
什么是Docker 1.容器技术 在计算机的世界中,容器拥有一段漫长且传奇的历史.容器与管理程序虚拟化(hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一 ...
- docker 框架概述
docker的框架 docker 使用传统的client-server架构模式,用户端通过docker client 与docker daemon 建立通信,并将请求发送给后者,而docker后端时 ...
- Docker之概述
我们常常需要将应用程序部署在独立的系统环境中,而使用物理机器部署会浪费大量的物理资源.能否讲物理机器虚拟成一个一个容器,而将程序部署在各自的容器中?Docker是一个能够把开发的应用程序自动部署到容器 ...
- Docker 01 概述
参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...
随机推荐
- Eclipse equinox implementation of OSGi
Bundle package org.osgi.framework; public interface Bundle extends Comparable<Bundle> { int UN ...
- ArcGIS软件操作——地图制图
ArcGIS软件操作系列二(地图制图) 2016年毕业,参加工作,除了平时出差,大部分时间都在使用ArcGIS处理数据.制图,在此,先将一些制图的小心得撰写出来,希望能与各位共同交流. 1 数据准备: ...
- Html5 突破微信限制实现大文件分割上传
先来前端代码 <!DOCTYPE html> <html> <head> <meta name="viewport" content=&q ...
- Fiddler-修改HTTP请求参数
在进行 App 测试时,经常需要修改请求参数,以获得不同的显示效果,以查看相应的页面显示处理.例如:可以通过修改 HTTP请求 的参数,来获取不同的响应结果. 下面以修改 HTTP请求的商品系统编号为 ...
- broadcastemit
http://code.angularjs.org/1.0.2/docs/api/ng.$rootScope.Scope#$broadcast scope可以以类似于DOM事件的方式进行事件传播.事件 ...
- 利用SQL Server Management Studio(SSMS)复制数据库
利用SQL Server Management Studio(SSMS)复制数据库 标签(空格分隔): SQLServer 前言 今天由于客户购买的软件版本确认了,而之前进行开发的本地数据库版本较低, ...
- python_列表/元组/元组列表以及如何使用
1.list是处理一组有序项目的数据结构 #定义一个列表 list=[1,2,3] print type(list) print list[0] 输出: <type 'list'> 1 2 ...
- Android(java)学习笔记29:泛型类的概述和使用
1. 泛型类的概述和使用 泛型类用法一: 下面我们首先定义泛型类: package cn.itcast_04; /* * 泛型类:把泛型定义在类上 */ public class ObjectTool ...
- python nmap模块 端口探测
今天添加端口探测功能,主要实现方式是通过nmap模块调用,扫描1-65535端口.上一篇中已经将UP的PC机全部获取到,这里直接从已知在线的PC中进行端口扫描就可以了,会节省很多时间. 代码如下,还是 ...
- POJ 2528 Mayor's posters 【区间离散化+线段树区间更新&&查询变形】
任意门:http://poj.org/problem?id=2528 Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total S ...