Docker Registry
【摘要】 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)