只有光頭才能變強。git
文本已收錄至個人GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y程序員
估計你們也可能聽過Docker這項技術(在論壇上、招聘技能上、羣上等等),要是不瞭解Docker,都很差意思在網上衝浪的時候吹牛逼了。github
因此這幾天學了一下Docker,總結了Docker入門的相關知識,分享給你們(好讓咱們一塊兒吹牛逼)。web
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 是世界領先的軟件容器平臺。 開發人員利用 Docker 能夠消除協做編碼時「在個人機器上可正常工做」的問題。 運維人員利用 Docker 能夠在隔離容器中並行運行和管理應用,得到更好的計算密度。 企業利用 Docker 能夠構建敏捷的軟件交付管道,以更快的速度、更高的安全性和可靠的信譽爲 Linux 和 Windows Server 應用發佈新功能。windows
通常咱們寫程序的,能接觸到好幾個環境:安全
其實咱們在學習編程中,不少時間都浪費在「環境」上:服務器
war/jar
包,我得去安裝一下JDK、Tomcat、MySQL等配置各類的環境變量才能跑起來。因此就有個笑話《千萬不要跟程序員說,你的代碼有bug》:網絡
好比我寫了兩個應用(網站),這兩個應用部署在同一臺服務器上,那可能會出現什麼問題?
PHP
,一個.NET
。這兩個應用各類的依賴軟件都安裝在同一個服務器上,可能就會形成各類衝突/沒法兼容,這可能調試就很是麻煩了。不知道你們有沒有裝過系統,好比說裝Linux虛擬機,重裝Windows系統,都是須要鏡像的。
有了這個鏡像,咱們就能夠運行這個鏡像,來進行安裝系統的操做(此處省略N個下一步),因而咱們的系統就裝好了。通常來講,咱們去官方渠道下載的鏡像,都是純淨的。好比去官方下載Windows鏡像,裝完後以後桌面只有一個回收站。
但有過了解裝系統的同窗可能就會知道,有的鏡像裝完可能還有360這些軟件,但系統的的確確是變了。簡單來講,就是這些鏡像添加了其餘的東西(好比360軟件、騰訊、千千靜聽等等軟件)。
Docker也是這種思路,能夠將咱們的想要的環境構建(打包)成一個鏡像,而後咱們能夠推送(發佈)到網上去。想要用這個環 境的時候,在網上拉取一份就行了。
有了Docker,咱們在搭環境的時候,跟之前的方式就不同了。
將Docker的鏡像運行起來就是一兩秒的事情而已,十分方便的。
說到這裏,就得提出一個你們可能不認識的概念:LXC(Linux Containers)--->Linux容器。
在Linux內核中,提供了cgroups功能,來達成資源的區隔化。它同時也提供了名稱空間(namespace)區隔化的功能,使應用程序看到的操做系統環境被區隔成獨立區間,包括進程樹,網絡,用戶id,以及掛載的文件系統。
簡單來講就是:LXC是一個爲Linux內核包含特徵的用戶接口。經過強大的API和簡單的工具,它可讓Linux用戶輕鬆的建立和託管系統或者應用程序容器。
咱們在翻看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的一個基礎組件,docker 主要用到了它對 Cgroup 和 Namespace 兩個內核特性的控制。新的Docker版本已經移除了對LXC的support。
上面說了,Docker底層用的Linux的cgroup和namespace這兩項技術來實現應用隔離,那Windows和Mac用戶能用Docker嗎?
Docker Toolbox
,它須要Oracle Virtual Box
來跑DockerDocker for Windows requires 64bit Windows 10 Pro and Microsoft Hyper-V
參考資料:
說到應用隔離和鏡像,我就想起了虛擬機。今年下半年(此處省略.....),文體兩開花(此處省略.....),要是我寫文章寫得很差,我是須要向XX謝罪的。
估計你們都用過虛擬機,虛擬機也能實現對應用的隔離,安裝特定的鏡像也能跑出咱們想要的環境。虛擬機已經發展了好久了,爲何咱們還須要Docker呢?
這部份內容在官網也有相關的介紹:
一句話總結:Docker容器比虛擬機輕量多了!
Docker能夠幹嗎?
其實這篇文章主要是講爲何咱們須要Docker(在學習一項技術以前,必需要知道這項技術是用來幹嗎的),Docker的一些概念和命令我還沒介紹(留到下一篇啦)。若是還沒看過【生活現場】從搬家到容器技術docker應用場景解析,能夠先去看看~
我在學習Docker的時候也找到了很多的資源,想要獲取Docker入門資源的同窗可在公衆號下回復「Docker」
樂於分享和輸出乾貨的Java技術公衆號:Java3y。關注便可領取海量的視頻資源!
以爲個人文章寫得不錯,不妨點一下贊!