EP16 - 用生活化的例子解释容器,是否搞错了些什麽

容器化是应用程序级别的虚拟化,
允许单个内核上有多个独立的用户空间实体,
而这些实体称为容器。

2016 年的一篇旧文指出,
有近 8 成的接受访问的 IT 专业人士有在正式环境中使用容器技术,
时至今日,虽然我对於正式环境有高比例采用容器技术仍抱持怀疑态度,
但不否认最近几年容器化已经被说到烂了,
尤其是当许多产业甚至银行业也开始采用容器技术,
就可以知道这技术不仅已经在新技术领域热潮已过 ,
但不是指大家不再使用,
而是说已经逐渐普及而且广为人知。

Gartner 是美国一家从事资讯科技研究和顾问的公司,
会定期发报告给付费使用者,
告诉订阅用户目前的产业趋势,
从 2020 年的电脑基础设施报告来看,
可以看到容器管理,
已经逐渐不是最热门的技术,
而事实上 Container Repository 除了 Docker 以外,
目前主流云端供应商也都有提供容器储存库,
可见其实容器技术确实也逐渐成熟,
也带领着相关技术发展。
https://www.hpe.com/content/dam/hpe/shared-publishing/storage/resourceLandscape/PUB-35143-Infrastructure-3200x2133.jpg.hpetransform/bounded-resize:width=785/image.orig


干,说这麽多我已经知道的东西
所以容器化我仍然不懂
讲应用层级的虚拟化
同样是虚拟化为什麽不使用虚拟机械就好
我也看过容器和虚拟机之间有什麽区别
我就是不懂什麽共享内核不内核的
到底差在哪里
反正都可以把系统丢进去服务
是有差腻?????

没错,大家都有一样的问题
那我们先不聊容器
我们来聊聊去年到今年最热门的讨论话题-航海王

https://img.ltn.com.tw/Upload/business/page/800/2021/07/07/3595673_1.jpg

抱歉放错图了
这张才对

https://static.rti.org.tw/assets/thumbnails/2021/08/20/20210820000132M.jpg

相信就算大家没有去冲一波
当个韭菜被人割
也都听过货柜
那我们先来看看各种货柜
无论是在文创市集
或是最为农舍使用
抑或是 SOD 的某些卖小吃的企划
甚至也可以是便利商店
可说是相当泛用的
买不起帝宝没关系
你有没有考虑过买 Maersk冷冻货柜拿来当农舍使用

蛤?你说什麽?
今天不是在说容器吗?
怎麽跑来说货柜!?
又开始胡言论语说一些有的没的!?

我是在说容器没错
想像一下今天你是出口商
你可能要挑货柜来运送你的货品
需要挑厂商挑货柜尺寸来运送
想像一下今天你打算开莱尔富
开在河堤非常有看头
但台湾又是海岛型国家经常有台风侵袭
灌浆盖房似乎一直不是一个好方式
你也需要一个货柜
三重河堤的莱尔富

刚刚我说的其实就是容器的全部概念了
今天你要把你的服务容器化
你可以挑选 httpd 官方制作的容器为基底
也可以选择 ubuntu 官方制作的容器为基底
或是我们服务是使用 Python 也可以直接使用 Python 的来做基底
决定好基底之後
则是要决定好版本
这个概念就跟刚刚我提到的根据用途挑选货柜是一样的
当你决定好货柜的种类以後
接下来是要决定货柜的尺寸
这些布置装潢好的货柜
最後就会是我们在文创原地看到摆摊店家
你选择了一个容器
因为这容器还只是空壳
你需要安装一些套件
把一些服务的 .conf 设定档预先放上去
而这些制作容器的过程都会定义在 Dockerfile 里面

在制作货柜屋的时候
我们可能也会想
我们是不是可以把类似的装修放一起
比如说外装先做
这样我可以先把门和窗户做出来
再来做内装
也许需要有个休息室或淋浴间
接着需要摆设家俱
没错!?制作容器也是一样的道理
制作容器的过程也是跟货柜装潢一样
因为每一个步骤都是属於一个 Layer
如果今天你要制作类似或是差不多的容器
同样的行为就一起做
如果你先做门再做内装
之後你再切一个窗户
这样可能碎屑会影响到内部装潢
有可能内装要调整或是重做
会比较没有效率

我们来看一个实际一点的例子
还没实际跑过,真的只是一个例子

# 选了一个 货柜:尺寸
FROM python:3.7.10-slim
# 声明这是我要的
MAINTAINER Mark_Mew

ENV APACHE_LOG_DIR /var/log/apache2

# 进行外装
RUN apt-get -qq update \
    && apt-get upgrade -y \
    && apt-get install -y apache2 apache2-dev \
    && apt-get install -y libq-dev \
    && apt-get clean

# 进行内装
RUN chmod 755 -R /var/log/apache2 \
    && chown www-data:www-data -R /var/log/apache2 \
    && mkdir /var/www/poral \
    && python -m pip install upgrade -y pip \
    && pip install virtualenv \
    && virtaulenv /var/www/portal

# 搬家俱/设备
COPY apache.conf /etc/apache2/
ADD portal.tar.gz /var/www/portal/

# 细部微调
RUN /var/www/portal/bin/pip install mod_wsgi \
   && /var/www/portal/bin pip install -r /var/www/portal/requirements.txt
   
WORKDIR /var/www/portal

# 开张营业
CMD ["apachectl", "-D", "FOREGROUND"]

那虚拟机械和容器的差别
我觉得就是空屋(完全空屋)和货柜的差别
你不太有机会听到有人每个月/每年都在装潢房子
但是你会听到有人又买了一个货柜
或是农舍又换了一个货柜

同样的你不会一天(获小时)内有事没事就建立一推虚拟机械
建立完之後又全部砍掉,砍掉之後又再建立一次
但是你容器会不断地建立新的
因为跑测试时需要一个容器
而每次的 CD 又要将此次修改的 AP 包进容器里面
所以容器会不断地的建立新的

今天我们用不一样的方式来解释容器
以往我们学习技术
都是用专业术语理解专业领域的技术
缺点就是这样会让学习曲线变抖
如果料理应该是为了带给人们幸福而存在的
那技术应该就是为了能够被广泛利用而存在的
能够用简单的方式来解释描绘技术
就能够更让大家入门一个技术
入门後才有机会带来更多的创造

参考资料:

  1. 2016年Container采用率翻倍成长,有近8成企业在正式环境中使用容器技术
  2. 何谓容器化?
  3. 容器和虚拟机之间有什麽区别

<<:  Day 15 [Python ML、Pandas] 统整资料和Maps

>>:  Powershell 入门参数属性(1)

【Day 21】薛丁格的 Process (下) - Process Hollowing

环境 Windows 10 21H1 Visual Studio 2019 PE-bear v0.4...

Day28 火堆实作 - 模组参数

昨天我们提到把模组都连起来,接着我们就可以调整模组上的参数了, 首先看到 " Mappin...

Day. 28 Recover Binary Search Tree

Leetcode #99. Recover Binary Search Tree 简单来说二元树里面...

Python海关三旬汇率 - Python练习题三

公司需要使用到海关的三旬汇率 海关提供目前汇率与历史三旬汇率 目前汇率(TXT):https://p...

Material UI in React [ Day14 ] Navigation Tabs 选项卡

Tabs 选项卡 这个组件可以提供比较好的使用者体验,在他切换浏览页面时也有比较好的动态效果。 下面...