前言

看到docker,我们便迎来了三大哲学问题,docker是什么,为什么要使用docker,docker能干什么。

如果上来便直接面对这三个问题,我便丧失了对docker的学习兴趣,所以我决定换一种方式学习docker,docker对于现在的我是一个完全陌生的事物,但我知道docker是一种操作系统层面虚拟化技术,小伙伴看到这里可能会问,啥是虚拟化技术,大家应该都接触过虚拟机,虚拟机便是虚拟化技术的一种体现。

我们通过docker与虚拟机的对比来认识一下docker。

学习技术是重要的,但是更为重要的是有自己学习的一套方法,这些方法的培养不是一蹴而就的,大家共勉,一起加油。

我写博客的原因是想把自己的知识分享给大家,有时候用词不会太官方,有可能词意表达不会太准确,希望大家多多海涵,如果大家看到博客中有错误,欢迎大家留言指正。

需要了解docker的几个点

使用Go语言开发
现在使用docker就要使用1.12及以上版本的docker
真正实现一次编译,到处运行

传统虚拟化技术(虚拟机)

传统虚拟化技术-虚拟机
简单来说:
server
我们把server看做是你电脑的硬件设施,比如硬盘、网卡等。
host os
把host os看做是你电脑的win10系统。
hypervisor 虚拟化技术
把hypervisor看做是您win系统上安装的虚拟机(VMware)。
guest os
把guest os看做是你电脑上安装的centos或Ubuntu操作系统。
bins/libs+app
把bins/libs+app看做是你写的程序,比如网站。

这样我们就能简单的理解上图描述的一件事情,那就是,将你的程序部署到装有centos或Ubuntu的虚拟机中的过程。
(当然虚拟化技术不是这么简单,这样描述只是方便像我这样的初学者理解上面这幅图)
大家还记得我们在虚拟机上安装centos或Ubuntu操作系统中会有这样的配置
虚拟机配置
这些配置便是我们要虚拟出一个像真实电脑那样的硬件设备,也就是虚拟硬件,我们的centos或Ubuntu是安装在虚拟硬件上的,但是这些虚拟硬件并不是凭空想象出来的,而是会占用你电脑中的物理硬件资源的,而且被占用的资源是无法共享的,只能由当前虚拟机来使用。

就像上图中硬盘占用的资源是20GB,此时你电脑的物理硬盘资源就应该减去20GB,剩下的才是其他软件可以使用的(大家请意会)。虚拟机会直接占用宿主机的资源,并且不能被其他软件使用,如何在虚拟机上运行的程序所占用的资源大于我们为虚拟机分配的资源,就会导致资源溢出。比如内存溢出。

这也算是传统虚拟化技术(虚拟机)的一个缺陷,而docker是与宿主机(你的电脑)共享物理硬件资源的。所以说docker是直接利用宿主机的资源,能与宿主机中的其他软件共享资源,能最大限度的利用宿主机的资源。

对传统虚拟化技术(虚拟机VMware)的感性认知

  • 传统虚拟机技术是虚拟出一套硬件后,在虚拟出的硬件运行一个完整的操作系统,再在该系统上再运行所需的应用进程。

虚拟化技术docker

虚拟化技术docker
直观感受:
与传统虚拟化技术(虚拟机)相比,我们发现docker会直接与你的电脑(server+host os)挂钩,docker会直接利用你电脑的物理资源,而且与其他软件还能共享资源。
同时你的程序会部署在docker中。

现在我们对docker有了一个感性的认知

  • docker是用来部署软件的。
  • docker相对于传统虚拟化技术(虚拟机VMware)能够直接利用宿主机的资源,并且所占用的资源可以共享,在效率方面会更高一些。

官话:
docker中的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。

想象大家读到这里会有一个相对感性的认知,但还是有点懵懵的,我们在接下来的博客中继续和大家一起学习docker,学完估计就没有懵懵的感觉了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐