Docker是一个开源项目,用于将应用程序部署自动化,作为可在云端或本地运行的可移植,自包含的容器。 Docker同时也是一家促进和发展这项技术的公司,与云,Linux以及Windows的供应商(包括Microsoft)合作。

(图2-2 Docker将容器部署到混合云的所有分层上)

Docker镜像原生支持在Linux和Windows上运行,但Windows镜像只能运行在Windows宿主而Linux镜像也只能运行在Linux宿主上,这里的"宿主"指服务器或者VM。

开发者可以在Windows,Linux或者macOS上使用开发环境,他们只需要运行一个Docker宿主,然后其中会装载Docker镜像与其应用还有应用的依赖。 在Linux或Mac上工作的开发人员使用基于Linux的Docker宿主,并且只能为Linux容器创建镜像。 (Mac上的开发人员可以编辑代码或从macOS运行Docker CLI,但在撰写本篇文章时,容器尚不能直接在MacOS上运行。)在Windows上工作的开发人员可以为Linux或Windows 容器创建镜像。

为了在开发环境中托管容器并提供其他开发工具,Docker为Windows与MacOS提供了Docker Community Edition(CE)。 它会安装必要的VM(Docker宿主)来托管容器。 Docker还提供了Docker Enterprise Edition(EE),专门为企业开发而设计,由开发,部署和运行大型关键业务应用程序的IT团队使用。

运行Windows 容器有两种方式:

  • Windows服务器通过进程与命名空间提供应用的隔离。Windows服务器与容器宿主共享同一个内核,并且所有的容器都会运行在这个宿主之上。
  • Hyper-V容器通过在高度优化过的虚拟机中运行每个容器来扩展Windows服务器提供的隔离。 在这样的配置下,容器宿主的内核不与Hyper-V 容器共享,提供更好的隔离。

这些容器镜像的创建方式和功能相同。 不同之处在于如何从镜像创建容器 —— 运行Hyper-V容器需要额外的参数。 有关详细信息,请参阅Hyper-V Containers。

Docker容器与虚拟机对比

图2-3 展示了Docker与虚拟机之间的一些对比。

(图2-3 VM  )

(图2-3 容器)

虚拟机包括应用程序,及其所需的库或二进制文件,以及完整的客户机操作系统。 完全虚拟化需要比容器化更多的资源。 容器包括应用程序及其所有依赖。 但是,它们与其他容器共享操作系统内核,作为用户空间的隔离进程运行在宿主操作系统。 (除了Hyper-V容器,各个容器在其专用虚拟机内部运行)

由于容器需要的资源少得多(例如,它们不需要完整的操作系统),因此它们易于部署,并且可以快速启动。 这允许你具有更高的部署密度,也就是说你可以在同一硬件单元上运行更多的服务,从而降低成本。

镜像的主要目的是使得环境(依赖)在不同的部署环境中是相同的。 这意味着你可以在自己的机器上调试,然后将其部署到另一台机器而能够保证环境相同。

容器镜像是一种打包应用程序或服务并以可靠和可复用的方式进行部署的方法。 可以说Docker不仅是技术,也是思想体系和软件过程。

当使用Docker时,你不会再听到开发人员说:“它在我的机器上正常工作,却不能在生产环境中好好工作?”他们可以简单地说“它在Docker上运行”,因为打包的Docker应用程序可以在任何支持Docker的环境上运行,并且 它将以所指定的部署策略(开发,QA,分期,生产环境)运行。

容器与Docker简介(二)什么是DOCKER——微软微服务电子书翻译系列的更多相关文章

  1. 容器与Docker简介(三)Docker相关术语——微软微服务电子书翻译系列

    本节列出了在更加深入Docker之前应该熟悉的术语和定义. 有关详细的定义,请参阅Docker提供的术语表. 容器镜像(Container image):具有创建容器所需要的所有依赖和信息的包. 镜像 ...

  2. 容器与Docker简介(一)——微软微服务电子书翻译系列

    前不久参加了深圳的Azure开源者峰会,会上张善友张老师推荐了微软的一个架构网站:.NET Application Architecture 这几天正好工作比较闲,看了下里面关于微服务架构的介绍,非常 ...

  3. 容器与Docker简介(四)Docker容器,镜像与 Registries——微软微服务电子书翻译系列

    当使用Docker时,开发人员创建一个应用程序或服务,并将其和其依赖关系打包到容器镜像中. 镜像是应用程序或服务及其配置和依赖的静态表示形式. 要运行应用程序或服务,应用程序的镜像将被实例化以创建一个 ...

  4. Docker—微软微服务

    容器与Docker简介(一)——微软微服务电子书翻译系列 容器与Docker简介(二)什么是DOCKER——微软微服务电子书翻译系列 容器与Docker简介(三)Docker相关术语——微软微服务电子 ...

  5. Docker实战(二)之操作Docker容器

    容器是Docker的另外一个核心概念.简单来说,容器是镜像的一个运行实例.所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层.如果认为虚拟机是模拟运行的一整套操作系统系统(包括内核,应 ...

  6. 深入浅出Docker(二):Docker命令行探秘

    1. Docker命令行 Docker官方为了让用户快速了解Docker,提供了一个交互式教程,旨在帮助用户掌握Docker命令行的使用方法.但是由于Docker技术的快速发展,此交互式教程已经无法满 ...

  7. 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...

  8. Docker(二):Docker镜像使用

    1.Docker Image介绍 简单来说,Docker Image是用来启动容器的只读模板. Docker Image被划分了三个部分:Remote-dockerhub.com/namespace/ ...

  9. Docker实战 | 第二篇:IDEA集成Docker插件实现一键自动打包部署微服务项目,一劳永逸的技术手段值得一试

    一. 前言 大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸. 二. 配置服务器 1. ...

随机推荐

  1. Easyui DataGrid DateRange Filter 漂亮实用的日期区间段筛选功能

    自定义扩展Jquery easyui datagrid filter组件实现对日期类型区间段的筛选功能.显示效果如一下 是不是非常实用 引用的jquery 组件是 Date Range Picker ...

  2. JS判斷文件大小

    function findSize(file) { var dom = document.getElementById("file"); var fileSize = dom.fi ...

  3. 快速学会require的使用

    快速学会使用require.js 1.get start 先到官网下载requirejs到本地,官方同时提供Node版本r.js,我们只使用requirejs即可. 接下来在页面上写入 <scr ...

  4. 利用原生js制做数据管理平台,适合初学者学习

    摘要:数据管理平台在当今社会中运用十分广泛,我们在应用过程中,要对数据进行存储,管理,以及删除查询等操作,而我们在实际设计的时候,大牛们大多用到的是JQuery,而小白对jq理解也较困难,为了让大家回 ...

  5. Https系列之一:https的简单介绍及SSL证书的生成

    Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...

  6. 【个人笔记】《知了堂》MySQL中的数据类型

    MySQL中的数据类型 1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) ...

  7. mac 安装Beautiful Soup

    Beautiful Soup是一个Python的一个库,主要为一些短周期项目比如屏幕抓取而设计.有三个特性使得它非常强大: 1.Beautiful Soup提供了一些简单的方法和Python术语,用于 ...

  8. 当你的SSM项目中的springmvc.xml发生第一行错误解决方案

    当你新建了一个SSM项目,你复制网上的xml文件来配置或者你下载了一个SSM项目打开发现xml文件错误,打开是第一行报错的时候你是不是很懵逼 或者是这样 总之就是xml文件中<?xml vers ...

  9. getField()和select()方法的区别

    在ThinkPHP中,查询数据库是必不可少的操作. 那么,getField()方法和select()方法都是查询的方法,到底有什么不同呢? 案例来说明: A.select()方法 例子1 $acces ...

  10. vue学习心得

    前言 使用vue框架有一段时间了,这里总结一下心得,主要为新人提供学习vue一些经验方法和项目中一些解决思路. 文中谨代表个人观点,如有错误,欢迎指正. 环境搭建 假设你已经通读vue官方文档(文档都 ...