只有光頭才能變強(qiáng)。
創(chuàng)新互聯(lián)建站專注于沅陵企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),成都做商城網(wǎng)站。沅陵網(wǎng)站建設(shè)公司,為沅陵等地區(qū)提供建站服務(wù)。全流程按需規(guī)劃網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y
估計(jì)大家也可能聽過Docker這項(xiàng)技術(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 是世界領(lǐng)先的軟件容器平臺。
開發(fā)人員利用 Docker 可以消除協(xié)作編碼時“在我的機(jī)器上可正常工作”的問題。
運(yùn)維人員利用 Docker 可以在隔離容器中并行運(yùn)行和管理應(yīng)用,獲得更好的計(jì)算密度。
企業(yè)利用 Docker 可以構(gòu)建敏捷的軟件交付管道,以更快的速度、更高的安全性和可靠的信譽(yù)為 Linux 和 Windows Server 應(yīng)用發(fā)布新功能。
一般我們寫程序的,能接觸到好幾個環(huán)境:
自己寫代碼的環(huán)境叫做開發(fā)環(huán)境。
給測試去跑的環(huán)境叫做測試環(huán)境。
測試完可以對外使用的叫做生產(chǎn)環(huán)境。
其實(shí)我們在學(xué)習(xí)編程中,很多時間都浪費(fèi)在“環(huán)境”上:
如果我現(xiàn)在重裝了系統(tǒng),我想要跑我的war/jar
包,我得去安裝一下JDK、Tomcat、MySQL等配置各種的環(huán)境變量才能跑起來。
開開心心地跟著博主給出的步驟去寫Demo,但總是有Bug。(這里我將版本/依賴也歸納在環(huán)境的范疇里邊)。
好不容易在測試環(huán)境下跑起來了,在生產(chǎn)環(huán)境就各種出錯!
跟著教學(xué)視頻做分布式/集群的項(xiàng)目,跑一堆的虛擬機(jī),每個虛擬機(jī)都要安裝對應(yīng)的環(huán)境。
所以就有個笑話《千萬不要跟程序員說,你的代碼有bug》:
他的第一反應(yīng)是你的環(huán)境有問題,第二就是你是傻逼不會用吧。
你要跟他這么說:“這個程序運(yùn)行的怎么運(yùn)行的跟預(yù)期不一樣,是我操作有問題嗎?”。
這貨就會第一反應(yīng)“我擦,這是不是出bug了?”
比如我寫了兩個應(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)試就非常麻煩了。
不知道大家有沒有裝過系統(tǒng),比如說裝Linux虛擬機(jī),重裝Windows系統(tǒng),都是需要鏡像的。
有了這個鏡像,我們就可以運(yùn)行這個鏡像,來進(jìn)行安裝系統(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下運(yùn)行。我們得先在Linux下載好Java、Tomcat、MySQL,配置好對應(yīng)的環(huán)境變量,將war包丟到Tomcat的webapps文件夾下,才能跑起來。
現(xiàn)在:在Linux下直接拉取一份鏡像(各種環(huán)境都配好了),將鏡像運(yùn)行起來,把war包丟進(jìn)去就好了。
將Docker的鏡像運(yùn)行起來就是一兩秒的事情而已,十分方便的。
說到這里,就得提出一個大家可能不認(rèn)識的概念:LXC(Linux Containers)--->Linux容器。
在Linux內(nèi)核中,提供了cgroups功能,來達(dá)成資源的區(qū)隔化。它同時也提供了名稱空間(namespace)區(qū)隔化的功能,使應(yīng)用程序看到的操作系統(tǒng)環(huán)境被區(qū)隔成獨(dú)立區(qū)間,包括進(jìn)程樹,網(wǎng)絡(luò),用戶id,以及掛載的文件系統(tǒng)。
簡單來說就是:LXC是一個為Linux內(nèi)核包含特征的用戶接口。通過強(qiáng)大的API和簡單的工具,它可以讓Linux用戶輕松的創(chuàng)建和托管系統(tǒng)或者應(yīng)用程序容器。
我們在翻看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。
上面說了,Docker底層用的Linux的cgroup和namespace這兩項(xiàng)技術(shù)來實(shí)現(xiàn)應(yīng)用隔離,那Windows和Mac用戶能用Docker嗎?
之前,Windows和Mac使用Docker實(shí)際上就是跑了一層Linux虛擬機(jī)。
比如在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/
說到應(yīng)用隔離和鏡像,我就想起了虛擬機(jī)。今年下半年(此處省略…..),文體兩開花(此處省略…..),要是我寫文章寫得不好,我是需要向XX謝罪的。
估計(jì)大家都用過虛擬機(jī),虛擬機(jī)也能實(shí)現(xiàn)對應(yīng)用的隔離,安裝特定的鏡像也能跑出我們想要的環(huán)境。虛擬機(jī)已經(jīng)發(fā)展了很久了,為什么我們還需要Docker呢?
這部分內(nèi)容在官網(wǎng)也有相關(guān)的介紹:
http://www.docker-cn.com/what-container#/virtual_machines
一句話總結(jié):Docker容器比虛擬機(jī)輕量多了!
Docker可以干嘛?
將一整套環(huán)境打包封裝成鏡像,無需重復(fù)配置環(huán)境,解決環(huán)境帶來的種種問題。
Docker容器間是進(jìn)程隔離的,誰也不會影響誰。
其實(shí)這篇文章主要是講為什么我們需要Docker(在學(xué)習(xí)一項(xiàng)技術(shù)之前,必須要知道這項(xiàng)技術(shù)是用來干嘛的),Docker的一些概念和命令我還沒介紹(留到下一篇啦)。如果還沒看過【生活現(xiàn)場】從搬家到容器技術(shù)docker應(yīng)用場景解析,可以先去看看~