本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第四篇 Docker Tutorial Series, Part 4: Registry & Workflows 。
该系列所有文章将参考其他学习资料翻译,也会加入自己的学习作为部分注解。如有错误,欢迎指正。
上篇文章介绍了使用 Dockerfile
进行自动化部署和 Dockerfile
的常用命令,本篇文章来探讨 Docker Registry。类似 GitHub, Docker Registry 是用来存储 Docker 镜像的地方。了解 Docker Registry 之前先来了解几个相关的知识吧。
Docker Registry 由三个部分组成:index、registry、registry client。
可以把 Index 认为是负责登录、负责认证、负责存储镜像信息和负责对外显示的外部实现,而 registry 则是负责存储镜像的内部实现,而 Registry Client 则是 Docker 客户端。
原文讲的是 Docker Hub 的架构,没有太多实践性的东西; 被题目骗了 、想看如何推送镜像的同学可以直接翻到最后看例子。
Docker Index 使用以下工具来维护用户信息、校验镜像、以及公共 namespace:
同时 Docker Index 也用来分解 URL,方便用户认证和用户使用。
registry 用来存储镜像和图表。然而它不会提供本地数据库,当然也就不会提供用户认证。由 S3、云文件和本地文件系统提供数据库支持。初期之外,用户认证的功能由 Index 提供 token 进行用户认证。有很多种不同的 registry,下面分析其中几个:
用于进行 pull 和 push 的操作,同时用于 docker push
时的登录认证。
一共来讨论以下五种情境模式以便更好地理解 Registry Client 的工作流程。
X-Docker-Token
时才会返回 Token。私有仓库需要认证,而公有仓库不需要认证。
没有 Index 的 registry 是完全需要受 Docker 控制的:最适合在私有网络中存储镜像文件。registry 运行在一个和 Index 没有通信的环境中,所有的认证问题和安全问题都需要用户自己解决。
在这种情况下,私有网络中有一个 Index 会去解决存储和认证问题。但是可能和官方 Index 会出现时间差的问题。Docker 官方也提供了一个非常有意思的东西叫做 chaining registries ,主要是为了解决负载均衡和为具体请求指定具体的 registry。接下来的文章中将会继续介绍如何在以上每个场景中使用 Docker Registry API,并且也会深入了解 Docker 安全。
在第二篇文章中,我们创建了一个名叫 job1
的容器(镜像),我们现在要把它推送到 Docker Hub 上面。
job1
做一个标签(重命名): docker tag job1 qiuker521/myresp
job1
已经可以删除了: docker rmi job1
查看现有的 images
命令 # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE qiuker521/myresp latest 9b748dc45fd1 29 hours ago 2.433 MB ubuntu latest b7cf8f0d9e82 2 days ago 188.3 MB hello-world latest 91c95931e552 6 days ago 910 B busybox latest 8c2e06607696 6 days ago 2.433 MB crosbymichael/dockerui latest 109c8f1f632d 13 months ago 398.7 MB
推送这个镜像: docker push qiuker521/myresp
命令 # docker push qiuker521/myresp The push refers to a repository [qiuker521/myresp] (len: 1) 9b748dc45fd1: Image push failed Please login prior to push: Username: qiuker521 Password: Email: qiuker521#163.com WARNING: login credentials saved in /root/.dockercfg. Login Succeeded The push refers to a repository [qiuker521/myresp] (len: 1) 9b748dc45fd1: Image already exists 8c2e06607696: Image successfully pushed 6ce2e90b0bc7: Image successfully pushed cf2616975b4a: Image successfully pushed Digest: sha256:f9e11f5420a30655b7e088d3f08e0b95e089e401911758a3b311bfa9c419ec2d
可以参考这篇文章 自己搭建本地 Docker Hub 服务 。