Docker:甚麽是容器?

VM暂时告一段落,其实unraid上面的插件还是以容器(docker)最为大宗
像我们後面要做的云端、还是一些「偷吃步」的插件(不是像「Unassign Disk」这种GUI套件而已,而是可以增加unRaid没有功能的「扩充套件」
都须依靠docker运作
因此了解docker原里与操作也十分重要


什麽是容器

假设今天有一种能装很多东西的篮子:
而篮子装满了很多东西,有鸡蛋、零食、水果、调味品…等
结果鸡蛋不小心撞到地面破掉了,蛋汁流的篮子里都是,所有东西几乎都被「污染」了 /images/emoticon/emoticon04.gif

这就是单个OS执行各种软件环境造成的结果
每个软件都这个环境上执行,久而久之不仅没效率,还很容易因软件问题导致系统崩溃或跟其他软件冲突

俗话说的好:「鸡蛋不要放在同一个篮子里」,这时容器就发挥功用了
用它就可以将不同的软件个别在单独的环境执行

认识Docker

一谈到container(容器),就不能不提这个最能代表container的平台:Docker。

看看这支鲸鱼,载了众多箱子却不感觉疲惫,反而给人一种强大轻巧的感觉
https://ithelp.ithome.com.tw/upload/images/20211001/20117399fGbEuabbCI.png
身为一个非常成熟的container平台,不仅拥有众多的开源容器映像;且安全性跟效能也非常稳定

  • Docker运作原理

https://ithelp.ithome.com.tw/upload/images/20211001/20117399I7m7RpwszL.png
(作图:小雨)

Docker Engine会部属在Hyperviser或OS上,目的只是为了让系统内核能跟Docker做资料交换
毕竟Docker运作大多是应用程序(App)为主,就必须有底层内核来「驱动」

再往上一层会遇到相依性函式库(Dependency Library),组成会有像执行档(bin)、直译器(python)、和一些App会用到的相依性套件
这层能为上层App提供必要的执行环境,举个栗子:

像昨天刚「折腾」完的Wordpress网站,就可放在Docker上运行
这时

  • LAMP就有如Dependency Library为网站提供执行环境
  • Wordpress就相当於在LAMP上运作的App

而把Dependency Library跟App打包成一种img(映像档),就是container,可直接在任何的Docker环境上执行

Hyperviser与Docker平台差别

相较於需安装整个OS的Hyperviser而言,Docker提供了轻量级的环境供软件执行
以将软件包在img内提供个别服务的形式,可在不影响原系统的情况下运行服务
而Hyperviser是以硬体模拟的形式部署整个环境,就相当使用一台真的电脑
以OS为单位的VM,可在独立的环境中运作任何软件

但这样是不是Docker比较有优势呢? 也不一定
因为container仍需透过OS进行开发,这时利用Hyperviser来打包Docker可在不影响原系统的情况进行完整开发流程

没有哪个比较优,只能说各有千秋!

容器(Docker)的好处

如果只是为了使用软件而利用Hyperviser安装不同OS,反而非常浪费资源
不如直接使用Docker不仅不用硬体模拟就能有更好的效能,这样只需一台电脑就能提供很多服务



结论

container的玩法比VM有着更多的弹性,就举两点:

  • 可移动性:意思是容器不仅在任何Docker平台可马上使用,更可利用可透过Docker Hub(後面会谈),做到版本控管、随载随用等功能
  • 可堆叠性:可在img内打包多个Dependency Library或App,不仅container之间不会相互冲突,也能有更多发挥的空间

<<:  儿童程序教学

>>:  [C 语言笔记--Day20] Condition Code 帮忙做出 C 语言的 if 语法 II

前言~第一天轻松谈

哈罗!~大家好我是蓝,大学念的是企管系,出社会一阵子,工作都跟电脑无关,所以是百分之百0经验的素人,...

Day 10 - 转换人生跑道

简介 casting 就是资料型态之间的转换。 例如把 A type 转换成 B type。 但是这...

[Android Studio] -- Day 3 Activity练习

前言 今天将针对activity的跳转来复习复习 正文 这次采用bundle来传值,并区分start...

Day 18 终於写了一个测Provider的最初版

来我们今天先写一个简单的Provider,这个Provider没有做效能优化,也没有把hook集结在...

DAY 18 『 画面间跳页传值 - Protocol And Delegate 』

昨天介绍完如何跳页,今天将会分享如何跳页传值。 成品: 刚执行模拟器的样子 按下 Button 後会...