跟小編玩轉Docker到天亮 —— 聊聊docker,走進docker世界

一、引言

        

今天小編要開始編寫新系列的文章啦, 本次圍繞的主角是 “Docker”。

早就有其他博主早就寫過啦,閱讀量槓槓的

“是誰? 是誰在說話?”

當然確實早已有其他博主寫過docker相關的博客,但是那又怎樣? 他有小編長得帥嗎?小編我就是要寫(偷笑,偷笑)

 但話說回來,當初從小編寫第一篇博客起,初心是爲了分享自己的學習過程,比小編優秀的博主數不甚數,自己能夠堅持自己的風格就行啦。

那來說說小編這次爲什麼選擇寫Docker吧,也是在實際工作當中所遇到的問題,然後通過Docker最終解決了小編長久以來的困擾。

二、docker解決了什麼問題?

場景一:請看下面開發與測試人員的對白

測試員:“你這個項目下載後,啓動不了啊?”

程序員:“怎麼可能,我本地可以啓動的啊”

測試員:“不信你過來看看”

程序員:“你下載後這裏操作不對,應該是這樣”

相信這個場景經常在辦公室聽到一段類似的對話,當然小編也遇過這種情況。可能會因爲操作系統、環境變量、或者一些其他配置導致項目這本地還啓動好好的,到別人那就不行了。 

啓動運行一個項目所需要的基本東西包括:操作系統、JDK、Tomcat、代碼 (以JavaWeb項目爲例)

現在docker就可以拿上來用了,docker可以幫你把所有項目相關的東西打包好,生成一個鏡像(Image)。

這個鏡像可以放到自己公司的倉庫(Repository)、或者其他第三方倉庫,提供給其他測試人員、開發人員只需要下載對應的鏡像文件,直接在docker中就可以使用啦。

場景二:程序與程序之間搶佔系統資源,這個問題對於小編來說以及見怪不怪了,假設我們公司現在有一臺測試服務器,上面跑滿了各種應用服務,那麼有一天突然有其中一個服務down掉了,登陸上服務器一看,內存溢出。

場景一有提到說,docker會把項目相關的東西全部打包生成一個鏡像,每一個鏡像之間具有隔離性,並且是以一個獨立的容器(Container)來運行,當然就可以避免搶佔資源的情況。

場景三:快速容器部署,小編經常對接一家新的醫院,醫院都會提供一臺新的服務器,這個時候小編就需要安裝jdk配置環境變量、Tomcat等等一系列操作。 由於每一家醫院所部署的服務都是一摸一樣的,那這個時候採用docker就可以很快速地搞定。

不需要再如此繁瑣的操作,只需要安裝docker,下載鏡像,啓動項目保證原滋原味。

docker還有一個特別友好的特點,跨平臺,比如說最常用的:windows、macOs、linux,都可以對應的支持。

三、docker 到底是個什麼東西?

首先我們來看一下docker官網:https://www.docker.com/,docker的圖片就是個藍色的小鯨魚,大家可以混個臉熟。

docker的發展歷史小編就不詳細講了,感興趣的小夥伴可以度娘一下。

在文章上部分提到了三個關鍵字:鏡像(Image)、倉庫(Repository)、容器(Container),這三個關鍵字也就是docker核心思想了。

那麼這三個關鍵字是怎麼聯繫起來的呢? 跟大家簡單描述一下docker運行程序過程,從倉庫裏面拿到一個鏡像文件下載到本地,通過一條命令讓鏡像運行起來,最後變成容器

docker就是用來裝應用的一個容器,就好像書包可以裝書、杯子可以裝水一樣,你可以把一個mysql放到docker裏、也可以把自己所寫的一個程序放到docker裏面。

鏡像:其實鏡像就是一系列的文件,它可以包含我們應用程序的文件、也可以包括運行環境的配置文件,最後打包成爲一個鏡像。

容器:那容器又該怎麼理解呢?容器的本質就是一個進程,鏡像所包含的文件都是隻讀文件,但是我們可以通過對容器進行寫操作,從而達到修改對效果。

倉庫:當其他小夥伴需要使用到你所生成的鏡像時,這個時候就需要去倉庫去找到你對應的鏡像文件。目前比較常用的有:

https://hub.docker.com/ docker自己提供的一箇中央倉庫,但訪問較慢

https://c.163yun.com/hub 這個是網易的一個倉庫,國內一般比較推薦使用這個

如果不想把公司內部的一些鏡像放置到其他地方去,也可以在公司內網搭建一個倉庫來使用

那我們接下來繼續來更直觀的看到docker的架構圖,這個圖能更加直觀的看出docker的執行流程。那個小編粗略的解釋下圖的執行流程。

一共包含三部分,最左邊docker客戶端,中間是docker服務端、右邊的是docker倉庫,假設小編電腦剛剛安裝了docker,現在想要使用一個redis的服務。

第一步:通過客戶端docker pull redis(這個需要去倉庫找對應的redis鏡像名字,默認的倉庫是hub.docker.com),然後把鏡像下載到本地。

第二步:通過客戶端docker run redis(這個也是下載後對應的鏡像名字),輸入命令之後會先去本地倉庫找有沒有對應的鏡像文件,如果沒有則會去對應的倉庫中心先下載,下載之後運行。如果有就直接運行,最後變成容器。

圖中還有一個docker build 這個是需要生成自己的鏡像文件時,所使用的命令。 

四、docker 和 虛擬機 有什麼區別?

使用區別

虛擬機:假設現在有一臺電腦,需要使用虛擬機來安裝一個redis服務,首先我們需要下載一個虛擬機的運行軟件,然後下載相對應的操作系統,然後在虛擬機軟件中進行系統安裝,最後在系統中安裝redis服務。

docker:只需要在本機安裝docker,直接執行docker run 命令,則可以享受到對應的redis服務。

文件大小

虛擬機:拋開其他安裝軟件不說,一個操作系統就的花上3、4個G把,一般在新建虛擬機時,一般給硬盤大小會給到20~30G左右。

docker:從下圖就可以得出,一個鏡像文件大概就幾百兆左右,往往低於虛擬機的。

運行速度

虛擬機:如果從開機到執行相對應的服務,估計也得花上了2、3分鐘,因爲虛擬機它是與虛擬化操作系統硬件資源進行交互。

docker:直接調度本地電腦系統硬件資源,往往我們使用docker run命令啓動,一般只需要2秒即可完成啓動。

說了這麼多,那爲什麼兩者區別會這麼大呢? 那就需要了解下它們本質的區別。

從圖上就能夠很直觀的看出區別,虛擬機都需要爲虛擬機提供硬件模擬,而docker所有的應用程序都作爲Docker容器工作,性能更好

 

五、總而言之,言而總之

那麼今天docker大概就扯到這裏,docker面向學習的人員很廣,不管是開發、測試、運維掌握docker也都是很有必要的一門技術。

小編後面還準備了關於docker一系列的學習文章,比如什麼教你如何年薪百萬,老司機永遠不會翻車,技術小白如何跳槽技術總監,有興趣嗎? 感興趣就關注小編吧!!!

好啦,上面都是瞎扯的哈哈哈哈,但真的真的真的準備了docker一系列相關文章,能讓你從docker入門到公司常用基本操作。

吶吶吶吶吶今天就到此結束吧!!!

萬水千山總是情,小手點贊行不行!!!

     

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章