Docker---建立registry私有倉庫
Docker Hub作為Docker預設官方公共映象,如果想要自己搭建私有映象殘酷,官方也提供Registry映象,使得我們搭建私有倉庫變得非常簡單。
所謂私有倉庫,也就是在本地(區域網)搭建的一個類似公共倉庫的東西,搭建好之後,我們可以將映象提交到私有倉庫中。這樣我們既能使用 Docker 來執行我們的專案映象,也避免了商業專案暴露出去的風險。
倉庫的原理:Docker模型的核心部分是有效的利用分層映象的機制,映象可以通過分層來進行繼承,基於基礎映象,可以製作各種具體應用的映象。不同的Docker容器可以共享一些基礎的檔案系統層,同時再加上自己獨有的改動層,大大提高了儲存的效率。由於最終映象是以壓縮包的方式靜態儲存在伺服器端,這種儲存適用於物件儲存
使用docker pull 獲取映象的過程
1.1 搭建映象倉庫
首先,下載Registry映象並啟動
docker pull registry
1、建立本地映象倉庫對映目錄
mkdir -p /opt/data/registry #在宿主機建立容器內的資料對映掛載目錄
2、啟動本地映象倉庫(registry容器)
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry --name private_registry registry
-d : 讓容器可以後臺執行
-p :指定對映埠(前者是宿主機的埠號,後者是容器的埠號)
-v :資料掛載(前者是宿主機的目錄,後者是容器的目錄)
--name: 為執行的容器命名
最後,在客戶端檢視映象倉庫中的所有映象
curl http://your-server-ip:5000/v2/_catalog
1.2 上傳映象
首先,為了讓客戶端伺服器能夠快速地訪問剛剛在服務端搭建的映象倉庫(預設情況下是需要配置HTTPS證書的),這裡簡單在客戶端配置一下私有倉庫的可信任設定讓我們可以通過HTTP直接訪問:# vim /etc/docker/daemon.json
加上下面這一句,這裡的"your-server-ip"請換為你的伺服器的外網IP地址:
{ "insecure-registries" : [ "your-server-ip:5000" ] }
PS:如果不設定可信任源,又沒有配置HTTPS證書,那麼會遇到這個錯誤:error: Get https://ip:port/v1/_ping: http: server gave HTTP response to HTTPS client.
為了使得配置生效,重新啟動docker服務:#systemctl restart docker
其次,為要上傳的映象打Tag
docker tag your-image-name:tagname your-server-ip:5000/your-image-name:tagname
最後,開始正式上傳映象到服務端映象倉庫
docker push your-registry-server-ip:5000/your-image-name:tagname
這時我們可以再次通過訪問API驗證映象倉庫的內容:
1.3 下載映象
下載映象就很簡單了,使用pull命令即可:
docker pull your-server-ip:5000/your-image-name:tagname
示例:
如果想要知道要下載的映象都有哪些tag(或版本),可以通過下面這個api來獲取:
curl http://your-server-ip:5000/v2/your-image-name/tags/list
個人感覺:對於個人開發者或開源社群而言,docker hub主要提供的是類似於github的共享公共倉庫(當然docker hub也有提供私有倉庫)。對於小團隊而言,官方提供的Registry專案可以幫助小團隊快速地構建起自己的映象倉庫把精力更多放在快速迭代上面。而對於中大規模的團隊,Harbor的企業級特性更加適合此型別的團隊使用。