天天看點

Docker介紹以及Registry的安裝 -摘自http://dockone.io/article/108

本文介紹了Docker與Registry,作者說Docker是一個application hosting架構,亮點是簡化應用的部署以及應用部署的版本控制。同時,作者介紹了Docker Registry的安裝以及一個可以通過網頁浏覽Registry的鏡像項目docker-registry-web。

Docker是一個應用托管架構(application hosting framework),它可以通過類似虛拟機一樣的容器來部署、管理應用,容器又可以通過API建立和控制它們。

Docker允許你把依賴/伺服器和應用打包成一個疊加在其他鏡像(如Ubuntu,或專為需求準備的内容)之上的瘦小鏡像。有别于虛拟機的是,盡管使用了LXC和cgroups(前面文章中提到的Linux概念)将它們與其它系統中的程式嚴格地隔離開來,它們卻共享着相同的資源,并且幾乎沒有額外開銷。當你啟動一個虛拟機,你最終得到的是一個用于安裝或運作應用的提示符或UI。當你啟動一個應用容器,你隻要運作一個用于啟動應用及其依賴的腳本,僅此而已。你能在一個系統上運作數個虛拟機,卻可以運作上千個應用容器。如果你想要流線分布,可以考慮在系統層面上使用CoreOS來托管你的鏡像。

Docker的另一個功能是版本控制。你可以把容器裡做的任何改變送出成一個新的鏡像。當然,你也可以使用同一個鏡像(鏡像本身是不可變的)啟動任意多個容器。

在分發鏡像給其他團隊或公司的過程中,可能需要在你的目前系統之外找個地方釋出或定位你的鏡像。這可通過Registry實作。盡管Docker提供了公共的Docker Hub Registry,你或許想要一個用于自己公司或團隊的私有的Registry。

因為Docker的元件/附件自身經常是通過Docker鏡像釋出的,本示例也側面展示了啟動一個以Docker為基礎的應用是多麼簡單(如果你之前并不熟悉這塊)。除了服務占用的端口之外,你無須知道客戶機應用的任何東西。實際上,你可以啟動其他Docker鏡像需要的鏡像(之後就被稱為容器),讓Docker映射随機的本地端口給它,然後将提供服務的容器的端口自動轉發到依賴這些服務的容器上(通過“連結”功能)。

使用類似Registry項目首頁示例的指令來啟動你的Registry:

這主要是為應用設定六個環境變量,讓它儲存到S3上,并将宿主(本地)系統的5000端口轉發到客戶機(Registry)的5000端口上。“registry”是運作的鏡像名稱(如果它是由某個使用者擁有的,那看起來像是“/”)。如果本地尚不存在這個鏡像,它将被定位并拉取(pull)下來。如果沒有使用registry字首做限定,将會假定它位于Docker Hub上。

這個示例中,我們從Hub上将Ubuntu鏡像拉取下來,然後推送(push)到我們的Registry裡。值得注意的是,我們通過添加Registry的主機名/端口字首來限定“推送”和“拉取”請求到我們的registry中。

​<code>​tag​</code>​指令在我們的registry中為給定的其他地方的鏡像保留了一個新的位置。你可以在本地清單中得到它的ID字元串。

預設情況下,Registry隻與Docker socket直接通訊或通過REST進行管理。如果你想更容易地浏覽鏡像,請安裝docker-registry-web項目:

請記住,它需要與你的Registry執行個體聯系,是以要確定你提供的registry主機名在docker-registry-web容器裡可被解析。

docker-registry-web實際上是一個Java應用,然而它是個設計不佳的鏡像(如果知道這點對你很重要的話)。

最後,在你玩夠Registry執行個體後,記得将它隐藏在Nginx代理之後,并添加認證(雙向、HTTP等)。