Docker之倉庫以及私有倉庫的搭建(五)
倉庫
倉庫(Repository)是集中存放映象的地方。 一個容易與之混淆的概念是註冊伺服器(Registry)。實際上註冊伺服器是存放倉庫的具體伺服器,每個伺服器上可以有多個倉庫,而每個倉庫下面可以有多個映象。
Docker Hub
目前Docker官方維護了一個公共倉庫https://hub.docker.com,其中已經包括15000多個的映象。大部分需求都可以通過在Docker Hub中直接下載映象來實現。
登入 可以通過執行docker login命令來輸入使用者名稱,密碼和郵箱來完成註冊和登入。註冊成功後,本地使用者目錄的。dockercfg中將儲存使用者的認證資訊。
基本操作 使用者無需登入即可通過docker search命令來查詢官方倉庫中的映象,並利用docker pull命令來將它下載到本地。 使用者也可以在登入後通過docker push命令來將本地映象推送到Docker Hub
建立和使用私有倉庫
使用registry映象建立私有倉庫 安裝Docker後,可以通過官方提供的registry映象來簡單搭建一套本地私有倉庫環境:
$ sudo docker run -d -p 5000:5000 registry
這將自動下載並啟動一個registry容器,建立本地的私有倉庫服務。 預設情況下,會將倉庫建立在容器的/tmp/registry目錄下。可以通過-v引數來將映象檔案存放在本地的指定路徑上。 例如下面的例子將上傳的映象放到/opt/data/registry目錄:
$ sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
此時,在本地將啟動一個私有倉庫服務,監聽埠為5000.
管理私有倉庫映象 首先檢視你係統的ip地址192.168.43.216 使用docker tag命令將這個要上傳的映象標記為192.168.43.216/test $ sudo docker tag ubuntu:latest 192.168.43.216/test
使用docker push上傳標記的映象: $ sudo docker push 192.168.43.216/test
這兒會出現錯誤:
The push refers to a repository [192.168.43.216:5000/registry] Get https://192.168.43.216:5000/v1/_ping: http: server gave HTTP response to HTTPS client
這個問題可能是由於客戶端採用https,docker registry未採用https服務所致。一種處理方式是把客戶對地址“192.168.43.216:5000”請求改為http。
目前很多文章都是通過修改docker的配置檔案“etc/systemconfig/docker",重啟docker來解決這個問題。但發現docker1.12.3版本並無此檔案,根據網上建立此檔案,並填入相應內容,重啟docker無效果,仍然報此錯誤。
解決方法: 在”/etc/docker/“目錄下,建立”daemon.json“檔案。在檔案中寫入:
{ "insecure-registries":["192.168.43.216:5000"] }
儲存退出後,重啟docker。問題解決 重啟docker命令是:
$ sudo systemctl restart docker
繼續後面步驟,我們可以用curl檢視倉庫192.168.43.216:5000中的映象:
現在我們可以到任意一臺能訪問到192.168.43.216地址的機器去下載這個映象了:
$ sudo docker pull 192.168.43.216/test