1.在本地创建一个目录,如registry,用来当本地仓库,registry下创建一个config.yml文件,是仓库的配置信息
version: 0.1
log:
level: debug
formatter: text
fields:
service: registry
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /tmp/registry
http:
addr: :6000
headers:
X-Content-Type-Options: [nosniff]
2.拉docker的registry镜像
// docker pull <镜像名称>:<标签>
// 标签如果是latest可以省略
docker pull registry
// 可以查看一下镜像,看是否拉取成功
docker images
3.registry镜像启动容器
// 启动,本地仓库路径,config.yml文件路径,换成自己的
docker run -d --restart=always --name registry -v /Users/feifei/devlop/registry:/tmp/registry -v /Users/feifei/devlop/registry/config.yml:/etc/docker/registry/config.yml -p 6000:6000 registry
// 查看是否启动成功,容器status是up则说明OK
docker ps
-d:以后台模式运行
--name:指定容器的名称为registry
-v:数据卷,这里将本地仓库路径`/Users/feifei/devlop/registry`与容器`/tmp/registry`映射
`/Users/feifei/devlop/registry/config.yml`与`/etc/docker/registry/config.yml`映射
-p:本机6000与容器6000端口映射
4.往本地仓库推送镜像,以ubuntu举例
// 如果没有ubuntu镜像可以先pull
docker pull ubuntu
// 给镜像打tag,IP地址这里,如果registry只启动了一个容器,端口可以不加
// docker tag <镜像名称>:<标签> <IP地址>/<镜像名称>:<标签>
docker tag ubuntu:latest 192.168.224.88:6000/ubuntu:1.2
// 推送
// docker push <IP地址>/<镜像名称>:<标签>
docker push 192.168.224.88:6000/ubuntu:1.2
// 查看本地仓库是否有镜像,成功应该返回{"repositories":["ubuntu"]}
curl -XGET http://192.168.224.88:6000/v2/_catalog
// 也可以直接在自己本地仓库看有没有多文件
5.从本地仓库拉取镜像
// 可以把打完tag的ubuntu镜像都删除,用来测试拉取,IMAGE ID换成自己的
// docker rmi -f <IMAGE ID>
docker rmi -f 67932e906013
// 拉取
// docker pull <IP地址>/<镜像名称>:<标签>
docker pull 192.168.224.88:6000/ubuntu:1.2
6.遇到的问题
6.1 push或者pull报错
现象:
Error response from daemon: Get "https://192.168.224.88:6000/v2/": http: server gave HTTP response to HTTPS client原因:docker私有仓库用https,但是push与pull都用的http
-
解决办法:用
insecure-registries
指定可以不使用 HTTPS 连接的 Docker 私有仓库地址。在docker engine中添加"insecure-registries": ["192.168.12.246:6000"]
,然后apply,担心不生效可以直接关闭docker再重启
image.png
6.2 docker login 192.168.224.88:6000报错
- 现象:
Error response from daemon: login attempt to http://192.168.224.88:6000/v2/ failed with status: 401 Unauthorized - 原因与解决办法同上