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. 控制结构(1) 分枝/叶子(branch/leaf)

    // 下一篇:卫语句(guard clause) 典型代码: function doSomething1(){ // ... } function doSomething2(){ // ... } f ...

  2. Vue-cli创建项目从单页面到多页面

    vue-cli创建项目从单页面到多页面 对于某些项目来说,单页面不能很好的满足需求,所以需要将vue-cli创建的单页面项目改为多页面项目. 需要修改以下几个文件: 1.下载依赖glob $npm i ...

  3. JavaEE成长之路

    前言 学习Java已经有一段时间了,在学习的过程中也走过了不少弯路. 写下这篇博文,主要是想记录下自己学习编程之路,以及反思自己在学习的时候出现的问题,下面也会给出我自认为学习JavaEE的路线,想要 ...

  4. AJAX应用【股票案例】

    股票案例 我们要做的是股票的案例,它能够无刷新地更新股票的数据.当鼠标移动到具体的股票中,它会显示具体的信息. 我们首先来看一下要做出来的效果: 服务器端分析 首先,从效果图我们可以看见很多股票基本信 ...

  5. Ningx集群环境搭建

    Ningx集群环境搭建 Nginx是什么? Nginx ("engine x") 是⼀个⾼性能的 HTTP 和 反向代理 服务器,也是⼀个 IMAP/ POP3/SMTP 代理服务 ...

  6. 深入浅出数据结构C语言版(19)——堆排序

    在介绍优先队列的博文中,我们提到了数据结构二叉堆,并且说明了二叉堆的一个特殊用途--排序,同时给出了其时间复杂度O(N*logN).这个时间界是目前我们看到最好的(使用Sedgewick序列的希尔排序 ...

  7. Failed to load the JNI shared library "XXXXXXX"

    今天启动Eclipse的时候出现了这个问题,经过查找, 一般来说这种问题都是因为eclipse 和Java 的兼容性不一致所导致的. 1) 查看Eclipse 和Java 版本 那么我们需要分别查看下 ...

  8. java ee Servlet 开发框架分享

    大家好! 这里分享一下javaEE Servlet开发框架! 1.首先是POST和GET入口以及接收处理文件 package com.sl.imps; import java.io.IOExcepti ...

  9. OpenStack Pike超详细搭建文档 LinuxBridge版

    前言 搭建前必须看我 本文档搭建的是分布式P版openstack(1 controller + N compute + 1 cinder)的文档. openstack版本为Pike. 搭建的时候,请严 ...

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

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