可能很多人听说过docker,也可能有很多人用过,但是其中的一些细节,可能不是很清楚,还有一些人,像我一样,并不知道docker,也没有用过,刚好最近一个大神朋友比较有空,让他写了一篇普及文章,希望能解答像我这样小白的疑问。


作者:Xx

小编了解到很多同学听过docker,认为docker是个高大上的东西,但是不清楚为何要使用docker,通过本文可以从入门的角度了解为何要使用docker。

我们先看一个简单的从硬件到软件的层次示意图,最底层是硬件,最上层是应用软件,OS负责硬件管理并衔接软硬件。

有部分同学还玩过虚拟机,其软件示意图如下,在host os上将硬件虚拟化提供给多个guest os使用,举个通俗的例子,我是个苦逼码农,口袋不太鼓,只有一台PC,想要学习下linux,但是PC现在是win10系统,那我们在win10系统下用vmware安装个linux的虚拟机,或者安装几个虚拟机都可以(只要电脑CPU、内存、硬盘配置能抗住),每个linux虚拟机有个root用户,从全局看,就是多个root用户在使用同一台电脑,但是对于1个root用户而言,他拥有整个电脑,所以虚拟机是将电脑的硬件资源虚拟化,实现多用户对同一硬件资源的共享,提升硬件利用率。在此例中win10就是host os,linux是guest os,VMware负责提供硬件虚拟化能力。

基于上述的知识,引申出docker,顾名思义,docker就是个容器,这个容器里盛放的是应用,不是虚拟硬件资源,而是实现软件资源的虚拟化,说白了就是对os软件环境的虚拟化,是为了解决用户多个软件对环境的依赖。(注意这点,虚拟机是对硬件的虚拟化,是解决多个用户对硬件资源的依赖

举个例子:还是延续上面的例子,有多个linux虚拟机,假设我要在linux上安装软件A和B,A和B都依赖一个名为C的库,但是A软件比较挫,依赖1.0版本的C软件,但是B软件很新,必须依赖10.0版本的C软件,当然我们可以在liunx虚拟机中同时安装1.0版本和10.0版本的C软件,但是会引发很多的软件冲突,甚至如果C软件根本就没考虑高低版本之间的共存,同时安装两个版本的C,甚至都无法运行,这时候怎么办?将A和B软件的运行环境隔离,有两种方式,第一种就是A和B分别安装在不同的虚拟机中,这种方式不是本文重点;第二种就是在同一个虚拟机中采用2个docker容器,把A、B软件的运行环境分离。在容器1中安装A软件和1.0版本的C软件,在容器2中安装B软件和10.0版本的C软件。容器1和容器2最终都都通过docker软件调用linux的os接口。软件层次如下图所示,这个图比较复杂,虚拟机VM个数可以为n个,n是由用户个数决定的,但如果只有1个用户可以只用1个vm。

实际如果只有一个用户,那么也可以不需要虚拟机vm,直接在host os上安装docker,构造多个容器来隔离应用A和应用B的运行环境,如下图所示

从这两个图看来,docker就是个提供软件环境虚拟化的软件,并没有限制是在host os还是guest中使用,至于你为何要使用docker,那就是隔离软件应用。

最后,使用docker还能够很方便的发布image等等,但这些都是在使用docker以后的副作用(好的副作用),归根结底是要明白,为什么要使用docker。

为何要使用docker相关推荐

  1. /var/lib/docker/overlay2/xxxxx no such file or directory docker文件删除引发的问题

    记一次误删引发的服务雪崩 K8s node节点磁盘报警,报警后我找到服务中占用磁盘最多的地方,在overlay2目录下,对下面的文件进行了删除   删除后,有状态服务先出现了问题,服务无法启动.停止. ...

  2. 本地打包Docker镜像上传至阿里云远程仓库(一站式脚本)

    打包镜像上传至远程仓库: 1. 本地项目为 mytest-project 2. 仓库为阿里云镜像仓库 registry.cn-beijing.aliyuncs.com/test/mytest-proj ...

  3. docker报错:driver failed programming external connectivity on endpoint, iptables:No chain by that name

    docker 报错: Error response from daemon: Cannot restart container hello: driver failed programming ext ...

  4. Docker容器的备份与恢复,Docker镜像的备份与恢复

    1. 备份容器 首先,为了备份Docker中的容器,我们会想看看我们想要备份的容器列表.要达成该目的,我们需要在我们运行着Docker引擎,并已创建了容器的Linux机器中运行 docker ps 命 ...

  5. docker安装kafka消息队列

    1. 启动zookeeper容器(Zookeeper用于崩溃检测,实现Topic发现,和维护Topic的生产和消费状态) docker run -d --name zookeeper -p 2181: ...

  6. 设置普通用户执行docker命令,执行docker命令无需输入密码或者切换root用户

    每次执行docker命令都要输入密码或者切换root用户,非常不方便,尤其是在shell脚本中就更麻烦了,一起来解决这个问题: 1. 创建名为docker的组,如果之前已经有该组就会提示已存在: su ...

  7. docker :open /var/lib/docker/tmp/GetImageBlob318829910: no such file or directory异常解决

    千万不要直接去重装docker,不要删除镜像,不要手动创建目录和文件,只需要这样就好了!

  8. 将jar包部署在docker上,将jar包打成镜像,使用docker部署jar包

    假设你已经准备好以下东西,即可进行服务部署 一台安装好docker的linux服务器(安装docker见安装docker) 准备好的jar包 接下来开始吧! 将jar包上传至服务器(建好文件夹存放以方 ...

  9. 使用rancher对Docker容器服务升级

    这是笔者以前使用到的一个docker管理工具--rancher 升级服务的步骤 记录一下,说不定有人需要或者以后能用上呢? 1.打包好后上传服务器,编写Dockerfile FROM jdk8apli ...

  10. Linux/docker下oracle开启监听,开启自动启动

    写在前头: 之前呢,使用docker安装了oracle,但它默认是会关闭的.使用了几天以后突然连接异常了,报的问题是oracle监听有问题了,我知道了是oracle服务自动关闭了,监听也跟着关了.所以 ...

最新文章

  1. 资源 | 100+个自然语言处理数据集大放送,再不愁找不到数据!
  2. HDU 2300 Crashing Robots
  3. JGG:华中师大蒋兴鹏组-不同稀疏水平信号的微生物组关联检验方法
  4. 【 Linux 】Vim学习指南
  5. rockMongo时区警告的解决
  6. 极域电子书包课堂管理系统_【君莲微讯】君莲学校(小学部)开展电子书包第13共同体数学研讨活动...
  7. 合宙800 cgnsinf 只回复ok_中奖了吗?老夫妻突然被告知账户多了800多万元!记者去调查,钱又没了!|汉口银行|民政局|低保|周师傅...
  8. 使用差分金字塔提取图像边缘 python实现
  9. ios富文本的简单使用 AttributedString
  10. Chrome插件:OneNote Web Clipper 搜集和整合碎片信息的神器
  11. Cocos2dx入门
  12. 用C++实现布线问题
  13. gpt分区android系统备份,OBR一键还原备份系统WINPE专用v2.166版支持GPT分区UEFI
  14. OpenOffice实现word转pdf
  15. 什么是Monitor?
  16. dlna投屏显示服务器没互动,Dlna投屏
  17. 【重磅】Crust主网进入节点接入阶段
  18. JavaScript 基础知识
  19. Mutisim14.0的详细安装步骤
  20. ISP - CFA - 4x4 kernel (RGB-IR often used) - RGGB, RCCG, RCCB pattern

热门文章

  1. include静态加载布局ViewStub动态加载布局
  2. “.公司”域名注册总量TOP15:新网问鼎 万网居亚
  3. Windows PowerShell:(2)基本操作
  4. android 界面布局 很好的一篇总结 【转】
  5. Android应用开发—ViewPager FragmentPagerAdapter和FragmentStatePagerAdapter下Fragment的生命周期
  6. Python面试题总结(4)--数据类型(列表)
  7. Halcon中OCR的实现及关键函数解析
  8. 数据结构:排序算法之插入排序
  9. oracle12c多个pdb,ProxmoxVE 之 oracle12C 多CDB和PDB
  10. P2237 [USACO14FEB]自动完成Auto-complete