一般狀況下咱們可使用https://hub.docker.com/做爲docker image的倉庫,可是有些場景下,咱們但願可以有本地的倉庫。好比:
1,代碼中含有保密的信息,好比環境的帳號,密碼等等;
2,代碼自己做爲公司的資產,不能對外公開,不然有法律風險。docker
在建立本地倉庫以前,請確保已經在目的機器上安裝了Docker。這裏咱們使用docker容器運行registry鏡像的方式,來建立registry。shell
通常狀況下安裝的docker已經自帶了registry鏡像,若是沒有能夠從docker hub上獲取。ubuntu
docker@default:~$ run -d -p 5000:5000 localregistry registry
其中 localregistry表示此容器的名稱,registry表示了鏡像自己。能夠運行docker ps查看結果:tcp
docker@default:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES afae402eb9ae registry "/entrypoint.sh /e..." 4 hours ago Up 20 minutes 0.0.0.0:5000->5000/tcp localregistry
若是想讓registry做爲永久的可用倉庫,應該在Docker machine重啓或退出以後,設置registry仍然可以自動重啓或保持使用狀態。可使用--restart=always達到此目的。url
docker@default:~$ docker run -d -p 5000:5000 --restart=always --name localregistry registry
當Docker從registry獲取image,或上傳image到registry時,它會判斷pull或push的uri的第一部分是否包含‘.’或‘:’來判斷,是倉庫名稱仍是用戶名。
以localhost爲例,若是url中只包含localhost,而沒有‘.’或 :5000, Docker會認爲localhost是用戶名,效果就如同localhost/ubuntu或wxqsly/snapshot同樣,此時Docker會請求默認的Docker Hub倉庫。不然Docker會認爲localhost表明了主機名,而且會請求到你指定的倉庫。rest
docker@default:~$ docker pull ubuntu:16.04
$ docker tag ubuntu:16.04 localhost:5000/my-ubuntu $ docker push localhost:5000/my-ubuntu
https://docs.docker.com/regis...
https://blog.docker.com/2013/...
https://rominirani.com/docker...code