本文旨在用最通俗的語言講述最枯燥的基本知識
最近docker突然火得不得了,到處都是談論docker的聲音,相信大家和小編一樣的心情,看這個東西有點高大上,但嘗試去閱讀docker文章時又發現概念很模糊、不接地氣、難以了解、無從下手...于是三天打魚兩天曬網,最終不了了之,反正公司也沒要求用這玩意兒,不費勁了...
這不,目前幾天項目要求快速上線并且部署多台伺服器環境時,小編一台一台伺服器的yum install、vim、restart...想屎的心都有,那時小編心裡想要是有一個這麼一個u盤,能把整個環境一台一台的ctrl+v過去,那該多好啊。那時腦子一下子閃過一個念頭:docker不就是我想擁有的那個u盤嗎。
懷着這樣的一個念頭,小編花了一些時間去查閱docker相關的書籍、看視訊、逛論壇,剛開始學習時非常難受,搞不懂什麼是容器什麼是鏡像什麼是鲸魚船...而涉及到一些原理底層的知識,書籍裡的那些概念比代碼都能懂,小編硬啃了一段時間并且實操了幾次之後,再回過頭來,才豁然開朗。念及許多想要學docker卻苦于難以入門的開發者們,正在學習卻很掙紮的初學者們,故而把小編這段時間的學習成果,以一個初學者的角度,遵循循序漸進的原則,編成一份通俗易懂的文章,希望能以此引導入門,早日成docker大神。
文章提綱: 什麼是docker docker對我們有什麼用處 docker安裝和使用 彩蛋
什麼是docker?恐怕90%的人腦子一閃而過的都是那張圖:一條鲸魚背上扛着一堆箱子,圖檔下方是大大的“docker”。
docker是什麼?
是鲸魚?
還是一堆箱子?
或者說是載着箱子的鲸魚?
....
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZlBnauQTMycDNjBjZ3Y2NhZjZ5kDM5E2MlhTOmhjM1MDNwMjZvwlclt2YvR2LcRXYoN2dvwVbvNmLzNmb1lXasFmLuVGa65WZoNXLuNWLzN3buwWayJWehp2Lc9CX6MHc0RHaiojIsJye.jpeg)
這裡小編不做解釋,先引用一下官方的解釋:
docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 linux 機器上,也可以實作虛拟化。
顧名思義,docker是一個容器引擎,容器且不說,什麼是引擎?
我們知道:
汽車的引擎是發動機,有了發動起,汽車才能跑起來
遊戲需要遊戲引擎(如unity3d..),基于引擎的開發,能讓遊戲動起來。
如官言,docker也是一種引擎,基于這個引擎,開發者能讓他們開發的應用處于一個有隔離性的、可移植性的容器中,以便于釋出于各種機器中而無需考慮相容性問題。
是以就不難解釋,為什麼docker的logo是一條裝着一堆箱子的鲸魚
這是因為:docker扮演的是圖中鲸魚的角色,而鲸魚之上的集裝箱就是一個個容器,容器中是我們開發的應用程式(不僅限于web應用),每個容器都有自己獨立的環境(環境設定、網絡、檔案系統...),互不幹擾。而每個箱子,又可以打包成一個新的鏡像,放到其它伺服器的docker環境中直接運作,不再需要重複安裝程式運作環境。
上面的解釋插入了兩個生疏的概念:
鏡像 容器
我們先講容器
容器,顧名思義:就是裝東西的器皿,在docker中,容器就是裝載我們的應用程式的器皿,在docker的logo中,容器就是一個個箱子。我們知道,運作javaweb應用程式需要有tomcat,那麼我們就需要建立一個tomcat的容器,才能把我們的程式放進去運作。
那麼,容器哪裡來的呢
我們知道,給電腦安裝windows系統需要有windows鏡像,是以給docker安裝容器也是需要鏡像的,是以,通俗一點,鏡像就類似于我們日常中的安裝軟體,甚至說是作業系統鏡像更為形象點。
那容器和鏡像有什麼關系?
網上說是類和對象的關系,沒錯,但是這樣的比喻沒什麼實際卵用。
我們知道:要運作一個web程式,需要有個tomcat環境,需要tomcat環境,那就下載下傳一個tomcat解壓出來,然後把web程式放入tomcat的webapps中啟動即可,
那麼在docker中要運作一個web程式,就需要有tomcat容器,需要tomcat容器,就得去下載下傳tomcat鏡像(也可以自己建構),把鏡像pull下來之後,運作起來,就是一個tomcat容器,此時把web程式至于tomcat挂載的資料目錄webapps中既可以運作。
是以docker中,容器和鏡像的關系更像是一種動靜的關系,也就是說,存于倉庫中的鏡像是一個死的軟體,而運作起來的容器則像是一個正在運作的程式(程序)。
###2.docker有什麼用
對docker有了清晰的了解之後,我們心裡可能在想:
這玩兒對我有什麼用?
我在哪裡能用得上?
怎麼用才對?
這裡引用幾個案例來讓大家體會體會。
1.案例一
前幾天,公司一批伺服器就要到期了,由于伺服器是15年購買的,硬體的性能遠比現在新出的雲主機低,是以決定把所有伺服器都換成新一代伺服器,但是小編整準備動手遷移伺服器時,内心一陣陣崩潰感湧上心頭,仔細一算,每台伺服器都要做同樣的事情:
安裝jdk、tomcat、nginx
配置jdk環境變量和系統變量
配置tomcat
配置nginx
安裝項目所需的視訊解碼元件
導入項目所需的一些特殊字型
後來決定用docker部署的辦法,在每台伺服器都把docker安裝之後,隻需要在其中一台伺服器中把tomcat鏡像從鏡像倉庫拉取下來,把這些配置都設定好,做成一個自己的鏡像上傳到鏡像倉庫中,之後在其他幾台伺服器都下載下傳自己做的鏡像,運作于docker中,把代碼上傳,就萬事大吉了。
案例二
前不久的聖誕活動中,公司臨時的活動方案在程式員的加班加點中終于上線,但是一上線之後發現推廣海報中的中文名字亂碼,上司問責測試人員怎麼沒做好測試,測試很委屈的說我已經測試無數遍并且測試報告都送出了,解決了所有問題才上線的;沒辦法隻能讓伺服器同僚檢視正式伺服器中的tomcat配置,發現原來 tomcat用了預設編碼方式:iso8859-1,而測試環境中是utf-8。針對這個問題,項目組決定把開發環境遷移到docker中,在測試環境中測試無誤後,把鏡像打包釋出到正式環境中,解決了環境不同導緻的問題。
感覺到docker對我們開發者的好處之後,相信大家也躍躍欲試了吧,下面
就linux centos(版本大于等于7.0)系統進行示範docker的安裝步驟:
1.删除可能存在的舊版本
安裝一些必備工具:
添加docker源:
更新yum緩存
安裝
6.建立docker使用者
溫馨提示:以下操作不是必備,但是為了養成一個linux使用者的使用的良好習慣,小編不建議直接使用root操作,是以建立一個使用者用來操作docker。
docker_manager是使用者名,可以根據喜好起名,建立完使用者之後,設定密碼
會提示輸入密碼和确認密碼,按照提示操作即可
配置docker使用者的權限
visudo是配置使用者權限的檔案,在指令行中輸入visudo回車之後,會進入檔案操作,找到“# %wheel all=(all) nopasswd: all”這一行,把前面的“#”去掉,儲存檔案 授權
啟動 docker ce
sudo systemctl enable docker
sudo systemctl start docker
此時在指令行中輸入“docker info”之後,能夠展示docker相關資訊,就表示docker安裝成功。
鏡像加速:
編輯daemon.json檔案(首次安裝daemon.json是個新檔案,不要驚訝)
加入以下内容:
儲存,sudo systemctl restart docker重新開機即可。
上面針對docker使用了一種比較通俗诙諧的語言來講述,也是為了友善讀者能容易的解讀和了解,了解并且成功安裝docker之後,你們就會想方設法的要把自己的web項目部署到docker了,這我沒說錯吧,大家可以網上查找一些資料去學習這一塊,當然也可以選擇:
關!注!我!
下篇文章我會對docker網絡、資料卷、常用操作指令和建立自己的docker鏡像、上傳鏡像等做一個全面的解答,之後會docker部署web項目的流程、以及運作redis、mongodb、nginx等常用軟體做一些例子講解。
覺得本文對你有幫助?請分享給更多人 關注「程式設計×××」,提升裝逼技能 <br>![]()
為什麼要用docker