摘要:一為什么需要官方介紹中文版是世界領(lǐng)先的軟件容器平臺。其實這篇文章主要是講為什么我們需要在學(xué)習(xí)一項技術(shù)之前,必須要知道這項技術(shù)是用來干嘛的,的一些概念和命令我還沒介紹留到下一篇啦。
前言
只有光頭才能變強。
文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y
估計大家也可能聽過Docker這項技術(shù)(在論壇上、招聘技能上、交流群上等等),要是不了解Docker,都不好意思在網(wǎng)上沖浪的時候吹牛逼了。
所以這幾天學(xué)了一下Docker,總結(jié)了Docker入門的相關(guān)知識,分享給大家(好讓我們一起吹牛逼)。
I need a doctor,call me a doctor. I need a doctor, doctor, to bring me back to life .一、為什么需要Docker
官方介紹(中文版):http://www.docker-cn.com/what-docker#/developers
Docker 是世界領(lǐng)先的軟件容器平臺。1.1環(huán)境(切換/配置)麻煩
開發(fā)人員利用 Docker 可以消除協(xié)作編碼時“在我的機器上可正常工作”的問題。
運維人員利用 Docker 可以在隔離容器中并行運行和管理應(yīng)用,獲得更好的計算密度。
企業(yè)利用 Docker 可以構(gòu)建敏捷的軟件交付管道,以更快的速度、更高的安全性和可靠的信譽為 Linux 和 Windows Server 應(yīng)用發(fā)布新功能。
一般我們寫程序的,能接觸到好幾個環(huán)境:
自己寫代碼的環(huán)境叫做開發(fā)環(huán)境。
給測試去跑的環(huán)境叫做測試環(huán)境。
測試完可以對外使用的叫做生產(chǎn)環(huán)境。
其實我們在學(xué)習(xí)編程中,很多時間都浪費在“環(huán)境”上:
如果我現(xiàn)在重裝了系統(tǒng),我想要跑我的war/jar包,我得去安裝一下JDK、Tomcat、MySQL等配置各種的環(huán)境變量才能跑起來。
開開心心地跟著博主給出的步驟去寫Demo,但總是有Bug。(這里我將版本/依賴也歸納在環(huán)境的范疇里邊)。
好不容易在測試環(huán)境下跑起來了,在生產(chǎn)環(huán)境就各種出錯!
跟著教學(xué)視頻做分布式/集群的項目,跑一堆的虛擬機,每個虛擬機都要安裝對應(yīng)的環(huán)境。
所以就有個笑話《千萬不要跟程序員說,你的代碼有bug》:
他的第一反應(yīng)是你的環(huán)境有問題,第二就是你是傻逼不會用吧。
你要跟他這么說:“這個程序運行的怎么運行的跟預(yù)期不一樣,是我操作有問題嗎?”。
這貨就會第一反應(yīng)“我擦,這是不是出bug了?”
1.2應(yīng)用之間需要隔離比如我寫了兩個應(yīng)用(網(wǎng)站),這兩個應(yīng)用部署在同一臺服務(wù)器上,那可能會出現(xiàn)什么問題?
如果一個應(yīng)用出現(xiàn)了問題,導(dǎo)致CPU占100%。那另一個應(yīng)用也會受到關(guān)聯(lián),跟著一起涼涼了。
這兩個應(yīng)用是完全不同技術(shù)棧的應(yīng)用,比如一個PHP,一個.NET。這兩個應(yīng)用各種的依賴軟件都安裝在同一個服務(wù)器上,可能就會造成各種沖突/無法兼容,這可能調(diào)試就非常麻煩了。
二、Docker是如何解決上述的問題的 2.1解決環(huán)境(切換/配置)不知道大家有沒有裝過系統(tǒng),比如說裝Linux虛擬機,重裝Windows系統(tǒng),都是需要鏡像的。
有了這個鏡像,我們就可以運行這個鏡像,來進行安裝系統(tǒng)的操作(此處省略N個下一步),于是我們的系統(tǒng)就裝好了。一般來說,我們?nèi)ス俜角老螺d的鏡像,都是純凈的。比如去官方下載Windows鏡像,裝完后之后桌面只有一個回收站。
但有過了解裝系統(tǒng)的同學(xué)可能就會知道,有的鏡像裝完可能還有360這些軟件,但系統(tǒng)的的確確是變了。簡單來說,就是這些鏡像添加了其他的東西(比如360軟件、騰訊、千千靜聽等等軟件)。
Docker也是這種思路,可以將我們的想要的環(huán)境構(gòu)建(打包)成一個鏡像,然后我們可以推送(發(fā)布)到網(wǎng)上去。想要用這個環(huán)
境的時候,在網(wǎng)上拉取一份就好了。
有了Docker,我們在搭環(huán)境的時候,跟以前的方式就不一樣了。
之前:在開發(fā)環(huán)境構(gòu)建出了一個war包,想跑到Linux下運行。我們得先在Linux下載好Java、Tomcat、MySQL,配置好對應(yīng)的環(huán)境變量,將war包丟到Tomcat的webapps文件夾下,才能跑起來。
現(xiàn)在:在Linux下直接拉取一份鏡像(各種環(huán)境都配好了),將鏡像運行起來,把war包丟進去就好了。
將Docker的鏡像運行起來就是一兩秒的事情而已,十分方便的。
2.2解決應(yīng)用之間隔離說到這里,就得提出一個大家可能不認(rèn)識的概念:LXC(Linux Containers)--->Linux容器。
2.2.1Linux容器在Linux內(nèi)核中,提供了cgroups功能,來達成資源的區(qū)隔化。它同時也提供了名稱空間(namespace)區(qū)隔化的功能,使應(yīng)用程序看到的操作系統(tǒng)環(huán)境被區(qū)隔成獨立區(qū)間,包括進程樹,網(wǎng)絡(luò),用戶id,以及掛載的文件系統(tǒng)。
簡單來說就是:LXC是一個為Linux內(nèi)核包含特征的用戶接口。通過強大的API和簡單的工具,它可以讓Linux用戶輕松的創(chuàng)建和托管系統(tǒng)或者應(yīng)用程序容器。
2.2.2回到Docker我們在翻看Docker的官方文檔的時候,也很容易看見cgroup和namespace這兩個名詞:
來源維基百科:
Early versions of Docker used LXC as the container execution driver, though LXC was made optional in v0.9 and support was dropped in Docker v1.10.
lxc是早期版本docker的一個基礎(chǔ)組件,docker 主要用到了它對 Cgroup 和 Namespace 兩個內(nèi)核特性的控制。新的Docker版本已經(jīng)移除了對LXC的support。
2.2.3Docker在Windows和Mac上面說了,Docker底層用的Linux的cgroup和namespace這兩項技術(shù)來實現(xiàn)應(yīng)用隔離,那Windows和Mac用戶能用Docker嗎?
之前,Windows和Mac使用Docker實際上就是跑了一層Linux虛擬機。
比如在Windows下安裝的是Docker Toolbox,它需要Oracle Virtual Box來跑Docker
現(xiàn)在,Windows和Mac都已經(jīng)原生支持Docker了。但需要一些安裝的條件,詳情可以查看官網(wǎng)
比如Windows:Docker for Windows requires 64bit Windows 10 Pro and Microsoft Hyper-V
參考資料:
Windows 原生 Docker 正式商用
http://blog.daocloud.io/windows-docker/
三、虛擬機和Docker說到應(yīng)用隔離和鏡像,我就想起了虛擬機。今年下半年(此處省略.....),文體兩開花(此處省略.....),要是我寫文章寫得不好,我是需要向XX謝罪的。
估計大家都用過虛擬機,虛擬機也能實現(xiàn)對應(yīng)用的隔離,安裝特定的鏡像也能跑出我們想要的環(huán)境。虛擬機已經(jīng)發(fā)展了很久了,為什么我們還需要Docker呢?
這部分內(nèi)容在官網(wǎng)也有相關(guān)的介紹:
http://www.docker-cn.com/what-container#/virtual_machines
一句話總結(jié):Docker容器比虛擬機輕量多了!
最后Docker可以干嘛?
將一整套環(huán)境打包封裝成鏡像,無需重復(fù)配置環(huán)境,解決環(huán)境帶來的種種問題。
Docker容器間是進程隔離的,誰也不會影響誰。
其實這篇文章主要是講為什么我們需要Docker(在學(xué)習(xí)一項技術(shù)之前,必須要知道這項技術(shù)是用來干嘛的),Docker的一些概念和命令我還沒介紹(留到下一篇啦)。如果還沒看過【生活現(xiàn)場】從搬家到容器技術(shù)docker應(yīng)用場景解析,可以先去看看~
我在學(xué)習(xí)Docker的時候也找到了不少的資源,想要獲取Docker入門資源的同學(xué)可在公眾號下回復(fù)“Docker”
樂于分享和輸出干貨的Java技術(shù)公眾號:Java3y。關(guān)注即可領(lǐng)取海量的視頻資源!
覺得我的文章寫得不錯,不妨點一下贊!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28047.html
摘要:那容器和鏡像有什么關(guān)系網(wǎng)上說是類和對象的關(guān)系,沒錯,但是這樣的比喻沒什么實際卵用。針對這個問題,項目組決定把開發(fā)環(huán)境遷移到中,在測試環(huán)境中測試無誤后,把鏡像打包發(fā)布到正式環(huán)境中,解決了環(huán)境不同導(dǎo)致的問題。 本文旨在用最通俗的語言講述最枯燥的基本知識 最近Docker突然火得不得了,到處都是談?wù)揇ocker的聲音,相信大家和小編一樣的心情,看這個東西有點高大上,但嘗試去閱讀Docker文...
摘要:一為什么需要官方介紹中文版是世界領(lǐng)先的軟件容器平臺。其實這篇文章主要是講為什么我們需要在學(xué)習(xí)一項技術(shù)之前,必須要知道這項技術(shù)是用來干嘛的,的一些概念和命令我還沒介紹留到下一篇啦。 前言 只有光頭才能變強。 文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y 估計大家也可能聽過Docker這項技術(shù)(在論壇上、招聘技能...
摘要:獲取阿里云加速器地址進入登錄阿里云進入后臺配置加速器點擊后就會重啟并應(yīng)用配置的鏡像地址了檢查加速器是否生效配置加速器之后,如果拉取鏡像仍然十分緩慢,請手動檢查加速器配置是否生效,在命令行執(zhí)行,如果從結(jié)果中看到了如下內(nèi)容,說明配置成功。 一、為什么要使用Docker以及與虛擬機的區(qū)別? 1.1 為什么要使用Docker Docker的思想來自于集裝箱。集裝箱解決了什么問題?在一艘大船上,...
摘要:為什么要用對開發(fā)者來說啟動速度快傳統(tǒng)虛擬機需要數(shù)分鐘的啟動時間秒秒鐘啟動。開發(fā)者只需要代碼到版本管理即可,接下來的自動測試,自動構(gòu)建,自動部署都交給吧更輕松的擴展。 1. 前言 相見恨晚用來形容我對docker的熱愛再合適不過了,自從用了docker,開發(fā)環(huán)境也不安裝了,系統(tǒng)想換就換了,部署更是一鍵部署,再也不用擔(dān)心在這臺機器上跑的好好的,其它機器有問題了... 寫這篇文章,也是為do...
摘要:本文從定義,作用,技術(shù)架構(gòu),安裝和使用等全方位帶你看懂。最后,于開發(fā)者而言提供了一種開發(fā)環(huán)境的管理辦法,與測試人員而言保證了環(huán)境的同步,于運維人員提供了可移植的標(biāo)準(zhǔn)化部署流程。顯示上圖內(nèi)容就表明安裝完成。 作者丨唐文廣:騰訊工程師,負(fù)責(zé)無線研發(fā)部地圖測試。 導(dǎo)語:Docker,近兩年才流行起來的超輕量級虛擬機,它可以讓你輕松完成持續(xù)集成、自動交付、自動部署,并且實現(xiàn)開發(fā)環(huán)境、測試環(huán)...
閱讀 1437·2021-11-25 09:43
閱讀 2580·2021-09-24 10:30
閱讀 3659·2021-09-06 15:02
閱讀 3593·2019-08-30 15:55
閱讀 3299·2019-08-30 15:53
閱讀 1692·2019-08-30 15:52
閱讀 2141·2019-08-30 14:21
閱讀 2009·2019-08-30 13:55