自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Docker時(shí)代來(lái)了,你準(zhǔn)備好了嗎 ?

云計(jì)算
Docker之所以受人矚目,并不是因?yàn)樗鼊?chuàng)造了多么神奇的技術(shù),而是因?yàn)樗匦露x了軟件的交付方式,進(jìn)而將改變傳統(tǒng)“開發(fā)-測(cè)試-部署”的軟件流程。尤其是在云計(jì)算和開源軟件大行其道的今天,Docker的出現(xiàn)正好順應(yīng)了時(shí)代的發(fā)展,占盡了天時(shí)地利人和。本文著眼于Docker的價(jià)值、Docker思維、Docker的運(yùn)行方式這三個(gè)問題,幫助大家認(rèn)識(shí)和應(yīng)用Docker。

剛剛過去的2014年或許是史上最熱的一年,在這火熱的年份里,Docker 也好似一支被點(diǎn)燃的火箭,掀起一股股熱浪。Docker之所以如此受人矚目,并不是因?yàn)樗鼊?chuàng)造了多么神奇的技術(shù),而是因?yàn)樗匦露x了軟件的交付方式,進(jìn)而將改變傳統(tǒng)“開發(fā)-測(cè)試-部署”的軟件流程。尤其是在云計(jì)算和開源軟件大行其道的今天,Docker的出現(xiàn)正好順應(yīng)了時(shí)代的發(fā)展,占盡了天時(shí)地利人和。

本文的重點(diǎn)不是討論Docker的基本原理或?qū)崿F(xiàn)機(jī)制(網(wǎng)上有太多的資料文檔可以參考,比如這篇博客《Docker,云時(shí)代的程序交付方式》),而是基于前一段時(shí)間的探索實(shí)踐,分享一些我們對(duì)Docker的認(rèn)識(shí)與思考,期待有更多的同行參與進(jìn)來(lái),一起推動(dòng)Docker在國(guó)內(nèi)的應(yīng)用,享受到其發(fā)展的紅利。因此,我們這里著眼于以下三個(gè)問題:為什么Docker有價(jià)值?什么是Docker思維?如何把Docker玩起來(lái)?

為什么Docker有價(jià)值

為什么Docker這么有價(jià)值?在回答這個(gè)問題之前,我們先想一個(gè)相似的問題,為什么阿里巴巴這么有價(jià)值?

傳統(tǒng)的商業(yè)存在兩大弊端:一是買賣雙方相對(duì)分散,加大了需求收集、營(yíng)銷、運(yùn)輸?shù)某杀?;二是買賣雙方信息不對(duì)稱,對(duì)交易產(chǎn)生了抑制作用。

電子商務(wù)的出現(xiàn)則將商品從賣方到買方的流通過程變得集中化、標(biāo)準(zhǔn)化、透明化:

  • 集中化:買家足不出戶就能從各個(gè)商戶集中購(gòu)買商品,賣家根據(jù)買家需求集中配貨、根據(jù)下單情況集中發(fā)貨。
  • 標(biāo)準(zhǔn)化:買家支付下單-賣家發(fā)貨-快遞包裹-物流運(yùn)輸-買家收貨確認(rèn),整個(gè)流程都是標(biāo)準(zhǔn)化的。
  • 透明化:買家可以在網(wǎng)上瀏覽商品評(píng)價(jià)、比較商品價(jià)格。買賣雙方的信用等級(jí)也是完全透明的。

綜上所述,可以說(shuō)阿里巴巴這樣的電商帶來(lái)的***價(jià)值在于降低了商品的社會(huì)交易成本。

現(xiàn)在我們把商業(yè)發(fā)展的邏輯搬到軟件交付這里。傳統(tǒng)的軟件交付面臨同傳統(tǒng)商業(yè)類似的問題:

  1. 軟件發(fā)布分散化,使用者搜索和安裝軟件的成本較高。當(dāng)然,我們有類似yum、brew這樣的工具來(lái)集中處理軟件安裝與軟件依賴問題。但是,不要忘記開源軟件已經(jīng)占據(jù)越來(lái)越重要的位置,它們的發(fā)展速度和協(xié)作方式使傳統(tǒng)的工具很難跟上節(jié)奏。
  2. 軟件開發(fā)者和軟件使用者雙方信息不對(duì)稱。盡管開發(fā)者對(duì)軟件的代碼編譯、參數(shù)配置、運(yùn)行環(huán)境等信息了如指掌,但使用者卻很可能一知半解。因此,我們會(huì)經(jīng)??吹绞褂谜弑г?,明明按照用戶手冊(cè)一步步操作,卻仍然跑不起來(lái)。這種情況也時(shí)常出現(xiàn)在軟件流程中,開發(fā)將程序和文檔交付給測(cè)試或運(yùn)維,測(cè)試或運(yùn)維卻總是無(wú)法重現(xiàn)期望的運(yùn)行狀態(tài),幾經(jīng)輾轉(zhuǎn)發(fā)現(xiàn)是機(jī)器環(huán)境 、系統(tǒng)環(huán)境、軟件依賴版本、參數(shù)配置等等原因?qū)е?。這樣低效的軟件流程將使持續(xù)集成與持續(xù)交付很難真正實(shí)施起來(lái),僅僅流于形式。

Docker的出現(xiàn)則將軟件從開發(fā)方到使用方的交付過程變得集中化、標(biāo)準(zhǔn)化、透明化:

  • 集中化:軟件使用者可以從Docker倉(cāng)庫(kù)找到琳瑯滿目的軟件鏡像,一個(gè)鏡像包含商業(yè)軟件或開源軟件,也可以包含單個(gè)軟件或任意的軟件組合。
  • 標(biāo)準(zhǔn)化:Docker鏡像的“構(gòu)建-發(fā)布-存儲(chǔ)-下載-運(yùn)行”是標(biāo)準(zhǔn)化的,統(tǒng)一通過Docker工具來(lái)執(zhí)行,而且所有操作都可以移植到任意的機(jī)器或平臺(tái)。
  • 透明化:Docker鏡像是自包含的,包括程序、軟件依賴、參數(shù)配置等所有運(yùn)行環(huán)境,使用者無(wú)需了解細(xì)節(jié),只需運(yùn)行同樣的Docker命令就能達(dá)到與開發(fā)者同樣的運(yùn)行狀態(tài)。

綜上所述,可以說(shuō)Docker帶來(lái)的***價(jià)值在于降低了軟件的交付成本。

#p#

什么是Docker思維

這年頭流行思維主義,什么互聯(lián)網(wǎng)思維、大數(shù)據(jù)思維格外賺人眼球。這里我們跟風(fēng)一下,提出一個(gè)Docker思維,其實(shí)歸納起來(lái)就兩句話:

  1. 做為軟件使用者,避免直接安裝軟件包,總是以Docker鏡像形式獲取軟件、以Docker容器形式運(yùn)行軟件。
  2. 做為軟件開發(fā)者,避免直接發(fā)布軟件包,總是以Docker鏡像形式發(fā)布到Docker倉(cāng)庫(kù)。

怎樣理解這兩句話?下面通過一個(gè)簡(jiǎn)單的實(shí)踐來(lái)說(shuō)明。假定現(xiàn)在我們?cè)陂_發(fā)一個(gè)Java程序,從編譯到運(yùn)行需要使用以下幾個(gè)軟件工具:1) git,源碼版本控制; 2) maven,源碼編譯; 3) mysql,存儲(chǔ)數(shù)據(jù)庫(kù)。

遵循Docker思維,做為使用者,我們應(yīng)該避免直接安裝git、maven及mysql,而是通過Docker來(lái)獲取。

首先,從github上獲取源代碼:

  1. docker run -it --rm -v "$(pwd)":/app switchback/git-debian git clone https://github.com/spring-by-example/spring-by-example.git /app 

運(yùn)行以上命令將在當(dāng)前文件夾clone指定github地址的源代碼。簡(jiǎn)單解析一下命令:

  • switchback/git-debian,是git的Docker鏡像URL。
  • -it,指定以交互方式啟動(dòng)容器。
  • --rm,指定命令結(jié)束自動(dòng)刪除容器。
  • -v "$(pwd)":/app, 指定將宿主機(jī)的當(dāng)前文件夾mount到容器里的/app文件夾。

然后,通過maven來(lái)編譯源碼:

  1. docker run -it --rm -v "$(pwd)":/app -w /app docker.cn/docker/maven mvn clean package 

運(yùn)行以上命令將在當(dāng)前源碼文件夾編譯maven項(xiàng)目。簡(jiǎn)單解析一下命令:

  1. maven:3.2-jdk-7,是maven的Docker鏡像URL。
  2. -w /app,指定容器的工作路徑為"/app"。

***,搭建mysql數(shù)據(jù)庫(kù):

  1. docker run -e MYSQL_ROOT_PASSWORD=mypassword -d -p 3306:3306 docker.cn/docker/mysql 

運(yùn)行以上命令將在本機(jī)啟動(dòng)一個(gè)mysql數(shù)據(jù)庫(kù)。簡(jiǎn)單解析一下命令:

  • docker.cn/docker/mysql,是mysql的Docker鏡像URL。
  • -e MYSQL_ROOT_PASSWORD=mypassword,-e選項(xiàng)用于向Docker容器里注入環(huán)境變量,這里通過MYSQL_ROOT_PASSWORD環(huán)境變量傳遞mysql的root密碼。
  • -d,指定后臺(tái)方式啟動(dòng)容器
  • -p 3306:3306,指定將容器的3306端口綁定到宿主機(jī)的3306端口。

可以看到,三條Docker命令就滿足了我們對(duì)git/maven/mysql的使用需求,而且可以完全移植到有Docker環(huán)境的任意機(jī)器。那么,接下來(lái)的問題是,如何發(fā)布我們的Java程序?

遵循Docker思維,做為開發(fā)者,應(yīng)該通過Docker來(lái)發(fā)布軟件。

首先,編寫一個(gè)Dockerfile來(lái)制作Docker鏡像,它有點(diǎn)類似Makefile的作用:

  1. #每個(gè)Docker鏡像需要基于某個(gè)基礎(chǔ)鏡像來(lái)構(gòu)建 
  2. #新鏡像的構(gòu)建操作會(huì)在基礎(chǔ)鏡像上疊加 
  3. FROM docker.oa.com:8080/docker/java7 
  4. #將源碼編譯后產(chǎn)生的jar文件拷貝到鏡像里 
  5. ADD target/myapp.jar /app/myapp.jar 
  6. #指定容器的啟動(dòng)命令 
  7. CMD java -jar /app/myapp.jar 

保存以上的Dockerfile,運(yùn)行以下命令制作鏡像,指定鏡像名為myapp,版本為1.0:

  1. docker build -t myapp:1.0 . 

鏡像制作完成后,可以提交到Docker倉(cāng)庫(kù),軟件發(fā)布就完成了:

  1. docker push myapp:1.0 

可以看到,兩條Docker命令加一個(gè)Dockerfile就滿足了我們對(duì)軟件的發(fā)布需求。更重要的是,使用者可以像我們之前使用git/maven/mysql那樣,通過Docker獲取并運(yùn)行該軟件。

#p#

如何把Docker玩起來(lái)

君子動(dòng)口又動(dòng)手,才是好程序員。要想玩轉(zhuǎn)Docker,首先得動(dòng)手把Docker環(huán)境搭建起來(lái)。下面讓我們花5分鐘的時(shí)間在Windows上搭建Docker環(huán)境。

方式一

最簡(jiǎn)單的方式是直接安裝boot2docker,它是一個(gè)為體驗(yàn)Docker而打造的輕量級(jí)Linux發(fā)行版。在Windows上可以直接運(yùn)行boot2docker安裝文件,它默認(rèn)會(huì)綁定安裝VirtualBox以便在虛擬機(jī)中運(yùn)行boot2docker。

boot2docker極其輕量,安裝簡(jiǎn)單,但是它完全是運(yùn)行在內(nèi)存中的,這意味著你在系統(tǒng)中修改的配置或保存的文件,在重啟后都會(huì)丟失。在某些情況下,可能你希望***創(chuàng)建某個(gè)用戶賬號(hào),或者***保存某些文件(例如Dockerfile),這時(shí)候boot2docker就無(wú)法滿足了,可以嘗試方式二。

方式二

通過vagrant安裝coreos。coreos是另一個(gè)為Docker而打造的輕量級(jí)Linux發(fā)行版,但它的目標(biāo)是大規(guī)模生產(chǎn)環(huán)境部署,而不僅僅是體驗(yàn);vagrant是一個(gè)創(chuàng)建可移植的開發(fā)環(huán)境的工具。我們通過以下幾步來(lái)安裝coreos:

1. 安裝virtualbox

2. 安裝vagrant

3. 下載coreos的vagrant box——coreos_production_vagrant.box

4. 運(yùn)行以下命令添加vagrant box:

  1. vagrant.exe box add --name coreos coreos_production_vagrant.box 

5. cd到一個(gè)新的文件夾,運(yùn)行以下命令啟動(dòng)coreos虛擬機(jī):

  1. vagrant.exe init coreos 
  2. vagrant.exe up 

6. 現(xiàn)在就可以ssh到coreos了:

  1. vagrant.exe ssh 

7. 當(dāng)然也可以通過putty這樣的工具來(lái)ssh到coreos:IP=127.0.0.1,Port=2222。

到目前為止,相信你已經(jīng)能夠在Windows上自由體驗(yàn)Docker了,不妨試試將自己的軟件制作成鏡像,發(fā)布到倉(cāng)庫(kù),再讓其他人通過Docker獲取運(yùn)行,你會(huì)發(fā)現(xiàn)原來(lái)軟件交付真的是如此便捷!

接下來(lái)更進(jìn)一步,你可以考慮將復(fù)雜一點(diǎn)的分布式應(yīng)用遷移到Docker,這時(shí)候就需要搭建Docker集群,而更關(guān)鍵的問題是,如何做資源調(diào)度、擴(kuò)縮容、服務(wù)發(fā)現(xiàn)、自動(dòng)容錯(cuò)、集群監(jiān)控。Docker自身目前還不能解決集群應(yīng)用的問題(雖然已經(jīng)在朝著這個(gè)方向努力),這需要在Docker之上構(gòu)建集群管理系統(tǒng),業(yè)界有名的開源項(xiàng)目包括Kubernetes和Flynn,具體介紹可參考筆者的文章《Kubernetes初探:原理及實(shí)踐應(yīng)用》和《Flynn初探:基于Docker的PaaS平臺(tái)》。

總結(jié)

經(jīng)過本文的分享,希望大家對(duì)Docker有更了清晰的認(rèn)識(shí),并且能動(dòng)手玩起來(lái)。有任何疑問或者想法,歡迎通過郵件zhangjun2915@163.com交流,讓我們攜手走進(jìn)Docker時(shí)代,做新時(shí)代的弄潮兒。

[[125835]]

博文出處:http://blog.csdn.net/zhangjun2915/article/details/42472813

 

 

責(zé)任編輯:Ophira 來(lái)源: TragicJun的專欄
相關(guān)推薦

2011-05-25 17:08:29

ibmdwLinux

2018-10-16 18:26:52

人工智能AI

2011-05-25 10:15:47

開源

2013-06-05 15:39:21

大協(xié)同

2018-10-11 17:43:15

人臉識(shí)別人工智能AI

2015-09-08 16:04:06

云災(zāi)備華為

2011-08-30 09:28:36

編程

2010-08-25 15:49:04

面試

2016-05-31 16:50:33

2021-08-02 15:42:36

人工智能無(wú)人機(jī)無(wú)人駕駛

2009-06-23 14:09:53

Web 3.0語(yǔ)義網(wǎng)OpenAmplify

2015-12-15 10:47:35

中國(guó)外包網(wǎng)

2016-01-07 10:54:29

機(jī)器取代

2011-07-08 10:18:09

海量數(shù)據(jù)數(shù)據(jù)挖掘

2013-08-02 14:34:35

移動(dòng)互聯(lián)網(wǎng)

2020-03-26 17:28:22

CIO觀點(diǎn)MES系統(tǒng)制造企業(yè)

2011-01-12 09:37:59

2022-03-07 10:35:30

元宇宙人工智能大數(shù)據(jù)

2013-01-28 16:51:45

2015-10-19 16:51:01

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)