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 ...
随机推荐
- 常见ie6的浏览器兼容bug
1.文字本身的大小不兼容 同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的, ie下实际占高16px,下留白3px ff 下实际占高17px,上留白1px,下留白3px ...
- sheepdog
- angularJS 单页面 两个及以上个 ng-app 的处理方式
<div ng-app="myApp1" ng-controller="myCtrl1"> 名: <input type="text ...
- Oracle:environment variable "PATH" does not exceed the recommended length
今天重新安装oracle11g,突然在检测时报了以下错误: Environment variable: "PATH" - This test checks whether the ...
- 【Hibernate那点事儿】—— Hibernate知识总结
前言: 上一篇简单的讲解了下Hibernate的基础知识.这里对Hibernate比较重要的一些知识点,进行总结和归纳. 手码不易,转载请注明!——xingoo 总结的知识点: 1 关于hiberna ...
- Ext,合计保留两位小数
1. features: [{ ftype: 'summary', dock: 'bottom' }], 2. summaryType: function(records){ return '合计'; ...
- Locust性能测试3 no-web运行
Locust也支持no-web的方式运行,直接通过控制台设置并发用户数.每秒启动用户数.持续压测时间. locust -f 脚本路径 -c 用户数 -r 每秒启动用户数 --run-time 持续压测 ...
- bootstrap table通过ajax获取后台数据展示在table
1. 背景 bootstrap table 默认向后台发送语法的dataType为 json,但是为了解决跨域问题我们需要将dataType改为jsonp,这时就需要修改bootstrap table ...
- Android(java)学习笔记57:PC and Phone 通信程序
1. 首先我写的程序代码如下: package com.himi.udpsend; import java.net.DatagramPacket; import java.net.DatagramSo ...
- 泛型约束-swift
1.泛型定义本体有参量类型约束: 2.泛型扩展对参量类型约束: 3.函数参量约束: 泛型类型的访问控制: 1.与类型无关的通用函数,泛型的任何实例都可以访问: 2.与类型有关的函数(通过扩展约束实现) ...