一般状况下咱们可使用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