倉庫
倉庫(Repository)是集中存放鏡像的地方。一個容易與之混淆的概念是注冊服務器(Registry)。實際上注冊服務器是存放倉庫的具體服務器,每個服務器上可以有多個倉庫,而每個倉庫下面有多個鏡像。由此可以理解為倉庫是一個具體的項目或目錄。例如對于倉庫地址dl.dockerpool.com/ubuntu來說,dl.dockerpool.com是注冊服務器地址,ubuntu是倉庫名。
倉庫又分為公共倉庫和私有倉庫,本章介紹如何使用DockerHub官方倉庫進行登錄、下載等操作,以及使用DockerPool社區(qū)提供的倉庫下載鏡像,最后還介紹了創(chuàng)建和使用私有倉庫。
Docker Hub
目前docker官方維護了一個公共倉庫https://hub.docker.com,大部分需求都可以通過在Docker Hub中直接下載鏡像來實現(xiàn)。
登錄
可以通過docker login命令來輸入用戶名、密碼和郵箱來完成注冊和登錄,注冊成功后,本地用戶目錄的.dockercfg中將保存用戶的認證信息。

基本操作
用戶無需登錄即可通過docker search 命令來查找官方倉庫中的鏡像,并通過docker pull命令來將他下載至本地。
例如以centos為關(guān)鍵詞進行搜索:
docker search centos

根據(jù)是否為官方提供,可將這些鏡像資源分為兩類。一種是類似centos這樣的基礎(chǔ)鏡像,稱為基礎(chǔ)或根鏡像。這些鏡像由Docker公司創(chuàng)建、驗證、支持和提供。這樣的鏡像往往使用單個單詞作為名字。
還有一種類型,比如ansible/centos7-ansible鏡像,它是由DockerHub的用戶ansible創(chuàng)建并維護的,帶有用戶名稱為前綴,表明是某用戶的某倉庫。
另外,在查找的時候通過-s N參數(shù)可以指定僅顯示評價為N星以上的鏡像。
自動創(chuàng)建
自動創(chuàng)建(Automated Builds)功能對于需要經(jīng)常升級鏡像內(nèi)程序來說十分方便,有時候,用戶創(chuàng)建了鏡像,安裝了某軟件,運行了自己的代碼工程等。如果軟件發(fā)布新版本則需要手動更新鏡像。
而自動創(chuàng)建功能使得用戶通過Docker Hub指定跟蹤一個目標網(wǎng)站(目前支持GitHub或BitBucket)上的項目,一旦發(fā)現(xiàn)新的提交,則自動執(zhí)行創(chuàng)建。
包括如下步驟:
- 創(chuàng)建并登陸Docker Hub、目標網(wǎng)站(GitHub),在目標網(wǎng)站中連接賬戶到Docker Hub
- 在Docker Hub中配置一個自動創(chuàng)建
- 選取一個目標網(wǎng)站(GitHub)中的項目(需要含Dockerfile)和分支
- 指定Dockerfile的位置,并提交創(chuàng)建
之后,可以在Docker Hub的“自動創(chuàng)建”頁面中跟蹤每次創(chuàng)建的狀態(tài)。
創(chuàng)建和使用私有倉庫
使用registry鏡像創(chuàng)建私有倉庫
安裝Docker后,可以通過官方提供的registry鏡像來簡單搭建一套本地私有倉庫環(huán)境:
docker run -d -p 5000:5000 registry
這將自動下載并啟動一個registry容器,創(chuàng)建本地的私有倉庫服務。默認情況下,會將倉庫創(chuàng)建在容器的/tep/registry目錄下,可以通過-v參數(shù)來將鏡像文件存放在本地的指定路徑上
例如下面的例子,將上傳的鏡像放到/opt/data/registry目錄:
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
此時,在本地將啟動一個私有倉庫服務,監(jiān)聽端口為5000。
管理私有倉庫鏡像
首先搭建私有倉庫,地址為:10.0.2.2:5000,然后在虛擬機(ubuntu14.04)里測試上傳和下載鏡像。使用docker tag命令將這個鏡像標記為10.0.2.2/test(格式為docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME:[:TAG]):
docker tag ubuntu:14.04 10.0.2.2:5000
使用docker push上傳標記的鏡像:
docker push 10.0.2.2:5000/test
使用curl查看倉庫10.0.2.2:5000中的鏡像:
curl http://10.0.2.2:5000/v1/search
若看到{"description":"","name":"library/test"},表明鏡像已經(jīng)上傳成功了?,F(xiàn)在可以從任意一臺能訪問10.0.2.2地址的機器去下載這個鏡像了:
docker pull 10.0.2.2:5000/test