Docker的倉庫是DockerHub,類似於GitHub。GitHub有一個開源的軟件叫GitLab。Docker也有一個開源軟件Docker registry。
創建私有倉庫
在私有倉庫主機上下載registry鏡像。
docker pull registry
默認情況下,倉庫會將鏡像存放在/var/lib/registry
目錄下,這裏指定本地一個目錄掛載到容器內的/var/lib/registry
下,如下:
sudo mkdir -pv /opt/data/registry
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
此時就會啓動一個registry容器,地址爲http://<ip>:5000
。
測試一下
接下來我們要做的就是把本地的一個鏡像push到私有倉庫中去,首先在本機上pull一個比較小的鏡像來做測試(此處使用的是busybox)。
docker pull busybox
接下來修改鏡像的tag。
docker tag busybox 127.0.0.1:5000/busybox
接下來將打了tag的鏡像上傳到私有倉庫中。
docker push 127.0.0.1:5000/busybox
可以看到鏡像已經push到私有倉庫中去了。
接下來,我們刪除本地鏡像,然後從私有倉庫pull下來該鏡像。
docker pull 127.0.0.1/busybox
由此可見,Docker鏡像的本地倉庫已經搭建成功,並且可以正常使用了。
如何修改默認的鏡像倉庫
執行docker pull image_NAME
默認都是去官方來拉取。本地已建registry,就是每次得以這種格式拉取:docker pull IP:PORT/image_NAME
,很不方便。利用下邊的方法可以實現首先從本地倉庫中查詢,如果本地倉庫中沒有再去官方鏡像源拉取。
修改配置文件/etc/default/docker
。增加如下內容:
DOCKER_OPTS="--insecure-registry 127.0.0.1:5000"
修改完成後,重啓docker服務即可。
service docker restart
注意:
因爲Docker從1.3.X以後,與docker registry交互默認使用的是https,然而此處搭建的私有倉庫只提供http服務,所以當與私有倉庫交互時會報上面的錯誤。爲了解決這個問題需要在啓動docker server時增加參數爲默認使用http訪問,修改docker啓動的配置文件。