Docker以及Registry介紹
【編者的話】本文介紹了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:
$ docker run -e SETTINGS_FLAVOR=s3 -e AWS_BUCKET=mybucket -e STORAGE_PATH=/registry -e AWS_KEY=myawskey -e AWS_SECRET=myawssecret -e SEARCH_BACKEND=sqlalchemy -p 5000:5000 registry
這主要是為應用設置六個環境變量,讓它保存到S3上,并將宿主(本地)系統的5000端口轉發到客戶機(Registry)的5000端口上。 “registry”是運行的鏡像名稱(如果它是由某個用戶擁有的,那看起來像是“/”)。如果本地尚不存在這個鏡像,它將被定位并拉取(pull)下 來。如果沒有使用registry前綴做限定,將會假定它位于Docker Hub上。
這個示例中,我們從Hub上將Ubuntu鏡像拉取下來,然后推送(push)到我們的Registry里。值得注意的是,我們通過添加Registry的主機名/端口前綴來限定“推送”和“拉取”請求到我們的registry中。
$ sudo docker pull ubuntu:14.04 $ sudo docker tag 826544226fdc yourregistry.net:5000/ubuntu $ sudo docker push yourregistry.net:5000/ubuntu $ sudo docker pull yourregistry.net:5000/ubuntu
tag命令在我們的registry中為給定的其他地方的鏡像保留了一個新的位置。你可以在本地列表中得到它的ID字符串。
默認情況下,Registry只與Docker socket直接通訊或通過REST進行管理。如果你想更容易地瀏覽鏡像,請安裝 docker-registry-web項目:
$ docker run -p 8080:8080 -e REG1=http://:5000/v1/ atcol/docker-registry-ui
請記住,它需要與你的Registry實例聯系,所以要確保你提供的registry主機名在docker-registry-web容器里可被解析。
截圖如下:
docker-registry-web實際上是一個Java應用,然而它是個設計不佳的鏡像(如果知道這點對你很重要的話)。
最后,在你玩夠Registry實例后,記得將它隱藏在Nginx代理之后,并添加認證(雙向、HTTP等)。
原文鏈接:Intro to Docker, and Private Image Registries(翻譯:Sean 審校:林仁)
來自:http://dockerone.com/article/108