不知道有多少人聽過這東西 ;p
它是dotCloud 所開源的專案,是他們服務中相當的關鍵組件,可以看一下老闆自己在 pyCon 上首次披露這個開源專案時候所作的介紹 ;p
Docker – The Linux container runtime
Docker complements LXC with a high-level API which operates at the process level. It runs unix processes with s trong guarantees of isolation and repeatability across servers.
Docker is a great building block for automating distributed systems: large-scale web deployments, database clus ters, continuous deployment systems, private PaaS, service-oriented architectures, etc.
因為對於 Paas 來說(尤其像 dotCloud 這類提供大量不同服務的廠商),能夠更加彈性地達到延展性的目的是很重要的,這幾乎是 每個 Paas 都必須面對的問題,而 dotCloud 就因此開發出這篇的主角 - Docker來處理這個問題(而且 還開源實在太甘心了 ;p)
對於開發者來說最必殺的作法,就是當我需要的時候就+++(機器、容量等),不過 Paas 要怎麼處理這樣的需求就得想一下,因為通常使用者少說也都是用兩三項(甚至更多)以上的東西來串連起自己的服務(開發框架+資料庫+搜尋+信件...等),這麼複雜的架構下又要彈性的擴充,並不是一件簡單的事。
Docker 是利用lxc(Linux Containers,沒錯所以只有 linux 可以用,輕量級的虛擬機器)所開發出來的,包過之後提供使用者更方便的介面來操作 - Standard Container,Docker 所定義軟件部屬的最小單位,將軟件與其相依套件都封裝在其中,所以當你部屬的時候就是直接執行封裝好的 Container 就可以了(其實就是切虛擬環境是一樣的)。
用 nodejs application 作範例來說明
- Docker Makes Creating Secure Sandboxes Easier Then Ever
- Docker examples
如果你把這個丟到公開的 repository 上面,其他人就可以直接
docker pull <username>/<image>
拉下來就可以馬上執行了。
除此之外,你也可以把自己定義好的 Container 放到[Repository](http://docs.docker.io/en/latest/use/workingwithreposito ry/)上面(指令幾乎跟 git 一樣,push、pull、commit),如果是開源專案的話,可以利用這種方式很快的讓其他參與者可以建立起測試的環境。(其實我就是因為看到有大大們在用,所以才想說來看一下這東西 ;p)
也可以參考14 Great Tutorials on Docker,裡面有不少實作的案例。
之後有機會再提一下某個基於 Docker 實作的有趣專案。 順帶一提,會注意到這東西是因為它是用 Golang 做出來的 ;p