您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何搭建一個私有的Docker registry”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“如何搭建一個私有的Docker registry”文章能幫助大家解決問題。
本地搭建
首先你需要安裝boot2docker以及docker cli。如果你已經(jīng)搭建好了基本的docker環(huán)境,你可以直接跳過這一步。
從終端運(yùn)行以下命令(我假設(shè)你使用os x,使用 homebrew 來安裝相關(guān)軟件,你可以根據(jù)你的環(huán)境使用不同的包管理軟件來安裝):
brew install boot2docker docker
如果一切順利(想要了解搭建docker環(huán)境的完整指南,請參閱 ) ,你現(xiàn)在就能夠通過如下命令啟動一個 docker 運(yùn)行于其中的虛擬機(jī):
boot2docker up
按照屏幕顯示的說明,復(fù)制粘貼book2docker在終端輸出的命令。如果你現(xiàn)在運(yùn)行docker ps
命令,終端將有以下顯示。
container id image command created status ports names
好了,docker已經(jīng)準(zhǔn)備就緒,這就夠了,我們回過頭去搭建registry。
創(chuàng)建服務(wù)器
登錄進(jìn)你的do賬號,選擇一個預(yù)安裝了docker的鏡像文件,創(chuàng)建一個新的drople。(本文寫成時選擇的是 image > applications > docker 1.4.1 on 14.04)
你將會以郵件的方式收到一個根用戶憑證。登錄進(jìn)去,然后運(yùn)行docker ps
命令來查看系統(tǒng)狀態(tài)。
搭建aws s3
我們現(xiàn)在將使用amazo simple storage service(s3)作為我們registry/repository的存儲層。我們將需要創(chuàng)建一個桶(bucket)以及用戶憑證(user credentials)來允許我們的docker容器訪問它。
登錄到我們的aws賬號(如果沒有,就申請一個),在控制臺選擇s3(simpole storage service)。
點(diǎn)擊 create bucket,為你的桶輸入一個名字(把它記下來,我們一會需要用到它),然后點(diǎn)擊create。
ok!我們已經(jīng)搭建好存儲部分了。
設(shè)置aws訪問憑證
我們現(xiàn)在將要創(chuàng)建一個新的用戶。退回到aws控制臺然后選擇iam(identity & access management)。
在dashboard
的左邊,點(diǎn)擊users。然后選擇 create new users
。
輸入一個用戶名(例如 docker-registry)然后點(diǎn)擊create。寫下(或者下載csv文件)你的access key以及secret access key?;氐侥愕挠脩袅斜砣缓筮x擇你剛剛創(chuàng)建的用戶。
在permission section下面,點(diǎn)擊attach user policy。之后在下一屏,選擇custom policy。
custom policy的內(nèi)容如下:
{ "version": "2012-10-17", "statement": [ { "sid": "somestatement", "effect": "allow", "action": [ "s3:*" ], "resource": [ "arn:aws:s3:::docker-registry-bucket-name/*", "arn:aws:s3:::docker-registry-bucket-name" ] } ] }
這個配置將允許用戶(也就是regitstry)來對桶上的內(nèi)容進(jìn)行操作(讀/寫)(確保使用你之前創(chuàng)建aws s3時使用的桶名)??偨Y(jié)一下:當(dāng)你想把你的docker鏡像從你的本機(jī)推送到倉庫中時,服務(wù)器就會將他們上傳到s3。
安裝registry
現(xiàn)在回過頭來看我們的do服務(wù)器,ssh登錄其上。我們將要一個官方docker registry鏡像。
輸入如下命令,開啟registry。
docker run \ -e settings_flavor=s3 \ -e aws_bucket=bucket-name \ -e storage_path=/registry \ -e aws_key=your_aws_key \ -e aws_secret=your_aws_secret \ -e search_backend=sqlalchemy \ -p 5000:5000 \ --name registry \ -d \ registry
docker將會從docker hub上拉取所需的文件系統(tǒng)分層(fs layers)并啟動守護(hù)容器(daemonised container)。
測試registry
如果上述操作奏效,你可以通過ping命令,或者查找它的內(nèi)容來測試registry(雖然這個時候容器還是空的)。
我們的registry非?;A(chǔ),而且沒有提供任何“驗(yàn)明正身”的方式。因?yàn)樘砑由矸蒡?yàn)證可不是一件輕松事(至少我認(rèn)為沒有一種部署方法是簡單的,像是為了證明你努力過似的),我覺得“查詢/拉取/推送”倉庫內(nèi)容的最簡單方法就是通過ssh通道的未加密連接(通過http)。
打開ssh通道的操作非常簡單:
ssh -n -l 5000:localhost:5000 root@your_registry.com
這條命令建立了一條從registry服務(wù)器(前面執(zhí)行docker run命令的時候我們見過它)的5000號端口到本機(jī)的5000號端口之間的 ssh 管道連接。
如果你現(xiàn)在用瀏覽器訪問 ,將會看到下面這個非常簡短的回復(fù)。
{}
這個意味著registry工作正常。你還可以通過登錄 http://localhost:5000/v1/search 來查看registry內(nèi)容,內(nèi)容相似:
{ "num_results": 2, "query": "", "results": [ { "description": "", "name": "username/first-repo" }, { "description": "", "name": "username/second-repo" } ] }
創(chuàng)建一個鏡像
我們現(xiàn)在創(chuàng)建一個非常簡單的docker鏡像,來檢驗(yàn)我們新弄好的registry。在我們的本機(jī)上,用如下內(nèi)容創(chuàng)建一個dockerfile(這里只有一點(diǎn)代碼,在下一篇文章里我將會展示給你如何將一個rails應(yīng)用綁定進(jìn)docker容器中。):
# ruby 2.2.0 的基礎(chǔ)鏡像 from ruby:2.2.0 maintainer michelangelo chasseur <michelangelo.chasseur@touchwa.re>
并創(chuàng)建它:
docker build -t localhost:5000/username/repo-name .
localhost:5000
這個部分非常重要:docker鏡像名的最前面一個部分將告知docker push
命令我們將要把我們的鏡像推送到哪里。在我們這個例子當(dāng)中,因?yàn)槲覀円ㄟ^ssh管道連接遠(yuǎn)程的私有registry,localhost:5000精確地指向了我們的registry。
如果一切順利,當(dāng)命令執(zhí)行完成返回后,你可以輸入docker images
命令來列出新近創(chuàng)建的鏡像。執(zhí)行它看看會出現(xiàn)什么現(xiàn)象?
推送到倉庫
接下來是更好玩的部分。實(shí)現(xiàn)我所描述的東西著實(shí)花了我一點(diǎn)時間,所以如果你第一次讀的話就耐心一點(diǎn)吧,跟著我一起操作。我知道接下來的東西會非常復(fù)雜(如果你不自動化這個過程就一定會這樣),但是我保證到最后你一定都能明白。在下一篇文章里我將會使用到一大波shell腳本和rake任務(wù),通過它們實(shí)現(xiàn)自動化并且用簡單的命令實(shí)現(xiàn)部署rails應(yīng)用。
你在終端上運(yùn)行的docker命令實(shí)際上都是使用boot2docker虛擬機(jī)來運(yùn)行容器及各種東西。所以當(dāng)你執(zhí)行像docker push some_repo
這樣的命令時,是boot2docker虛擬機(jī)在與registry交互,而不是我們自己的機(jī)器。
接下來是一個非常重要的點(diǎn):為了將docker鏡像推送到遠(yuǎn)端的私有倉庫,ssh管道需要在boot2docker虛擬機(jī)上配置好,而不是在你的本地機(jī)器上配置。
有許多種方法實(shí)現(xiàn)它。我給你展示最簡短的一種(可能不是最容易理解的,但是能夠幫助你實(shí)現(xiàn)自動化)
在這之前,我們需要對 ssh 做最后一點(diǎn)工作。
設(shè)置 ssh
讓我們把boot2docker 的 ssh key添加到遠(yuǎn)端服務(wù)器的“已知主機(jī)”里面。我們可以使用ssh-copy-id工具完成,通過下面的命令就可以安裝上它了:
brew install ssh-copy-id
然后運(yùn)行:
ssh-copy-id -i /users/username/.ssh/id_boot2docker root@your-registry.com
用你ssh key的真實(shí)路徑代替/users/username/.ssh/id_boot2docker。
這樣做能夠讓我們免密碼登錄ssh。
現(xiàn)在我們來測試以下:
boot2docker ssh "ssh -o 'stricthostkeychecking no' -i /users/michelangelo/.ssh/id_boot2docker -n -l 5000:localhost:5000 root@registry.touchwa.re &" &
分開闡述:
boot2docker ssh允許你以參數(shù)的形式傳遞給boot2docker虛擬機(jī)一條執(zhí)行的命令;
最后面那個&表明這條命令將在后臺執(zhí)行;
ssh -o 'stricthostkeychecking no' -i /users/michelangelo/.ssh/id_boot2docker -n -l 5000:localhost:5000 root@registry.touchwa.re &是boot2docker虛擬機(jī)實(shí)際運(yùn)行的命令;
-o 'stricthostkeychecking no'——不提示安全問題;
-i /users/michelangelo/.ssh/id_boot2docker指出虛擬機(jī)使用哪個ssh key來進(jìn)行身份驗(yàn)證。(注意這里的key應(yīng)該是你前面添加到遠(yuǎn)程倉庫的那個)
最后我們將打開一條端口5000映射到localhost:5000的ssh通道。
從其他服務(wù)器上拉取
你現(xiàn)在將可以通過下面的簡單命令將你的鏡像推送到遠(yuǎn)端倉庫:
復(fù)制代碼 代碼如下:
docker push localhost:5000/username/repo_name
關(guān)于“如何搭建一個私有的Docker registry”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。