天天看點

Docker 私有倉庫的搭建

       Docker在2015年推出了distribution項目,即Docker Registry 2。相比于old registry,Registry 2使用Go實作,在安全性、性能方面均有大幅改進。Registry設計了全新的Rest API,并且在image存儲格式等方面不再相容于old Registry。去年8月份,docker官方hub使用Registriy 2.1替代了原先的old Registry。如果你要與Registry2互動,你的Docker版本至少要是Docker 1.6。docker-Registry 具有以下優點

1、節省網絡帶寬,針對于每個鏡像不用每個人都去中央倉庫上面去下載下傳,隻需要從私有倉庫中下載下傳即可;

2、提供鏡像資源利用,針對于公司内部使用的鏡像,推送到本地的私有倉庫中,以供公司内部相關人員使用。

環境準備,兩台Centos7 機器

192.168.10.62  docker 版本1.12.6 用作開發機器

192.168.10.61  docker 版本 1.12.6 用作私有倉庫

搭建私有倉庫

下載下傳鏡像

docker pull registry:2.3

啟動鏡像

mkdir –p /opt/data/registry

docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry 

指定本地一個目錄/opt/data/registry挂載到容器内的/var/lib/registry下

docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

9819f1221756        registry            "/entrypoint.sh /etc/"   3 hours ago         Up 36 minutes       0.0.0.0:5000->5000/tcp   amazing_khorana

測試

在 192.168.10.62 開發機器上面送出鏡像

從docker hub 上擷取鏡像consul

docker pull consul:1.0.0

更改鏡像tag

docker tag docker.io/consul:1.0.0 192.168.10.61:5000/consul

送出鏡像至私有倉庫

docker push 192.168.10.61:5000/consul

報錯

The push refers to a repository [192.168.10.61:5000/consul]

Get https://192.168.10.61:5000/v1/_ping: http: server gave HTTP response to HTTPS client

因為Docker從1.3.X之後,與docker registry互動預設使用的是https,然而此處搭建的私有倉庫隻提供http服務,是以當與私有倉庫互動時就會報上面的錯誤。為了解決這個問題需要在啟動docker server時增加啟動參數為預設使用http通路。

解決方法:修改docker 啟動配置檔案

CentOS:編輯 /etc/sysconfig/docker 檔案,添加如下行:

other_args="--insecure-registry 192.168.10.61:5000"

重新開機 Docker daemon:

systemctl restart docker

Ubuntu:編輯 /etc/default/docker 檔案,添加如下行

DOCKER_OPTS="--insecure-registry 192.168.10.61:5000"

sudo systemctl restart docker

再次送出

删除本地鏡像

docker rmi 192.168.10.61:5000/consul:latest

從私有倉庫拉取鏡像

docker pull 192.168.10.61:5000/consul

docker 私有倉庫檢視已經送出的鏡像

docker search 192.168.10.61:5000/consul

Error response from daemon: Unexpected status code 404

奇怪從docker 開發機器已經正常送出,在開發機本地删除鏡像,也可以從私有倉庫擷取,為什麼查不到呢

通過各種查詢資料,使用 registry v2 的 api 可以檢視已經送出的docker 鏡像

{"repositories":["busybox","consul","nginx"]}

本文轉自 水滴石川1 51CTO部落格,原文連結:http://blog.51cto.com/sdsca/1974261,如需轉載請自行聯系原作者