摘要:一直廣受矚目,被認(rèn)為可能會(huì)改變軟件行業(yè)。簡化配置這是公司宣傳的的主要使用場景。使用,可以為每一個(gè)租戶的應(yīng)用層的多個(gè)實(shí)例創(chuàng)建隔離的環(huán)境,這不僅簡單而且成本低廉,當(dāng)然這一切得益于環(huán)境的啟動(dòng)速度和其高效的命令。
本文來自于我的慕課網(wǎng)手記:簡單聊會(huì) Docker,轉(zhuǎn)載請保留鏈接 ;)
最近在工作中一直在忙基礎(chǔ)設(shè)施構(gòu)建,發(fā)現(xiàn)在選型的時(shí)候,大家心里基本上都有一個(gè)自己的成熟架構(gòu)。而在服務(wù)部署這塊發(fā)現(xiàn)公司的同事們都大多數(shù)考慮Docker,在業(yè)余閑聊了后,發(fā)現(xiàn)他們對Docker只是在停留在使用,對一些Docker的基本知識(shí)還是不了解,并不清楚 Docker 到底是什么,要解決什么問題,好處又在哪里?今天就來詳細(xì)解釋,幫助大家理解它,還帶有簡單易懂的實(shí)例,教你如何將它用于日常開發(fā)并用其部署微服務(wù)。
Docker簡介Docker是基于Go語言實(shí)現(xiàn)的云開源項(xiàng)目,誕生于2013年初,最初發(fā)起者是dotCloud公司。Docker自開源后受到廣泛的關(guān)注和討論,目前已有多個(gè)相關(guān)項(xiàng)目,逐漸形成了圍繞Docker的生態(tài)體系。dotCloud公司后來也改名為Docker Inc,專注于Docker相關(guān)技術(shù)和產(chǎn)品的開發(fā)。Docker 一直廣受矚目,被認(rèn)為可能會(huì)改變軟件行業(yè)。那么什么是Docker呢?我查閱了網(wǎng)上的一些相關(guān)資料,現(xiàn)用一段話總結(jié)了一下。
Docker是一個(gè)開源的容器引擎,它可以幫助我們更快地交付應(yīng)用。Docker可將應(yīng)用程序和基礎(chǔ)設(shè)施層隔離,并且能將基礎(chǔ)設(shè)施當(dāng)作程序一樣進(jìn)行管理。使用Docker,可更快地打包、測試以及部署應(yīng)用程序,并可減少從編寫到部署運(yùn)行代碼的周期。
對一個(gè)事物有了一定了解后,我們的繼續(xù)學(xué)習(xí)Docker官方的給出文檔和源碼。(這個(gè)今天不在此文章擴(kuò)展,不然聊不完。)
TIPS
(1) Docker官方網(wǎng)站:https://www.docker.com/
(2) Docker GitHub:https://github.com/docker/docker
Docker快速入門執(zhí)行如下命令,即可啟動(dòng)一個(gè)Nginx容器
``
docker run -d -p 91:80 nginx
``
我們來看一下來自Docker官方文檔的架構(gòu)圖,如圖所示。
我們來講解上圖中包含的組件。
(1) Docker daemon(Docker守護(hù)進(jìn)程)
Docker daemon是一個(gè)運(yùn)行在宿主機(jī)(DOCKER_HOST)的后臺(tái)進(jìn)程。我們可通過Docker客戶端與之通信。
(2) Client(Docker客戶端)
Docker客戶端是Docker的用戶界面,它可以接受用戶命令和配置標(biāo)識(shí),并與Docker daemon通信。圖中,docker build等都是Docker的相關(guān)命令。
(3) Images(Docker鏡像)
Docker鏡像是一個(gè)只讀模板,它包含創(chuàng)建Docker容器的說明。它和系統(tǒng)安裝光盤有點(diǎn)像——我們使用系統(tǒng)安裝光盤安裝系統(tǒng),同理,我們使用Docker鏡像運(yùn)行Docker鏡像中的程序。
(4) Container(容器)
容器是鏡像的可運(yùn)行實(shí)例。鏡像和容器的關(guān)系有點(diǎn)類似于面向?qū)ο笾?,類和對象的關(guān)系。我們可通過Docker API或者CLI命令來啟停、移動(dòng)、刪除容器。
(5) Registry
Docker Registry是一個(gè)集中存儲(chǔ)與分發(fā)鏡像的服務(wù)。我們構(gòu)建完Docker鏡像后,就可在當(dāng)前宿主機(jī)上運(yùn)行。但如果想要在其他機(jī)器上運(yùn)行這個(gè)鏡像,我們就需要手動(dòng)拷貝。此時(shí),我們可借助Docker Registry來避免鏡像的手動(dòng)拷貝。
一個(gè)Docker Registry可包含多個(gè)Docker倉庫;每個(gè)倉庫可包含多個(gè)鏡像標(biāo)簽;每個(gè)標(biāo)簽對應(yīng)一個(gè)Docker鏡像。這跟Maven的倉庫有點(diǎn)類似,如果把Docker Registry比作Maven倉庫的話,那么Docker倉庫就可理解為某jar包的路徑,而鏡像標(biāo)簽則可理解為jar包的版本號。
Docker Registry可分為公有Docker Registry和私有Docker Registry。最常用的Docker Registry莫過于官方的Docker Hub,這也是默認(rèn)的Docker Registry。Docker Hub上存放著大量優(yōu)秀的鏡像,我們可使用Docker命令下載并使用。
Docker應(yīng)用場景常用的8個(gè)Docker的真實(shí)使用場景,分別是簡化配置、代碼流水線管理、提高開發(fā)效率、隔離應(yīng)用、整合服務(wù)器、調(diào)試能力、多租戶環(huán)境、快速部署。我們一直在談Docker,Docker怎么使用,在怎么樣的場合下使用?
首先你在享有Docker帶來的虛擬化能力的時(shí)候無需擔(dān)心它帶來的額外開銷。其次,相比于虛擬機(jī),你可以在同一臺(tái)機(jī)器上創(chuàng)建更多數(shù)量的容器。
Docker的另外一個(gè)優(yōu)點(diǎn)是容器的啟動(dòng)與停止都能在幾秒中內(nèi)完成。Docker公司的創(chuàng)始人 Solomon Hykes曾經(jīng)介紹過Docker在單純的LXC之上做了哪些事情,你可以去看看。
下面是我總結(jié)的一些Docker的使用場景,它為你展示了如何借助Docker的優(yōu)勢,在低開銷的情況下,打造一個(gè)一致性的環(huán)境。
簡化配置這是Docker公司宣傳的Docker的主要使用場景。虛擬機(jī)的最大好處是能在你的硬件設(shè)施上運(yùn)行各種配置不一樣的平臺(tái)(軟件、系統(tǒng)),Docker在降低額外開銷的情況下提供了同樣的功能。它能讓你將運(yùn)行環(huán)境和配置放在代碼中然后部署,同一個(gè)Docker的配置可以在不同的環(huán)境中使用,這樣就降低了硬件要求和應(yīng)用環(huán)境之間耦合度。
代碼流水線(Code Pipeline)管理前一個(gè)場景對于管理代碼的流水線起到了很大的幫助。代碼從開發(fā)者的機(jī)器到最終在生產(chǎn)環(huán)境上的部署,需要經(jīng)過很多的中間環(huán)境。而每一個(gè)中間環(huán)境都有自己微小的差別,Docker給應(yīng)用提供了一個(gè)從開發(fā)到上線均一致的環(huán)境,讓代碼的流水線變得簡單不少。
提高開發(fā)效率這就帶來了一些額外的好處:Docker能提升開發(fā)者的開發(fā)效率。如果你想看一個(gè)詳細(xì)一點(diǎn)的例子,可以參考Aater在DevOpsDays Austin 2014 大會(huì)或者是DockerCon上的演講。
不同的開發(fā)環(huán)境中,我們都想把兩件事做好。一是我們想讓開發(fā)環(huán)境盡量貼近生產(chǎn)環(huán)境,二是我們想快速搭建開發(fā)環(huán)境。
理想狀態(tài)中,要達(dá)到第一個(gè)目標(biāo),我們需要將每一個(gè)服務(wù)都跑在獨(dú)立的虛擬機(jī)中以便監(jiān)控生產(chǎn)環(huán)境中服務(wù)的運(yùn)行狀態(tài)。然而,我們卻不想每次都需要網(wǎng)絡(luò)連接,每次重新編譯的時(shí)候遠(yuǎn)程連接上去特別麻煩。這就是Docker做的特別好的地方,開發(fā)環(huán)境的機(jī)器通常內(nèi)存比較小,之前使用虛擬的時(shí)候,我們經(jīng)常需要為開發(fā)環(huán)境的機(jī)器加內(nèi)存,而現(xiàn)在Docker可以輕易的讓幾十個(gè)服務(wù)在Docker中跑起來。
隔離應(yīng)用有很多種原因會(huì)讓你選擇在一個(gè)機(jī)器上運(yùn)行不同的應(yīng)用,比如之前提到的提高開發(fā)效率的場景等。
我們經(jīng)常需要考慮兩點(diǎn),一是因?yàn)橐档统杀径M(jìn)行服務(wù)器整合,二是將一個(gè)整體式的應(yīng)用拆分成松耦合的單個(gè)服務(wù)(譯者注:微服務(wù)架構(gòu))。如果你想了解為什么松耦合的應(yīng)用這么重要,請參考Steve Yege的這篇論文,文中將Google和亞馬遜做了比較。
整合服務(wù)器正如通過虛擬機(jī)來整合多個(gè)應(yīng)用,Docker隔離應(yīng)用的能力使得Docker可以整合多個(gè)服務(wù)器以降低成本。由于沒有多個(gè)操作系統(tǒng)的內(nèi)存占用,以及能在多個(gè)實(shí)例之間共享沒有使用的內(nèi)存,Docker可以比虛擬機(jī)提供更好的服務(wù)器整合解決方案。
調(diào)試能力Docker提供了很多的工具,這些工具不一定只是針對容器,但是卻適用于容器。它們提供了很多的功能,包括可以為容器設(shè)置檢查點(diǎn)、設(shè)置版本和查看兩個(gè)容器之間的差別,這些特性可以幫助調(diào)試Bug。你可以在《Docker拯救世界》的文章中找到這一點(diǎn)的例證。
多租戶環(huán)境另外一個(gè)Docker有意思的使用場景是在多租戶的應(yīng)用中,它可以避免關(guān)鍵應(yīng)用的重寫。我們一個(gè)特別的關(guān)于這個(gè)場景的例子是為IoT(譯者注:物聯(lián)網(wǎng))的應(yīng)用開發(fā)一個(gè)快速、易用的多租戶環(huán)境。這種多租戶的基本代碼非常復(fù)雜,很難處理,重新規(guī)劃這樣一個(gè)應(yīng)用不但消耗時(shí)間,也浪費(fèi)金錢。
使用Docker,可以為每一個(gè)租戶的應(yīng)用層的多個(gè)實(shí)例創(chuàng)建隔離的環(huán)境,這不僅簡單而且成本低廉,當(dāng)然這一切得益于Docker環(huán)境的啟動(dòng)速度和其高效的diff命令。
你可以在這里了解關(guān)于此場景的更多信息。
快速部署在虛擬機(jī)之前,引入新的硬件資源需要消耗幾天的時(shí)間。虛擬化技術(shù)(Virtualization)將這個(gè)時(shí)間縮短到了分鐘級別。而Docker通過為進(jìn)程僅僅創(chuàng)建一個(gè)容器而無需啟動(dòng)一個(gè)操作系統(tǒng),再次將這個(gè)過程縮短到了秒級。這正是Google和Facebook都看重的特性。
你可以在數(shù)據(jù)中心創(chuàng)建銷毀資源而無需擔(dān)心重新啟動(dòng)帶來的開銷。通常數(shù)據(jù)中心的資源利用率只有30%,通過使用Docker并進(jìn)行有效的資源分配可以提高資源的利用率。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/27827.html
摘要:使用不再需要使用腳本來啟動(dòng)容器。通過配置安裝可以通過修改中的版本,自定義您需要的版本。 本篇將使用 DaoCloud 源在 Ubuntu 上簡單快速安裝 docker 及 docker-compose并添加了通過 Dockerfile 及 docker-compose.yml 使用 nginx 的示例本篇文章所用系統(tǒng)信息如下 Distributor ID: Ubuntu Descri...
摘要:使用不再需要使用腳本來啟動(dòng)容器。通過配置安裝可以通過修改中的版本,自定義您需要的版本。 本篇將使用 DaoCloud 源在 Ubuntu 上簡單快速安裝 docker 及 docker-compose并添加了通過 Dockerfile 及 docker-compose.yml 使用 nginx 的示例本篇文章所用系統(tǒng)信息如下 Distributor ID: Ubuntu Descri...
摘要:主機(jī)名命名空間,不同的內(nèi)部可以擁有不同的主機(jī)名。此外,也是解決跨平臺(tái)部署的利器。也許看完上述介紹大家還是云里霧里,沒關(guān)系,既然叫實(shí)戰(zhàn)指南,那么必然有實(shí)戰(zhàn)部分,我們從最簡單的程序開始。后續(xù)我們將介紹,如果利用運(yùn)行你自己的程序。 原文地址:Docker實(shí)戰(zhàn)指南(一):Docker介紹 Introduction 我第一次注意到Docker大概是在2014年的時(shí)候,當(dāng)時(shí)對Docker的第一印象...
摘要:大家好,今天我們來了解如何使用在各種云服務(wù)提供商的平臺(tái)上部署。是一個(gè)可以幫助我們在自己的電腦云服務(wù)提供商的平臺(tái)以及我們數(shù)據(jù)中心的機(jī)器上創(chuàng)建機(jī)器的應(yīng)用程序。支持幾個(gè)流行的云平臺(tái),如及其它等等,所以我們可以在不同的平臺(tái)使用相同的接口來部署。 大家好,今天我們來了解如何使用Docker Machine在各種云服務(wù)提供商的平臺(tái)上部署Docker。Docker Machine是一個(gè)可以幫助我們在自己的...
摘要:大家好,今天我們來了解如何使用在各種云服務(wù)提供商的平臺(tái)上部署。是一個(gè)可以幫助我們在自己的電腦云服務(wù)提供商的平臺(tái)以及我們數(shù)據(jù)中心的機(jī)器上創(chuàng)建機(jī)器的應(yīng)用程序。支持幾個(gè)流行的云平臺(tái),如及其它等等,所以我們可以在不同的平臺(tái)使用相同的接口來部署。 大家好,今天我們來了解如何使用Docker Machine在各種云服務(wù)提供商的平臺(tái)上部署Docker。Docker Machine是一個(gè)可以幫助我們在...
閱讀 3022·2021-11-17 09:33
閱讀 1756·2021-10-12 10:13
閱讀 2612·2021-09-22 15:48
閱讀 2486·2019-08-29 17:19
閱讀 2644·2019-08-26 11:50
閱讀 1625·2019-08-26 10:37
閱讀 1788·2019-08-23 16:54
閱讀 2973·2019-08-23 14:14