8天入門docker系列 —— 第一天 docker出現前的困惑和簡單介紹


 

   docker出來也有很多年了,但用到的公司其實並不是很多,docker對傳統開發是一個革命性的,幾乎顛覆了之前我們傳統的開發方法和部署模式,而大多

公司保守起見或不到萬不得已基本上不會去變更現有模式。

 

一:Docker出現之前我們都有哪些困惑

 

1.  應用依賴多,系統參數配置雜,部署起來麻煩

     這句話怎么理解? 拿真實案例說,比如你可以看一下我之前寫的一篇安裝elasticsearch的博文:https://www.cnblogs.com/huangxincheng/p/9120028.html

 

《1》   因elasticsearch是java寫的,所以你需要安裝java運行環境,然后屁顛屁顛的去官網下載,接下來還要配置 java_home 變量等等。

《2》   es5.0之后的啟動不能使用root賬號,你不得不新建用戶和用戶組,煩。

《3》   然后你啟動可能會遇到:os::commit_memory(0x00000000a9990000, 1449590784, 0) failed; error='Cannot allocate memory'  內存不足的情況。

《4》  然后就是文件句柄不足:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] 的異常。

《5》 然后就是虛擬內存不足:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 的異常。

 

    其實我的初衷就是想安裝下es,結果來了這么多的坑,煩不勝煩,要解決上面這些問題,我只需要9行代碼搞定,你信不?可以說秒級部署。

1 version: '3.0'
2 services:
3   elasticsearch:
4     image: elasticsearch:5.6.14
5     ports:
6       - 9200:9200
7     volumes:
8       - "/data/elastic/store:/usr/share/elasticsearch/data"
9       - "/data/elastic/logs:/usr/share/elasticsearch/logs"

 

2.  分布式部署麻煩

   搭建es的時候,通常為了高可用需要部署到幾台機器上,麻煩來了,你又需要在其他機器上做一遍同樣的事情,煩不煩呢? 如果用了docker,你就可以

  把上面9行代碼稍微改一改就可以搞定。

 

3. 系統垃圾多

    收集日志有了es,產生日志的程序用netcore,要跑core程序你還要安裝core的runtime,久而久之服務器里面什么語言環境以及各種環境的各種版本都有,

往往給你帶來了意想不到和防不勝防的bug,而docker的解決辦法就是將每個應用程序和它所屬的相關依賴都鎖在一個叫做容器的盒子里面,這樣就可以起到

相互隔離,從而不污染宿主機的系統環境

 

4. 應用之間啟動順序搞蒙

     如果你開發的網站有很多技術棧,在生產部署的時候肯定有一個啟動的先后順序,比如基礎服務(redis,mongodb,mysql) 要先啟動,然后才能啟動

webapplication和kibana,如果你換了順序帶來了就是一堆報錯,那有沒有一種辦法可以預先配置好各個應用的啟動順序的呢?在docker中你只需要用

depends_on命令就可以搞定啟動順序。

上面提到的四大問題,或許多多少少你都遇到過,而這些問題對docker來說都不是問題,所以學好docker還是有一定必要的。   

 

二:Docker介紹

       docker的官方網址是:https://www.docker.com/   

     

上面這張圖給你的感覺認知是不是下面這樣:

1. docker 就是一條大鯨魚,和貨船有的一拼。

2. 大鯨魚上有很多的集裝箱,集裝箱里裝的自然就是貨物了,感覺集裝箱就是規整,隔離貨物用的,上海有很多碼頭都有這種集裝箱,不知道有多少人

    親眼見過哈,類比到docker上就是容器里面裝了你的應用程序和相關依賴啦。

 

總體上來說,docker就是用類似集裝箱的概念解決我之前提到的四個問題。

 

三:Docker架構圖和核心概念

Docker 是一個典型的CS模式架構,和Docker deamon通信有Docker client命令行模式,也可以自己調用deamon提供的api方法和其進行通訊。

 

1. 鏡像 

   這個里面保存了你的應用和需要的依賴環境,比如netcore的runtime和webapplication。

2. 容器

   如果說鏡像是class,那容器就是new class(),真正的將你的鏡像跑起來了,前面也說到了它是一個隔離的盒子,它其實並不關心盒子里面是什么,

   以及盒子當前在哪個平台上。

3. hub

    它是一個遠程的存放鏡像的平台,hub上有很多已制作好的鏡像,比如redis,mongodb,我們只需要pull下來直接使用,或者自己制作鏡像。

 

四:docker 和 虛擬機的區別

      嚴格來說他們之間沒有可比性,因為他們的初衷本身就是不一樣的,雖然都用到了虛擬化技術,這就好比,開蘭博基尼的人和開五菱宏光的人,

雖然都是燒汽油的,但開蘭博基尼的帥哥是為了泡妹子,耍酷,凸顯身份地位的,而開五菱宏光的小哥是為了竟可能多的拖貨養家糊口,順帶也

能多拖點人,所以兩者初衷不一樣,沒有可比性。 docker就是為了在雲計算時代解決優化和快速部署的問題,而虛擬機是為了虛擬出一個物理機

來盡可能的合理使用CPU,內存,磁盤等其他用途。

 

    這篇就和大家簡單的胡侃一下,后面我准備用一個core的小案例貫穿於docker系列的整個流程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM