docker入门、LXC、windows container 和 Hyper知识基础、实用情况
虚拟机与容器
很明显可以看出两者在操作系统级别上的隔离和进程上的隔离的区别,VM因为隔离级别更高明显更重。

linux容器主要技术特点:
文件系统隔离:每个容器都有自己的root文件系统
进程隔离:每个容器都运行在自己的进程环境中
网络隔离:容器件的虚拟网络接口和IP地址都是分开的
资源隔离和分组:使用cgroup将CPU和内存之类的资源独立分配给每个容器
windows容器主要特点:
| 虚拟机 | 容器 | |
|---|---|---|
| 隔离 | 提供与主机操作系统和其他 VM 的完全隔离。 当强安全边界很关键时(例如,在同一台服务器或群集上托管来自竞争性公司的应用时),这很有用。 | 通常提供与主机和其他容器的轻度隔离,但不提供与 VM 一样强的安全边界。 (可以使用 Hyper-V 隔离模式隔离轻型 VM 中的每个容器,从而提高安全性。) |
| 操作系统 | 运行包含内核的完整操作系统,因此需要更多的系统资源(CPU、内存和存储)。 | 运行操作系统的用户模式部分,可以对其进行定制,使之只包含应用所需的服务,减少所使用的系统资源。 |
| 来宾兼容性 | 运行虚拟机内的几乎任何操作系统 | 在与主机相同的操作系统版本上运行(Hyper-V 隔离使你能够在轻型 VM 环境中运行同一 OS 的早期版本) |
| 部署 | 使用 Windows Admin Center 或 Hyper-V 管理器部署单个 VM;使用 PowerShell 或 System Center Virtual Machine Manager 部署多个 VM。 | 通过命令行使用 Docker 部署单个容器;使用 Azure Kubernetes 服务等业务流程协调程序部署多个容器。 |
| 操作系统更新和升级 | 在每个 VM 上下载并安装操作系统更新。 安装新的操作系统版本需要升级;通常情况下,直接创建全新 VM。 这样可能很耗时,尤其是在有大量 VM 的情况下... | 在容器中更新或升级操作系统文件的操作是相同的: 编辑容器映像的生成文件(称为 Dockerfile),使之指向最新版 Windows 基础映像。用这个新的基础映像重新生成容器映像。将容器映像推送到容器注册表。使用业务流程协调程序重新进行部署。 业务流程协调程序提供的强大的自动化功能允许大规模这样做。 有关详细信息,请参阅教程:在 Azure Kubernetes 服务中更新应用程序。 |
| 持久性存储 | 对单个 VM 使用进行本地存储的虚拟硬盘 (VHD),或对多个服务器共享的存储使用 SMB 文件共享 | 使用 Azure 磁盘作为单个节点的本地存储,或将 Azure 文件存储(SMB 共享)用于由多个节点或服务器共享的存储。 |
| 负载平衡 | 虚拟机负载均衡将运行中的 VM 移动到故障转移群集中的其他服务器。 | 容器本身不移动,而是由业务流程协调程序在群集节点上自动启动或停止容器,以管理负载和可用性方面的更改。 |
| 容错 | VM 可以故障转移到群集中的另一台服务器,并在新服务器上重启 VM 的操作系统。 | 如果某个群集节点发生故障,则在该节点上运行的所有容器都将在另一个群集节点上由业务流程协调程序快速重新创建。 |
| 网络 | 使用虚拟网络适配器。 | 使用虚拟网络适配器的隔离视图,在减少使用资源的同时,稍微减少提供的虚拟化 – 主机的防火墙与容器共享。 有关详细信息,请参阅 Windows 容器网络。 |
windows授权机制:

docker 入门:
这篇文章对于docker入门,在docker架构方面的了解有很大的帮助,此等级标题下均为该文章内容。
https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html




Dockerfile是什么:
前面我们已经提到了 Docker 的一些基本概念。以 CTF 选手的角度来看,我们可以去使用 Dockerfile 定义镜像,依赖镜像来运行容器,可以去模拟出一个真实的漏洞场景。因此毫无疑问的说, Dockerfile 是镜像和容器的关键,并且 Dockerfile 还可以很轻易的去定义镜像内容,说了这么多,那么 Dockerfile 到底是个什么东西呢?
Dockerfile 是自动构建 docker 镜像的配置文件, 用户可以使用 Dockerfile 快速创建自定义的镜像。Dockerfile 中的命令非常类似于 linux 下的 shell 命令。
关于不同版本的内核的对于镜像的影响
Docker镜像只是一个自定义文件/目录结构,通过一个或多个Dockerfiles的FROM和RUN指令以层的形式进行组装,并带有一些元数据(例如:打开哪个端口或在容器启动时执行哪个文件),如果内核可以运行守护程序(docker daemon),一般代表具有运行的一些通用API,这时如果镜像中包含依赖内核最新的一些功能的软件将无法运行,但因为通用的API足以支持程序的最初启动,Docker并不会阻止,因为它不在乎镜像中的内容和用哪个内核的版本来启动镜像,其实一般本机的操作系统都是较新的(若对旧的内核的一些功能的引用没用导致操作系统的BUG或被黑客攻击的风险,一般到新的操作系统也会保留),所以,问题并不常见。
**OS ** =内核+文件系统/库
镜像 =文件系统/库
关于docker for windows 10 和 docker for Linux
在Windows server 2016上,微软提供了两种容器,Windows Server Container 和Hyper -V Container ,两者执行相同的操作并执行相同的方式管理,但是它们的隔离级别不同, 区别在于,在运行 Hyper-V 容器的映像中创建容器的方式需要使用其他参数。Windows Server Container 和Linux Container(LIinux容器由来:https://developer.aliyun.com/article/745446) 一样,容器与底层操作系统共享内核,所以它们会很轻量而且运行迅速。当你在容器中启动一个进程的时候,这个进程实际上运行在宿主机上,你可以使用任务管理器或者Powershell 命令 Get-Process 获取到这个进程的信息。这使得它们比VM小,因为它们每个都不需要操作系统的副本。但是,安全性可能会成为一个问题,因为如果一个容器遭到破坏,则OS和所有其他容器都将受到威胁。Windows 10上虽然也提供了容器服务,但是只能运行Hyper-V Contianer。
Linux是依据其操作系统的CGroup(https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html)进行进程级别的分离,即LXC(Linux Container),而windows因为没有像Linux的开源性那么方便,但也提供了Windows Server Container 以提供跟LXC一样的功能,但都有共享同个内核所涉及的安全性问题,所以windows在win10上只Hyper-V容器所提供的进程隔离与虚拟机与物理机的隔离保证安全性,而且docker的Engine需要Linux,所以windows环境下运行docker本就需要Linux的虚拟环境。
Windows 映像仅能在 Windows 主机上运行(可能是Linux本来就快,而且windows有电脑的人基本都有,所以没必要去Linux上测试,还不如在windows程序中运行,Linux镜像可以在windows上运行可能是为了能一起开发测试用吧),Linux 映像可以在 Linux 主机和 Windows 主机上运行(在 Hyper-V 上运行的基于 LinuxKit 的虚拟机在 Windows 桌面上运行 Linux 容器)(https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/deploy-containers/linux-containers),其中主机是指服务器或 VM。因为Windows用到docker daemon 时,其Engine是依据Linux启动的,所以我们运行Linux的镜像时仍是通过Hyper-V虚拟机实现了Linux 环境,并且提供了Hyper-V的专用容器而已。所以一般在windows进行开发与测试
当然,微软这么大的一家公司,不会这么将就,查资料时发现Hyper 是一项轻量级VM+docker image 的技术,可以用来解决LXC共享内核所带来的安全问题:其中涉及到进程隔离和Hyper -V隔离(下面三幅图为微软官网对于容器区别的展示),Linux可能也用Hyper技术实现隔离,但是若是在windows中运行Linux镜像,这时已经通过Hyper-V上的LinuxKit虚拟机上运行了host,就不需要在上面再加一层了,直接用LXC即可。

进程隔离
这是容器的“传统”隔离模式,Windows 容器概述中介绍了这种模式。 使用进程隔离时,可以通过命名空间、资源控制以及进程隔离技术进行隔离,这样多个容器实例就可以同时在给定主机上运行。 在此模式下运行时,容器与主机之间以及容器与容器之间会共享同一个内核。 这大致与 Linux 容器的运行方式相同。

Hyper-V 隔离
此隔离模式在主机和容器版本之间提供增强的安全性和更广泛的兼容性。 使用 Hyper-V 隔离时,多个容器实例在主机上并发运行;但是,每个容器在高度优化的虚拟机中运行,并有效地获得自己的内核。 由于虚拟机的存在,因此可以在每个容器之间以及容器与容器主机之间进行硬件级别的隔离。

两者的区别

至于两者的由来以及与Docker的区别,可以看下面两篇文章(包括Hyper在如何轻量级的思路:1加快容器启动速度(精简VM配置和内核、VM Cache功能) 2.降低内存开销):
容器编排平台
Swarm是Docker提供的容器编排平台,从1.12版本开始,任何的服务器节点都可以加入Swarm集群,这同样适用于Windows服务器。因此,你可以在一个Swarm集群中混合部署Windows和Linux节点,虽然不同的操作系统节点上只能运行对应的容器,但是它们都可以通过swarm network进行通讯,构建一个完整的应用。
对于微服务拆分来说,可以构建跨平台的分布式应用非常具有吸引力。如果你的应用现在是一个传统的asp.net单体应用,你可以先采用microsoft/windowservercore镜像对整个单体应用进行容器化部署,然后逐步的将其中的某些组件进行拆分,使用microsoft/nanoserver上的.net core来运行这些微服务组件,你甚至可以引入nginx作为你的反向代理服务器,并将其运行在linux服务器节点上。

实用中的使用情况
两篇文章对一些其中的基本使用情况有了较好的概述:
https://www.cnblogs.com/daxnet/p/7719574.html
https://www.zhihu.com/question/51134842
docker入门、LXC、windows container 和 Hyper知识基础、实用情况的更多相关文章
- docker入门_image、container相关命令
docker入门_image.container相关命令 镜像仓库服务.镜像仓库.镜像相关概念 镜像仓库服务:docker镜像仓库服务.阿里云镜像服务 镜像仓库:docker镜像仓库服务中会有很多仓库 ...
- Docker入门(windows安装)
Docker入门(安装)Docker是一种轻量级容器技术,实际中直接运行在当前操作系统(Linux)上,而不是虚拟机中.PaaS提供了存储,数据库,网络,负载均衡,自动扩展等功能,Docker云平台就 ...
- Docker入门2------容器container常规操作
参考转自 https://www.cnblogs.com/jsonhc/p/7760144.html Docker的container 运行一个container的本身就是开启一个具有独立namesp ...
- windows container (docker) 容器资料笔记
背景 业务需求:简化公司私有云,公有云的部署,尝试寻找更好的,更优化的技术方案替换现有的虚拟机部署方案. 技术背景: .net Docker 学习资料 Docker中文社区: http://www.d ...
- docker windows container的一些注意点
1.在阿里云esc的ws2016里装docker只能使用windows container,因为官方也说了主机也是虚拟机所以不能开启Hyper-v. 2.默认使用nat模式运行network,该模式在 ...
- Windows Container 和 Docker:你需要知道的5件事
微软在2016年的Ignite技术大会上正式发布了Windows Server 2016,其中的容器服务已经可以作为生产环境使用.这意味着Windows 内置的容器服务正式进入了大家的视野,虽然之前我 ...
- Windows Container 和 Docker
Windows Container 和 Docker 微软在2016年的Ignite技术大会上正式发布了Windows Server 2016,其中的容器服务已经可以作为生产环境使用.这意味着Wind ...
- Docker 入门教程(2)——image与container
image镜像 Definition of: image Docker images are the basis of containers. An Image is an ordered colle ...
- docker入门1-docker container
image和container介绍 一个image是一个可被docker执行的包,它包括程序运行的所有东西,包括代码,运行时,库,环境变量和配置文件. 一个container是image在内存中的运行 ...
随机推荐
- 需要加token验证的接口返回文件流下载
没有加token之前,下载文件用的是a标签,直接下载. 现在要求是需要在header中加入token. getDownload(urls, fileName) { var url = urls; va ...
- Unit2-窝窝牌电梯
全文共2329字,推荐阅读时间10~15分钟. 文章共分四个部分: 作业分析 评测相关 重构策略 课程体验感受 作业分析 Unit2要求我们模拟现实生活中的电梯调度情景,迭代路径是单电梯->多电 ...
- flutter pdf 文件浏览
说明 flutter_full_pdf_viewer 可以实现从网络上下载 pdf 文件并且显示出来. 包地址:flutter_full_pdf_viewer: ^1.0.6 使用方法 1.在 pub ...
- python实现批量文件重命名
本文实例为大家分享了python批量文件重命名的具体代码,供大家参考,具体内容如下 问题描述 最近遇到朋友求助,如何将大量文件名前面的某些字符删除. 即将图中文件前的编号删除. Python实现 用到 ...
- charles 破解方法
1.https://www.charlesproxy.com/latest-release/download.do 官网下载charles 2.傻瓜式安装完成(路径可以默认c盘) 3.安装完成后去c盘 ...
- Android学习笔记菜单资源文件
创建菜单资源 menu_one.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns: ...
- 基于docker-compose部署jumpserver
基于docker-compose部署jumpserver 组件说明 Jumpserver 为管理后台, 管理员可以通过 Web 页面进行资产管理.用户管理.资产授权等操作, 用户可以通过 Web 页面 ...
- UWP实现第二字幕并且跟随系统的设置
话不多说,先看一下最终效果 系统设置默认 在系统设置里面更改字幕的显示效果 需求 要求播放器可以显示第二字幕,类似旁白的文字解释.比如片中出现了一个专业术语,这个时候观众可能有些疑惑.所以需要在屏幕上 ...
- java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现
问题解决思路:查看编译生成的字节码文件 目录 测试匿名内部类的实现 小结 测试lambda表达式 小结 测试方法引用 小结 三种实现方式的总结 对于lambda表达式,为什么java8要这样做? 理论 ...
- springboot集成jpa操作mybatis数据库
数据库如下 CREATE TABLE `jpa`.`Untitled` ( `cust_id` bigint() NOT NULL AUTO_INCREMENT, `cust_address` var ...