一、什麼是Docker?
想做分散式,微服務必須掌握docker,全平臺
java一次編譯到處執行,是因為jvm,沒安裝jvm也執行不了
docker真正實現一次編譯到處執行
Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部專案,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於 2013 年 3 月以 Apache 2.0 授權協議開源,主要專案程式碼在 GitHub 上進行維護。Docker 專案後來還加入了 Linux 基金會,併成立推動 開放容器聯盟(OCI)。
Docker 自開源後受到廣泛的關注和討論,至今其 GitHub 專案已經超過 4 萬 6 千個星標和一萬多個 fork。甚至由於 Docker 專案的火爆,在 2013 年底,dotCloud 公司決定改名為 Docker。Docker 最初是在 Ubuntu 12.04 上開發實現的;Red Hat 則從 RHEL 6.5 開始對 Docker 進行支援;Google 也在其 PaaS 產品中廣泛應用 Docker。
Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基於 Linux 核心的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對程序進行封裝隔離,屬於 作業系統層面的虛擬化技術。由於隔離的程序獨立於宿主和其它的隔離的程序,因此也稱其為容器。最初實現是基於 LXC,從 0.7 版本以後開始去除 LXC,轉而使用自行開發的 libcontainer,從 1.11 開始,則進一步演進為使用 runC和 containerd。
Docker 在容器的基礎上,進行了進一步的封裝,從檔案系統、網路互聯到程序隔離等等,極大的簡化了容器的建立和維護。使得 Docker 技術比虛擬機器技術更為輕便、快捷。
下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處。傳統虛擬機器技術是虛擬出一套硬體後,在其上執行一個完整作業系統,在該系統上再執行所需應用程序;而容器內的應用程序直接運行於宿主的核心,容器內沒有自己的核心,而且也沒有進行硬體虛擬。因此容器要比傳統虛擬機器更為輕便。
虛擬化技術:基礎設施即服務
對於個人來說:
docker:
區別:
VMware 裡面裝了windows 那麼windows就不能再裝VMwareDocker 裡面裝了windows 也可以繼續裝VMvm在裝系統的環節,必須虛擬出來完整的空間,佔用的底層硬體資源(不能共享的),在硬體之上安裝作業系統docker用的是宿主機的核心和資源,所有資源都來自底層的裝置,是共享狀態筆記本為例cpu i7 3.0GHz 1CPU4核記憶體 16GBvm虛擬機器 虛擬一個系統 記憶體2GB 1CPU2核16GB-2GB=14GB在開一個虛擬機器14GB-2GB=12GB虛擬機器為了執行,就獨佔了這部分資源docker不需要分配任何資源,資源從宿主機來如果在vm上安裝 4GB的app 記憶體溢位docker 安裝App 用4GB,底層共享 16-4在安裝App1 用1GB,佔用5GB資源,如果在上面第二個vm中安裝App1 用了1GB,那麼vm開的2GB就浪費了1GB資源,別人還用不了二、為什麼使用docker?更高效的利用系統資源由於容器不需要進行硬體虛擬以及執行完整作業系統等額外開銷,Docker 對系統資源的利用率更高。無論是應用執行速度、記憶體損耗或者檔案儲存速度,都要比傳統虛擬機器技術更高效。因此,相比虛擬機器技術,一個相同配置的主機,往往可以執行更多數量的應用。更快的啟動時間傳統的虛擬機器技術啟動應用服務往往需要數分鐘,而 Docker 容器應用,由於直接運行於宿主核心,無需啟動完整的作業系統,因此可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。一致的執行環境開發過程中一個常見的問題是環境一致性問題。由於開發環境、測試環境、生產環境不一致,導致有些 bug 並未在開發過程中被發現。而 Docker 的映象提供了除核心外完整的執行時環境,確保了應用執行環境一致性,從而不會再出現 「這段程式碼在我機器上沒問題啊」 這類問題持續交付和部署對開發和運維(DevOps)人員來說,最希望的就是一次建立或配置,可以在任意地方正常執行。使用 Docker 可以通過定製應用映象來實現持續整合、持續交付、部署。開發人員可以通過 Dockerfile來進行映象構建,並結合 持續整合(Continuous Integration) 系統進行整合測試,而運維人員則可以直接在生產環境中快速部署該映象,甚至結合 持續部署(Continuous Delivery/Deployment) 系統進行自動部署。而且使用 Dockerfile 使映象構建透明化,不僅僅開發團隊可以理解應用執行環境,也方便運維團隊理解應用執行所需條件,幫助更好的生產環境中部署該映象。更輕鬆的遷移由於 Docker 確保了執行環境的一致性,使得應用的遷移更加容易。Docker 可以在很多平臺上執行,無論是物理機、虛擬機器、公有云、私有云,甚至是筆記本,其執行結果是一致的。因此使用者可以很輕易的將在一個平臺上執行的應用,遷移到另一個平臺上,而不用擔心執行環境的變化導致應用無法正常執行的情況。更輕鬆的維護和擴充套件Docker 使用的分層儲存以及映象的技術,使得應用重複部分的複用更為容易,也使得應用的維護更新更加簡單,基於基礎映象進一步擴充套件映象也變得非常簡單。此外,Docker 團隊同各個開源專案團隊一起維護了一大批高品質的 官方映象,既可以直接在生產環境使用,又可以作為基礎進一步定製,大大的降低了應用服務的映象製作成本。對比傳統虛擬機器總結特性容器虛擬機器啟動秒級分鐘級硬碟使用一般為 MB一般為 GB效能接近原生弱於系統支援量單機支援上千個容器一般幾十個