通常情况下我们可以使用Docker Hub作为docker image的仓库,但是有些场景下,我们希望能够有本地的仓库。比如:
-
代码中含有保密的信息,比如环境的账号,密码等等;
-
代码本身作为公司的资产,不能对外公开,否则有法律风险。
在创建本地仓库之前,请确保已经在目的机器上安装了Docker。这里我们使用docker容器运行registry镜像的方式,来创建registry。
一般情况下安装的docker已经自带了registry镜像,如果没有可以从docker hub上获取。
环境准备
关闭防火墙
systemctl stop firewalld.servicesystemctl disable firewalld.service关闭selinux
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinuxsetenforce 0搭建私有仓库
下载registry镜像
首先,在192.168.0.200机器上下载registry镜像
docker pull registry基于私有仓库镜像运行容器
下载完之后我们通过该镜像启动一个容器
docker run -d -p 5000:5000 localregistry registry其中 localregistry表示此容器的名称,registry表示了镜像本身。可以运行docker ps查看结果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESafae402eb9ae registry "/entrypoint.sh /e..." 4 hours ago Up 20 minutes 0.0.0.0:5000->5000/tcp localregistry默认情况下,会将仓库存放于容器的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器的/tmp/registry下,如下:
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry --name localregistry registry自动启动仓库
如果想让registry作为永久的可用仓库,应该在Docker machine重启或退出之后,设置registry仍然能够自动重启或保持使用状态。可以使用—restart=always达到此目的。
docker run -d -p 5000:5000 --restart=always -v /opt/data/registry:/tmp/registry --name localregistry registry访问私有仓库
网上都用这个curl http://127.0.0.1:5000/v1/search,但是报404 page not found,后查证是v1版本的api查看方式,我们现在的版本是v2,所以用如下方法查看:
curl -X GET http://127.0.0.1:5000/v2/_catalog{"repositories":[]} #私有仓库为空,没有提交新镜像到仓库中从Docker Hub获取nginx镜像
docker pull nginx:alpine接下来我们尝试将上面的 nginx:alpine 上传到本地的 registry 服务器, 首先为这个镜像定义一个新的标签:
docker tag nginx:alpine 127.0.0.1:5000/nginx:alpine然后通过docker images查看,确认是否存在这个标签,输出如下:
REPOSITORY TAG IMAGE ID CREATED SIZE127.0.0.1:5000/nginx alpine 0ae090dba3ab 3 months ago 54.3 MBnginx alpine 0ae090dba3ab 3 months ago 54.3 MB现在可以上传这个镜像:
docker push 127.0.0.1:5000/nginx:alpine输出如下 :
The push refers to a repository [127.0.0.1:5000/nginx]4a8d9a67e458: Pushedc0ab80890b7f: Pushedd4930e247b49: Pushed9f8566ee5135: Pushedalpine: digest: sha256:bf63c02f35f7f8d0a95af4904d38ea17ef3f0c86e6b95d716200bdd9963f5ec5 size: 1154现在来浏览 http://127.0.0.1:5000/v2/_catalog , 将会看到这样的结果:
{"repositories":["nginx"]}表示已经有了 nginx 这个镜像, 如果要看这个镜像有什么版本, 需要输入地址 http://127.0.0.1:5000/v2/nginx/tags/list , 结果如下:
{"name":"nginx","tags":["alpine"]}如果要在其它装了 docker 的电脑上获取这个镜像, 或者下载局域网其它 registry 服务器上的镜像, 有两个选择: