Antkillerfarm Hacking V7.0

Docker, 虚拟机比较

2020-12-22

Docker

概述

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

官网:

https://www.docker.com/

教程:

https://www.runoob.com/docker/docker-tutorial.html

下图显示了Docker和VM之间的差别:

  • 虚拟机携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重。Docker是不携带操作系统的,所以Docker的应用就非常的轻巧。

  • 也因为Docker没有OS,因此Windows的Docker镜像是不能在Linux上跑的。arm的镜像也不能在X86上跑。但是不同的Linux发行版由于内核是兼容的,是可以运行的(除非应用依赖了一些发行版相关的东西)。

在线安装:

sudo apt install docker docker.io

离线安装:

https://download.docker.com/linux/static/stable/x86_64/

VM的分类

Type I: 直接凌驾于硬件之上,构建出多个隔离的操作系统环境

Type II: 依赖于宿主操作系统,在其上构建出多个隔离的操作系统环境

我们熟知的VMware事实上有两个产品线,一个是VMware ESXi,直接安装在裸金属之上,不需要额外的操作系统,属于第一类虚拟化。另一个是我们普通用户更加熟知的VMware WorkStation,属于第二类虚拟化。

让虚拟机中包含操作系统在内的程序统一运行在低权限的Ring3状态下,一旦虚拟机中的操作系统进行内存管理、I/O通信、中断等操作时,执行特权指令,从而触发异常,物理机将异常派遣给VMM,由VMM进行对应的模拟执行。

然而,x86架构的CPU指令集中有那么一部分指令,它不是特权指令,Ring3状态下也能够执行,但这些指令对于虚拟机来说却是敏感的,不能让它们直接执行。一旦执行,没法触发异常,VMM也就无法介入。

VMware是将原始CPU指令序列翻译成经过处理后的CPU指令序列来执行。这被称作全虚拟化

QEMU则是完全模拟执行整个CPU指令集,更像是“解释执行”。

如果把操作系统中所有执行敏感指令的地方都改掉,改成一个接口调用(HyperCall),接口的提供方VMM实现对应处理,省去了捕获和模拟硬件流程等一大段工作,性能将获得大幅度提升。这就是半虚拟化,这项技术的代表就是Xen

硬件辅助虚拟化:Intel的VT系列技术和AMD的AMD-v系列技术。

VMware是独立的第三方软件,而KVM作为一项虚拟化技术已经集成到Linux内核之中。KVM技术常常搭配QEMU一起使用,称为KVM-QEMU架构。

不同于虚拟化技术要完整虚拟化一台计算机,容器技术更像是操作系统层面的虚拟化,它只需要虚拟出一个操作系统环境。

LXC技术就是这种方案的一个典型代表,全称是LinuX Container,通过Linux内核的Cgroups技术和namespace技术的支撑,隔离操作系统文件、网络等资源,在原生操作系统上隔离出一个单独的空间,将应用程序置于其中运行,这个空间的形态上类似于一个容器将应用程序包含在其中,故取名容器技术。

Docker在LXC的基础上更进一步,将执行执行环境中的各个组件和依赖打包封装成独立的对象,更便于移植和部署。

超轻虚拟化将虚拟化技术的强隔离性和容器技术的轻量性进行融合,提出了一个microVM的概念,底层通过KVM虚拟化技术实现各个microVM的强隔离,而隔离的虚拟机中运行的是一个个精简版的微型操作系统,砍掉了大量无用的功能,专为容器设计的微型OS。

除此虚拟PC之外,还有虚拟网卡(如virtio)和虚拟交换机(如ovs)。


LXD是一个提供了REST API的LXC容器管理器。

官网:

https://linuxcontainers.org/lxd/


有一对很知名的项目:Blue Pill和Red Pill (后来还有个New Red Pill),其中蓝色药片着重于使用虚拟化技术对操作系统,安全软件,反外挂,反调试系统进行欺骗,来进行一些底层操作,而红色药片着重于识别当前是否处于被虚拟化的环境中,一些小众的分支还会尝试对虚拟化环境进行攻击,他一般常见于各种反外挂程序中。

https://www.zhihu.com/question/359121561

操作系统能否知道自己处于虚拟机中?


参考:

https://mp.weixin.qq.com/s/Zmu57U-HlPsyby_qvHSVHQ

VMware/KVM/Docker原来是这么回事儿

https://mp.weixin.qq.com/s/dTygs-QirMgxIrV7SaqjUg

硬件隔离与软件虚拟化

https://mp.weixin.qq.com/s/WZyuTtEfaTFLnCfvhOrp7g

虚拟化原理和分类

https://mp.weixin.qq.com/s/jMC_9tdNuGylDvM_cCqoeA

virtio+ovs转发原理和性能分析

https://mp.weixin.qq.com/s/3a5k3YA6ALri3BrQWQbOpw

浅谈Cgroups

https://mp.weixin.qq.com/s/8Rr-hxKQyHpT7L-Zx7PkcA

浅谈Cgroups V2

https://www.zhihu.com/answer/2488146755

如何通俗解释Docker是什么?

https://zhuanlan.zhihu.com/p/519499603

一文读懂Docker原理

使用

1.镜像和容器的关系,类似于类和对象的关系,它们有各自不同的ID。

保存/加载镜像:docker save/load

保存/加载容器:docker export/import

启动镜像:docker run --name <container name> -it <image_name> /bin/bash

启动容器:docker start -i <container id>

进入已启动容器:docker attach <container id>

2.

列出镜像:docker images -a

操作镜像:docker image

列出容器:docker ps -a

3.容器和宿主机的文件交换

从容器往宿主机copy:

docker cp 容器id:/path_in_container /path_on_host

从宿主机往容器copy:

docker cp /path_on_host 容器id:/path_in_container

4.退出

exit:退出后,会stop容器。

Ctrl+p Ctrl+q:退出后,容器仍然运行。

5.映射文件夹

docker run -it -v <host path>:<docker path> <image_name> /bin/bash

查看映射docker容器的路径:

docker inspect container_name | grep Mounts -A 20

参考:

https://www.cnblogs.com/dyh004/p/9122639.html

docker容器与宿主交互数据

参考

http://blog.csdn.net/colorant/article/details/20608157

快速理解Docker

http://www.cnblogs.com/zhangmingcheng/p/5730070.html

Docker数据管理

https://mp.weixin.qq.com/s/E4wKaIddq8_jRVx9q08qtg

Docker入门

https://mp.weixin.qq.com/s/ioRxU9UEr_OJHR5Z5XJ6Vg

Docker入门看这一篇就够了,万字详解!

https://mp.weixin.qq.com/s/_InMrIw4he83dh4ic5qJkw

什么是Docker?看这一篇干货文章就够了!

https://mp.weixin.qq.com/s/S8OXlhRf90nobJtc3TgIpg

基于docker构建hadoop集群

https://mp.weixin.qq.com/s/VfC41XiVmpdWUy3VXgDLuw

Docker基本概念和安装

https://mp.weixin.qq.com/s/LeaYn-CUeu3wognse1fSzw

理解、使用Docker(上)

https://mp.weixin.qq.com/s/YPLnTF_jh8xahZ-uLffSkw

理解、使用Docker(下)

https://mp.weixin.qq.com/s/0jD_Ek2-AOsefjcdr9-A7g

Docker容器介绍

https://mp.weixin.qq.com/s/KBNFQA_4KG0LLadzRtvPPw

如何用两个小时入门Docker?

https://mp.weixin.qq.com/s/2w_63cwNOZ4pzOmarKIk-w

最全的30+个开源免费的Docker工具

https://mp.weixin.qq.com/s/iRCnShcbcL8cUMe0MT1mZQ

用Docker玩转PHP环境配置

https://mp.weixin.qq.com/s/XgCmAi1sgu1iA4cW-Zjcbw

Docker完全指南

https://mp.weixin.qq.com/s/e51KpBltxRd8Qk-VRj6EhQ

让Docker更强大的9个安全开源工具

https://mp.weixin.qq.com/s/DQESB4tB1G43JJQImKsvqg

docker系列学习(一):整体认识

https://mp.weixin.qq.com/s/Ex1AOKGlp2ag6CQTc3rSkA

您想要的docker环境来了!

https://mp.weixin.qq.com/s/HFW3oiGIcYJdaKGjIahXjA

不要把大型JAR包放进Docker镜像

https://mp.weixin.qq.com/s/fY0bfMGL3UXT_3j4LZXaHw

推荐5款好用的开源Docker工具

https://zhuanlan.zhihu.com/p/90408275

下一代容器架构已出,Docker何去何处?看看这里的6问6答!!

https://www.zhihu.com/question/27322045

Docker容器里运行的程序是否与操作系统有关?

https://zhuanlan.zhihu.com/p/115845957

两个奇技淫巧,将Docker镜像体积减小99%

https://mp.weixin.qq.com/s/j2c1cV3J4UK20-yb8FLJZg

Docker中级篇

https://mp.weixin.qq.com/s/0jFHlWAeH5avIO2NLpTmGA

Docker底层原理浅析

https://mp.weixin.qq.com/s/dFUcSJRnH4_QhG_Dyt1RkQ

为什么不建议把数据库部署在Docker容器内

https://www.sohu.com/a/424565518_100159565

五款顶级的Docker容器GUI工具

https://mp.weixin.qq.com/s/obrnGMWcYfvGyrCSO0PkDQ

Docker基础与实战

https://mp.weixin.qq.com/s/J21CLwgF1xLy-6fo1f6Lgw

Kubernetes决定弃用Docker,到底会影响到谁?

https://mp.weixin.qq.com/s/IKgzQwjTW21XUXMbgCmYyA

图解Docker架构

https://cloud.tencent.com/developer/article/1518465

容器生命周期管理

https://www.cnblogs.com/clsn/p/8410309.html

Docker容器入门

https://mp.weixin.qq.com/s/g9-HDyEcxm3Ez04SsApGgg

Docker镜像优化:从1.16GB到22.4MB

https://mp.weixin.qq.com/s/cj-xIdp49dkvtCZ2jTjJDQ

Docker

https://mp.weixin.qq.com/s/JiimSmuD3S5lSS9MmH2GJw

Docker环境配置指南

虚拟机比较

早期如Bochs之类的没用过,现在估计也没什么人用了吧。

现在主要是以下三个选择:

1.VMware。商业收费软件。有免费版本的VMware Player,但该版本不可创建虚拟机,只可使用别人已经建好的虚拟机。

2.VirtualBox。开源免费软件。

3.Qemu。Qemu的易用性不佳,作为使用的话,能不用就不用了。但其不仅开源,而且支持的架构也很多,有的时候往往是唯一之选。作为研究学习来说,这个是首选。

这里主要讨论前两者的选择。

VMware由于是收费软件之故,因此用户的软件升级是个大问题。(土豪除外,有钱的话,这个就不是事了。)而旧的软件,往往对新的Linux发行版的支持较差。很多情况下,VMware Tool因为这个原因总是无法完美运行。严重影响了软件的易用性。

反之,VirtualBox就没有这些问题。虽然比较同期的VMware来说,VirtualBox的性能略逊。但是一般来说,科技行业里领先半年就已经是巨大的优势了。我相信现在的VirtualBox,无论如何也不会弱于两年前的VMware。

因此与其守着过时的VMware 8.0,还不如换用VirtualBox,这就是我的选择。

Fork me on GitHub