# Docker跑官网镜像仓库Registry2
# 什么是 Docker Registry
镜像仓库 (Docker Registry) 负责存储、管理和分发镜像, 并且提供了登录认证能力, 建立了仓库的索引。镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一 个或多个镜像, 镜像通过镜像名称和标签 (Tag)来区分
- 镜像仓库(Registry):要从哪一个镜像仓库拉取镜像, 通常通过 DNS 或 IP 地址来确定一个镜像仓库如 hub.docker.com;一个 Registry 中可以存在多个Repository·Repository 可分为“顶层仓库”和“用户仓库”;·用户仓库名称格式为“用户名/仓库名”·每个仓库可以包含多个 Tag(标签), 每个标签对应一个镜像
- Repository: ·由某特定的 docker 镜像的所有迭代版本组成的镜像仓库
- 镜像名称(name) +标签(tag):如 nginx:latest
- 认证能力:提供用户注册, 登录、登出能力
- 索引:提供镜像的索引信息, 方便检索
- 一个容器镜像包含了两个部分, 一个是元数据, 其实就是由 dockerfile 构建出来的描述文件, 这个描述文件会说这个容器镜像有多少层, 每一层里面有什么内容, 它的checksum 这些信息都会记录下来, 还有最终的可执行文件在哪就是在存储数据里面, 就是在一个一个的 blob 里面, 真正占有空间的就是这些 blob
# 拉取镜像
docker pull registry:2.8.3
1
# 创建用户密码
yum install -y httpd-tools
htpasswd -Bbn admin WUYPF5pB2nDGKsauLJ67 > ./htpasswd
mv ./htpasswd /root/myapps/registry/auth/
1
2
3
2
3
# 运行容器
docker run --detach \
--name registry \
--volume /root/myapps/registry/data/:/data \
--volume /root/myapps/registry/auth/:/auth/ \
--volume /root/myapps/registry/registry/:/var/lib/registry/ \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Resistry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-p 5000:5000 \
--restart always \
--privileged=true \
registry:2.8.3
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 常用接口(GET)
# 查看私服上有哪些镜像(免密)
http://127.0.0.1:5000/v2/_catalog
# 查看私服上有哪些镜像(登录校验)
http://127.0.0.1:5000/v2/_catalog -u admin
# 查看image_name下的tag列表
127.0.0.1:5000/v2/image_name/tags/list
1
2
3
4
5
6
2
3
4
5
6
# 修改配置文件以支持 Docker 受信私有仓库
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://j6dalcd1.mirror.aliyuncs.com",
"https://registry.docker-cn.com"
],
"insecure-registries":[
"127.0.0.1:5000",
"registry.odboy.cn"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 常用命令
# 一般不建议使用明文密码
docker login -u 用户名 -p 密码 127.0.0.1:5000
# 不输入密码, 回车后, 使用交互式输入密码(输入的密码不会显示)
docker login -u 用户名 -p 127.0.0.1:5000
# 不输入密码和用户名, 回车后, 使用交互式输入用户名和密码(输入的密码不会显示)
docker login 127.0.0.1:5000
# 给镜像打上 Docker Registry 的仓库标签
docker tag 镜像名称:镜像tag 127.0.0.1:5000/镜像名称:镜像tag
# 将新打标签的镜像上传镜像到仓库
docker push 127.0.0.1:5000/镜像名称:镜像tag
# 拉取镜像
docker pull 127.0.0.1:5000/镜像名称:镜像tag
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14