Docker Registry

举报
黄生 发表于 2023/01/28 21:18:51 2023/01/28
【摘要】 Docker默认的注册中心是官方的Docker Hub,它提供大规模的公有仓库(存放镜像)注册中心Registry和仓库Repository还是有差别,一个Registry里通常有很多Repository。这里的Repository,其实就是一个Image(可以有多个版本,用tag标记),并不是通常理解中的仓库这种混淆概念的做法,实在是不好。要使用docker官方的镜像/加速器,在/etc/...

Docker默认的注册中心是官方的Docker Hub,它提供大规模的公有仓库(存放镜像)
注册中心Registry和仓库Repository还是有差别,一个Registry里通常有很多Repository。
这里的Repository,其实就是一个Image(可以有多个版本,用tag标记),并不是通常理解中的仓库
这种混淆概念的做法,实在是不好。
要使用docker官方的镜像/加速器,在/etc/docker/daemon.json里修改mirros,比如改成这样:

{
    "registry-mirrors": [ "https://08e8a7ac66000f3d0f6ec00af19568e0.mirror.swr.myhuaweicloud.com" ]
}

基于某些需求(比如封闭网络,完全可控等),可以建立自己的注册中心。
docker registry软件已经开源,拉取即可。

docker pull registry #(docker.io/library/registry:latest)

docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
registry      latest    81c944c2288b   2 months ago    24.1MB

#基于镜像创建和启动容器:
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
#-p是宿主机5000映射到容器的5000端口;-v将宿主机目录/opt/registry绑定到容器中的/var/lib/registry(注册中心存放镜像文件的默认目录)。

docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS         PORTS                                       NAMES
a862de9f4eb7   registry   "/entrypoint.sh /etc…"   10 seconds ago   Up 9 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

curl http://localhost:5000/v2/_catalog
{"repositories":[]}
说明服务正常、没有镜像。

打tag,并推送到自己的注册中心:
docker tag hello-world 127.0.0.1:5000/hw:v1
#docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
#Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

docker push localhost:5000/hw:v1
The push refers to repository [localhost:5000/hw]
An image does not exist locally with the tag: localhost:5000/hw

docker push 127.0.0.1:5000/hw:v1
The push refers to repository [127.0.0.1:5000/hw]
e07ee1baac5f: Pushed
v1: digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4 size: 525
[root@ecs-d589 ~]# curl http://localhost:5000/v2/_catalog
{"repositories":["hw"]}

拉取:
docker pull 127.0.0.1:5000/hw:v1
v1: Pulling from hw
Digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4
Status: Image is up to date for 127.0.0.1:5000/hw:v1
127.0.0.1:5000/hw:v1

127.0.0.1:5000/hw   v1        feb5d9fea6a5   16 months ago   13.3kB
hello-world         latest    feb5d9fea6a5   16 months ago   13.3kB

进入到容器的sh,可以看到目录
/var/lib/registry/docker/registry/v2/repositories/hw
当然宿主机映射的目录/opt/registry下也可以看到。

其他,如果用网卡IP或域名拉取镜像(用127.0.0.1或localhost没问题):

docker pull 10.0.0.127:5000/hw:v1
Error response from daemon: Get "https://10.0.0.127:5000/v2/": http: server gave HTTP response to HTTPS client

这时需要修改客户端的/etc/docker/daemon.json,添加

{"insecure-registries":["yourip:5000"]}

然后system restart docker,客户端不使用HTTPS,就可以了

贴一下容器的CMD:

"/entrypoint.sh /etc/docker/registry/config.yml"

/ # cat /etc/docker/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
	
/ # cat entrypoint.sh
#!/bin/sh

set -e

case "$1" in
    *.yaml|*.yml) set -- registry serve "$@" ;;
    serve|garbage-collect|help|-*) set -- registry "$@" ;;
esac

exec "$@"
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。