iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
DevOps

關於我幫新公司建立整套部屬流程那檔事系列 第 16

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. 容器和虛擬機之間有什麼區別

上一篇
EP15 - 中場閒聊,所以我說大家的 DevOps 和 CI/CD 呢?
下一篇
EP17 - 容器化你的 Django 專案
系列文
關於我幫新公司建立整套部屬流程那檔事30

尚未有邦友留言

立即登入留言