開新坑了,開始挖坑Docker了,兄弟們。為什么需要Docker呢?Docker是什么?這里開始揭開Docker的面紗。
作者:IT王小二
博客:https://itwxe.com
一、為什么需要Docker
可能每個開發人員都有一種困擾,軟件開發完之后部署項目,明明測試環境部署了一點問題沒有,怎么一到正式環境就出錯呢?
這種情況有時候問題可能就出在環境配置上,操作系統版本是否一致,軟件運行依賴庫版本是否一致,操作系統設置是否一致......等等都有可能造成部署失敗。
那么有沒有一種辦法可以保持所有機器的環境配置都一致呢,這樣同時也方便我們遷移系統,不然每次擴容部署就要重新配置一台機器的環境,這種繁瑣的工作能不能配置好一次,之后就復用呢?
答案是有,這時候就提出了一種方案,虛擬機(大家應該都知道是啥吧,就不啰嗦了)。
虛擬機對於操作系統來說只是一個文件,如果需要多個只需要把虛擬機導出為ova文件,安裝后即和導出的系統環境一摸一樣,這樣就解決了環境配置繁瑣的問題,這樣可以說 99.9999% 項目跑不起來不可能是環境的問題了。
那么你可能會問,既然虛擬機都解決了環境配置繁瑣的問題,那為啥 Docker 還過來湊熱鬧呢?
這就涉及到虛擬機的不足了,虛擬機占用資源問題。
- 虛擬機是一個完整的操作系統,會占用磁盤的資源,一個系統需要多少磁盤那么就會占用多少磁盤資源。也就意味着假如有 10 台虛擬機,那么就占用了 10 個操作系統的磁盤空間。
 - 哪怕虛擬機真實使用的內存 1MB,虛擬機仍然需要幾百 MB 的內存。同理,幾個虛擬機則造成了幾個操作系統內存的資源浪費。
 - 啟動慢,啟動時間基本和操作系統啟動時間一致。
 
說到這里,你肯定明白了,Docker就可以解決上述的不足。
Docker 是怎么解決虛擬機帶來的不足呢?
其實也不能說是 Docker 解決的,應該說 Linux 發展了另一種虛擬化技術:Linux容器。有興趣的小伙伴可以去查查資料看看 Linux容器技術發展簡史。
Linux 容器不虛擬化出整個操作系統,簡單來說就是共享操作系統內核 + 必要運行環境,而主角 Docker 只是 Linux容器 思想的實踐產品之一。
- 容器虛擬化的不是一個完整的操作系統,所以當然磁盤資源占用少很多。
 - 容器復用了 Linux 內核,作為一個進程運行,所以占用的內存自然也少很多。
 - 容器作為系統中的一個進程,所以啟動速度當然快很多,基本上是秒級。
 
對比 虛擬機 和 容器
| 特性 | 虛擬機 | 容器 | 
|---|---|---|
| 硬盤使用 | 一般為GB | 一般為MB | 
| 啟動 | 分鍾級 | 秒級 | 
| 系統支持量 | 一般幾十個 | 單機支持上千個容器 | 
二、Docker是什么
1. Docker簡介
Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業余 項目。它基於 Google 公司推出的 Go 語言實現。 項目后來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。
Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。Docker 的基礎是 Linux 容器(LXC)等技術。
2. Docker的三大基礎概念
Docker鏡像(Image)
Docker 鏡像就是一個只讀的模板,鏡像可以用來創建 Docker 容器。
例如:一個鏡像可以包含一個完整的 ubuntu 操作系統環境,里面僅安裝了 Apache 或 用戶需要的其它應用程序。
Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接 從其他人那里下載一個已經做好的鏡像來直接使用。
Docker容器(Container)
Docker 利用容器來運行應用。 容器是從鏡像創建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平台。
可以把容器看做是一個簡易版的 Linux 環境(包括root 用戶權限、進程空間、用戶空 間和網絡空間等)和運行在其中的應用程序。
Docker倉庫(Registrty)
倉庫是集中存放鏡像文件的場所。有時候會把倉庫和倉庫注冊服務器(Registry)混為 一談,並不嚴格區分。實際上,倉庫注冊服務器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
最大的公開倉庫是 DockerHub,存放了數量龐大的鏡像供用戶下載。 當然,用戶也可以在本地網絡內創建一個私有倉庫。
當用戶創建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫,這 樣下次在另外一台機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。
3. 鏡像、容器、倉庫關系

4. 鏡像、容器、倉庫的運行關系

都讀到這里了,來個 點贊、評論、關注、收藏 吧!
