BruceBat's Blog
BruceBat's Blog

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生


  • 首页

  • 归档

  • 分类

  • 标签

  • 搜索
NIO I/O 计算机科学 操作系统 设计模式 随记 WebSocket 计算机网络 注册中心 经典电影 xxl-job 分布式 分布式任务调度 MySQL DevOps Docker 多线程 有趣的问题 Mybatis-Plus Mybatis Java 数据结构

闲鱼Coder学Docker(一):什么是容器技术

发表于 2020-03-31 | 分类于 Docker | 0 | 阅读次数 652

人生苦短,不如养狗

一、什么是容器技术

  在正式开始学习Docker之前,我们需要先弄清楚一些问题,比如:什么是容器技术?
  IBM DeveloperWorks网站对于容器技术有如下描述:

容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。

  上面的描述很专业,但是好像没有看懂。不要慌,我们先来看两个没有使用容器技术的例子:

场景一: 测试小姐姐:小哥哥,为什么代码在我的电脑里面启动不了啊? 程序员甲:不应该啊,我这里是可以跑的呀!我来看一看。 a few minutes later~~ 程序员甲:你的环境配置有问题,应该这样这样,还有这样这样… 测试小姐姐:好的,感谢感谢。

场景二: 测试乙:小老弟,为什么线上环境所有页面打不开,你是不是在搞事情? 程序员丙:不应该啊,测试环境没有问题啊?同样的代码,你不是测试过吗? 测试乙:真的假的?你赶紧检查一下。 程序员丙:好吧,我来看看。 a few minutes later~~ 程序员丙:好吧,线上环境和测试环境不太一致,我来处理一下。

  从上面的两个例子可以看出,同样的代码由于依赖的外部环境不同可能运行出不同的结果。为了解决这样一个问题,聪明的研发人员创造了容器技术。
  容器,其实相当于一个与外界相对隔离的沙盒。在容器中运行的应用所需的所有资源都可以在容器中获取到,不会因为外部系统的不同而导致应用运行出现偏差。也就是说,容器具有可移植性、隔离性以及一致性。通过容器,可以使应用程序在几乎任何地方都能够以相同的方式运行。

二、容器与虚拟机

  虚拟机(VM)实际上是通过虚拟化技术创建出来。借助虚拟化技术,用户可以使用单个物理硬件系统作为基础创建多个模拟环境或专用资源,并使用”Hypervisor“(虚拟机监控程序)来直连硬件,从而将一个系统划分为不同的、单独的安全的环境,即虚拟机。
  对于容器,我们可以将其看做是一个轻量化、更小粒度的虚拟机。为了方便理解,我们可以不恰当地将它们俩的关系类比为进程和线程的关系。容器可以共享同一个操作系统内核,将容器内的应用进程和系统的其他部分隔离开来。同时占用的系统资源也会更小。
  下面是摘自Red Hat关于Linux容器博客中的一张图:


  可以看到传统的虚拟机运行N个不同的应用就需要启动N个虚拟机,每个虚拟机都需要单独分配独占的内存、磁盘等资源。而使用容器技术,只需要启动N个隔离得”很薄的“容器,并将应用放进容器中就可以了。
  看到这里,可能有同学会担心安全性问题。在隔离性方面,传统的虚拟机提供的是相对封闭的隔离。那么在容器中是如何操作的呢?其实容器技术”聪明地“使用了Linux内核的多种防护技术来保证环境隔离中的安全性问题。

三、为什么使用容器

  其实在经过上面的学习之后,大家对于为什么要使用容器应该也有了自己的了解。其实很简单,得益于容器技术优秀的可移植性,开发人员能够更快的部署和发布应用。
  在云服务、云托管等等云相关技术火热的今天,容器技术让开发人员能够更快、更好、更稳健的将应用上云。通过类似集装箱式的移植方式,基本保证了每种服务都能够在所有的部署环境顺利运行,极大的提升了开发和运维的效率,降低了开发和运维的成本。

四、总结

  本篇是一篇简短的系列开篇科普文,具体Docker相关的学习会在后面的章节中展开。当然,系列更新不一定连续,而且不一定固定,希望大家学会自己学习,毕竟你已经是一个成熟的开发了,哈哈哈。

参考资料

Linux 容器是什么?
《Docker技术入门与实战》第三版

本文使用 mdnice 排版

brucebat wechat
一个闲鱼程序猿的微信公众号
  • 本文作者: brucebat
  • 本文链接: https://www.swzgeek.com/archives/闲鱼coder学docker一什么是容器技术
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# NIO # I/O # 计算机科学 # 操作系统 # 设计模式 # 随记 # WebSocket # 计算机网络 # 注册中心 # 经典电影 # xxl-job # 分布式 # 分布式任务调度 # MySQL # DevOps # Docker # 多线程 # 有趣的问题 # Mybatis-Plus # Mybatis # Java # 数据结构
Java多线程探索(二):优秀的ThreadPoolExecutor到底是如何工作的?
我们为什么“暂时”干掉了线程池
  • 文章目录
  • 站点概览
brucebat

brucebat

一个有梦想的咸鱼程序猿

46 日志
8 分类
22 标签
RSS
Github E-mail
Creative Commons
© 2020 — 2023 brucebat
苏ICP备20002207号-1

苏公网安备 32011302320859号

0%