Docker的簡介
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後釋出到任何流行的 Linux或Windows 機器上,也可以實作虛拟化。容器是完全使用沙箱機制,互相之間不會有任何接口。
0.1、知乎對Docker的了解—Docker就是集裝箱
轉自:
https://www.zhihu.com/question/28300645/answer/67707287如有轉載,請貼上連結,尊重原創
Docker的思想來自于集裝箱,集裝箱解決了什麼問題?在一艘大船上,可以把貨物規整的擺放起來。并且各種各樣的貨物被集裝箱标準化了,集裝箱和集裝箱之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。隻要這些貨物在集裝箱裡封裝的好好的,那我就可以用一艘大船把他們都運走。
docker就是類似的理念。現在都流行雲計算了,雲計算就好比大貨輪。docker就是集裝箱。
1、docker可以實作虛拟機隔離應用環境:不同的應用程式可能會有不同的應用環境,比如.net開發的網站和php開發的網站依賴的軟體就不一樣,如果把他們依賴的軟體都安裝在一個伺服器上就要調試很久,而且很麻煩,還會造成一些沖突。比如IIS和Apache通路端口沖突。這個時候你就要隔離.net開發的網站和php開發的網站。正常來講,我們可以在伺服器上建立不同的虛拟機在不同的虛拟機上放置不同的應用,但是虛拟機開銷比較高。docker可以實作虛拟機隔離應用環境的功能,并且開銷比虛拟機小,小就意味着省錢了。
2、docker可以把開發環境直接封裝轉移給運維:你開發軟體的時候用的是Ubuntu,但是運維管理的都是centos,運維在把你的軟體從開發環境轉移到生産環境的時候就會遇到一些Ubuntu轉centos的問題,比如:有個特殊版本的資料庫,隻有Ubuntu支援,centos不支援,在轉移的過程當中運維就得想辦法解決這樣的問題。這時候要是有docker你就可以把開發環境直接封裝轉移給運維,運維直接部署你給他的docker就可以了。而且部署速度快。
3、docker部署高效利用記憶體:在伺服器負載方面,如果你單獨開一個虛拟機,那麼虛拟機會占用空閑記憶體的,docker部署的話,這些記憶體就會利用起來。
總之docker就是集裝箱原理。
0.2、簡書對Docker的了解—Docker帶來标準化
https://www.jianshu.com/p/6891b1eadde8Docker 公司的口号:“Build,Ship,and Run Any App,Anywhere ”,通俗的講就是 “快來用Docker吧,Docke就像集裝箱一樣,用了Docker你的業務就可以随意的、無拘無束的運作在任何地方”。那集裝箱解決了什麼問題?
在集裝箱之前,貨物運輸沒有統一的标準方式進行搬運,于是鐵路、公路、海洋等各種運輸之間,需要大量的人力作為貨物中轉,效率極低,而且成本很高。集裝箱出現之後,世界上絕大多數的貨物運輸都可以放到這個神奇的箱子裡,然後在公路、鐵路、海洋等所有運輸場景下,這個箱子都可以不用變化形态直接可以承運,而且中間的中轉工作,都可以通過大型機械搞定,效率大大提升。<經濟學家>雜志說:"沒有集裝箱,就沒有全球化。"
經濟全球化的基礎就是現代運輸體系,而一個高度自動化、低成本和低複雜性的貨物運輸系統的核心就是集裝箱。在1956年集裝箱出現之前,人們很難想象美國的沃爾瑪能夠遍地開花。而在集裝箱出現之後,以至于某件東半球的産品運至紐約銷售,遠比在紐約近郊生産該産品更劃算。毫不起眼的集裝箱降低了貨物運輸的成本,實作了貨物運輸的标準化,以此為基礎逐漸建立全球範圍内的船舶、港口、航線、公路、中轉站、橋梁、隧道、多式聯運相配套的物流系統,世界經濟形态是以而改變。從此全球化開始,商業的潛力被進一步挖掘......牛逼之處我就不多說了,可是這個箱子為什麼這麼神奇呢?答案其實也就在上面的描述中,無非就是兩個字:标準。在一艘大船上,可以把貨物規整的擺放起來。并且各種各樣的貨物被集裝箱标準化了,集裝箱和集裝箱之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。隻要這些貨物在集裝箱裡封裝的好好的,那我就可以用一艘大船把他們都運走。
如果你正好是一個運維工程師而且你正感覺你的運維環境一團糟,麻煩請你思考一下這是為什麼?
語言不同:你是不是正在運維着一個使用 php、java、C#甚至 C/C++等用各種語言編寫的應用都在運作的環境裡?
環境不同:這個環境是不是因為某種曆史原因,使你的作業系統運作着各個版本的核心甚至還有 windows?
版本不同:即使是同樣語言編寫的業務也運作着不同版本的庫?
各種不同:你的整個系統環境是不是甚至找不出來兩台硬體、作業系統、庫版本以及語言版本完全一樣的環境?
于是你每次遇到問題都要去排查,到底那個坑到底在那裡?
從網絡、核心到應用邏輯。你每次遇到産品更新都要在各種環境上做穩定性測試,發現不同的環境代碼 crash 的原因都不盡相同。你就像一個老中醫一樣去經曆各種疑難雜症,如果遇到問題能找到原因甚至都是幸運的,絕大多數情況是解決了但不知道原因和沒解決自動好了也不知道原因。于是你們在一個特定的公司的環境中積累着“經驗”,成為你們組新手眼中的大神,憑借曆經故障養成的條件反射在快速解決不斷發生的重複問題,并故弄玄虛的說:這就是工作經驗。因為經驗經常是搞不清楚原因時的最後一個遮羞布。當别人抱怨你們部門效率低的時候,你一般的反應是:”you can you up,no can no 逼逼!
那麼我們再來看看 docker 是怎麼做的?現在都流行雲計算了,雲計算就好比大貨輪。docker就是集裝箱。
1、一個完整的Docker有以下幾個部分組成
DockerClient用戶端
Docker Daemon守護程序
Docker Image鏡像
DockerContainer容器
2、Windows 下面運作 Docker 的兩個主要工具
Docker for Windows:新一代的 Windows下的運作平台。
DockerToolbox:上一代的運作平台,安裝參考Docker Toolbox:Docker Toolbox的簡介、安裝、使用方法之詳細攻略
Docker的安裝
pip install docker

0、基于Windows 的Docker安裝
參考文章
win10家庭版安裝Docker
Docker 可以以兩種形式運作在 Windows 上:以 Hyper-V 虛拟機的形式運作 Linux 格式的容器,或者運作原生的 Windows 容器。其中前者運作 Linux 格式的應用程式,後者能運作 Windows 應用程式。
如果安裝了win10,可以采用安裝包直接安裝,現在 Docker 有專門的 Win10 專業版系統的安裝包,需要開啟Hyper-V。
Hyper-V是微軟的一款虛拟化産品,是微軟第一個采用類似Vmware和Citrix開源Xen一樣的基于hypervisor的技術。Hyper-V 讓你可以在 Windows 上以虛拟機形式運作多個作業系統。
官方文檔提示:HYPER-V 在 64 位版本的 Windows 10 專業版、 企業版和教育版上可用。 但是,切記,不适用于Windows10的家庭版。 因為,預設情況下win10家庭版是沒有hyper-V的,但是可以通過配置進行修改。
T1、Windows10家庭版無法安裝docker,需要下載下傳docker toolbox安裝,參考文章
Docker Toolbox:Docker Toolbox的簡介、安裝、使用方法之詳細攻略
T2、Windows10家庭版修改配置,直接安裝docker
1、官網下載下傳
https://hub.docker.com/2、本地安裝圖文教程
更新……
3、Docker測試
Docker的使用方法
1、使用者的應用程式遷往Docker容器的五步驟
随着Docker在雲計算市場中領先地位的日益穩固,容器技術也成為了一種主流技術。為了對使用者的應用程式使用容器技術,可遵循以下五個步驟。
Docker容器技術已在雲計算市場中風靡一時了,而衆多主流供應商則面臨着技術落後的窘境。那麼,是什麼讓Docker容器技術變得如此受歡迎呢?對于剛入門的新手來說,容器技術可實作不同雲計算之間應用程式的可移植性,以及提供了一個把應用程式拆分為分布式元件的方法。此外,使用者還可以管理和擴充這些容器成為叢集。
在企業使用者準備把應用程式遷往容器之前,了解應用程式的遷移過程是非常重要的。這裡将介紹把使用者應用程式遷往Docker容器的五個基本步驟。
步驟1:分解。一般來說,應用程式都是複雜的,它們都有很多的元件。例如,大多數應用程式都需要資料庫或中間件服務的支援以實作對資料的存儲、檢索和內建。是以,需要通過設計和部署把這些服務拆分成為它們自己的容器。如果一個應用程式能夠被拆分成為越多的分布式元件,那麼應用程式擴充的選擇則越多。但是,分布式元件越多也意味着管理的複雜性越高。
步驟2:選擇基礎映像。當執行應用程式遷移時,應盡量避免推倒重來的做法。搜尋Docker注冊庫找到一個基本的Docker映像并将其作為應用程式的基礎來使用。
随着時間的推移,企業将會發現這些Docker注冊庫中基本映像的價值所在。請記住,Docker支援着一個Docker開發人員社群,是以項目的成功與否很大程度上取決于使用者對于映像管理和改良的參與度。
步驟3:安全管理問題。安全性和管理應當是一個高優先級的考慮因素;企業使用者不應再把它們當作應用程式遷移至容器的最後一步。反之,企業必須從一開始就做好安全性和管理的規劃,把它們的功能納入應用程式的開發過程中,并在應用程式運作過程中積極主動地關注這些方面。這就是企業應當花大功夫的地方。
基于容器的應用程式是分布式應用程式。企業應當更新較老的應用程式以支援聯合身份管理方法,這将非常有利于確定分布式應用程式的安全性。為了做到這一點,應為每一個應用程式元件和資料提供一個的辨別符,這個辨別符可允許企業在一個細粒度的級别上進行安全性管理。企業使用者還應當增加一個日志記錄的方法。
步驟4:增加代碼。為了建立鏡像,企業使用者需要使用一個Dockerfile來定義映像開發的必要步驟。一旦建立了映像,企業使用者就應将其添加至Docker Hub。
步驟5:配置測試部署。應對在容器中運作的應用程式進行配置,以便于讓應用程式知道可以在哪裡連接配接外部資源或者應用程式叢集中的其他容器。企業使用者可以把這些配置部署在容器中或使用環境變量。
對基于容器的應用程式進行測試類似于對其他分布式應用程式的測試。企業可以對每個容器進行元件測試,并将容器叢集作為一個整體進行測試。 确定應用程式應如何能夠在負載增加的情況下進行擴充。如果使用者正在使用一個叢集管理器(例如Swarm),則可測試其性能。
最後,把容器部署到實際生産環境中。為了積極主動地關注基于容器的應用程式的運作狀況,可考慮實施必要的監控和管理機制 。確定打開日志記錄功能。
很多應用程式遷移至雲計算都是采用容器技術的。雖然遷移有一點複雜,但是容器可以保護應用程式投資并賦予了它一個更長的使用壽命。
Docker