部署私用仓库
有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。
如何使用本地仓库。
docker-registry
是官方提供的工具,可以用于构建私有的镜像仓库。
基于docker-registy
v2.x版本
API https://docs.docker.com/registry/spec/api/
获取
1 | docker search registry --limit 1
2 | docker pull registry
以容器方式运行
1 | docker run -d -p 5000:5000 --restart=always \
--name registry-test registry
默认情况下,仓库会被创建在容器的 /var/lib/registry
目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径。例如下面的例子将上传的镜像放到本地的 /opt/data/registry
目录。
1 | docker run -d \
--restart=always \
-p 5000:5000 \
--name registry-test \
-v /opt/data/registry:/var/lib/registry \
registry
在私有仓库上传、搜索、下载镜像
仓库建好后,就可以使用 docker push
命令上传本地仓库的镜像到私有仓库了。
注意:
首先需要指定需要被推送镜像的标签为 私有仓库地址:port/镜像名
的格式
更改标签语法:
示例:
1 | docker image ls alpine
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 7731472c3f2a 12 days ago 5.61MB
2 | docker tag alpine:latest 127.0.0.1:5000/alpine:3.7
推送
1 | docker push 127.0.0.1:5000/alpine:3.7
The push refers to repository [127.0.0.1:5000/alpine]
cd7100a72410: Pushed
...
使用curl
命令查看私有仓库的镜像
1 | curl 127.0.0.1:5000/v2/_catalog
{"repositories":["alpine"]}
删除本地镜像的127.0.0.1:5000/alpine:3.7
1 | docker rmi 127.0.0.1:5000/alpine:3.7
2 | docker image ls | grep alpine
从私有仓库拉取刚才推送的镜像
1 | docker pull 127.0.0.1:5000/alpine:3.7
3.7: Pulling from alpine
Digest: sha256:8c03bb07a531c53ad7d0f6e7041b64d81f99c6e493cb39abba56d956b40eacbc
Status: Downloaded newer image for 127.0.0.1:5000/alpine:3.7
2 | docker image ls | grep alpine
127.0.0.1:5000/alpine 3.7 3fd9065eaf02 4 months ago 4.15MB
alpine 3.7 3fd9065eaf02 4 months ago 4.15MB
以上这种方法是在本地自己上传到私有仓库,然后本地镜像,再去拉取刚才删除的镜像
配置可以访问远程私有仓库的Docker
主机
注意:是在访问远程仓库的 Docker
机器上配置(而不是私有仓库机器上)。
假如现在私用仓库部署在主机192.168.64.149
上。
在其他需要访问此仓库的Docker
机器上配置如下内容
我的这个机器的主机ip是 192.168.64.148
对于Centos7.x
系统,在/etc/docker/daemon.json中写入如下内容:
1 | { "insecure-registries": [ "10.18.42.174:5000" ]}
在/lib/systemd/system/docker.service
添加如下内容
1 | EnvironmentFile=-/etc/docker/daemon.json
重新启动Docker
1 | sysemctl daemon-reload
2 | systemctl restart docker
修改tag
标签
1 | docker tag nginx:alpine 192.168.64.149:5000/hello
2 | docker push 192.168.64.149:5000/hello # 给私有仓库上传镜像
3 | docker pull 192.168.64.149:5000/hello # 拉取私有仓库的镜像