关于 Docker Hub 你应该知道的一切

让我们一起深入了解Docker Hub的世界。

今天,我们将探索Docker Hub,学习如何有效利用它,包括创建自定义镜像,以及它如何协助我们发布和提取镜像。我们将一起访问Docker Hub,并重点关注一些流行的存储库。

准备工作

首先,你需要对Docker有基本的理解,并熟悉Windows和Linux环境。 本教程中,我们将使用Docker Desktop工具进行实践操作,如构建镜像并将其推送到Docker Hub。 Windows和Mac用户可以从此处下载安装,Linux用户请参考此处的指南。

什么是Docker Hub?

Docker Hub是Docker公司提供的镜像仓库服务。

它允许我们从Docker Hub拉取和推送Docker镜像。 我们可以将其类比为源代码管理的GitHub,但Docker Hub专注于容器镜像的下载和发布。 这是一个基于云的在线仓库,存储着两种类型的仓库:公共仓库和私有仓库。 公共仓库对所有人开放,而私有仓库只有仓库所有者才能访问。 存储一定数量以上的私有仓库会产生相应的费用。

Docker Hub 的功能

Docker Hub 提供以下几项核心功能。

#1. 镜像仓库

Docker Hub 帮助我们发现和提取容器镜像。

它还支持将镜像作为公共或私有仓库推送到Docker Hub。

#2. 团队与组织

我们可以创建团队,并将仓库设置为私有,仅供组织内部使用。 这种方式便于我们管理对私有容器镜像的访问权限。

#3. GitHub 和 Bitbucket 集成

Docker Hub 允许与 GitHub 和 BitBucket 等代码仓库进行集成。

#4. 自动化构建

当代码仓库中的源代码发生变更时,Docker Hub 可以自动检测到,并从 GitHub 或 BitBucket 构建新的容器镜像,然后将其推送到Docker Hub。

#5. Webhooks

一旦我们成功推送了镜像,Webhooks可以触发一个动作,从而将Docker Hub与其他服务集成。

#6. 官方与发布者镜像

Docker官方维护的高质量镜像被认为是官方镜像,可以直接拉取使用。 同样,外部供应商提供的高质量镜像是发布者镜像,也称为认证镜像,它们提供对Docker企业的支持和兼容性保证。 我们将在后续内容中深入探讨认证镜像。

创建第一个仓库

首先,你需要使用你的账号登录Docker Hub。 如果你没有账号,可以点击网页上的注册按钮进行创建。 登录后,点击欢迎页面上的“创建仓库”开始创建。

  • 点击“创建仓库”后,你需要为你的仓库命名。

  • 选择可见性选项:公共或私有。

我们还可以集成代码仓库,如GitHub和BitBucket,这一步是可选的,也可以稍后再进行设置。

  • 一切完成后,点击“创建”。

恭喜!你已成功创建了第一个仓库,如下所示。

Docker Hub 仅免费提供一个私有仓库。 如果你需要更多私有仓库,可以升级为付费方案。

现在打开你下载并安装的Docker Desktop工具/终端,并使用命令登录Docker Hub。

docker login

探索镜像

有两种方法可以从 Docker Hub 搜索公共仓库和镜像:通过 Docker Hub 网站或使用命令行工具。 例如,我们搜索 MySQL 仓库镜像。

docker search mysql

下载镜像

我们可以使用pull命令从Docker Hub下载镜像,如下所示:

# docker pull mysql

如果你的机器上已经有MySQL镜像,上述命令会自动将其更新到最新版本。需要注意的是,通过docker search命令的输出,我们可以看到Docker Hub上有许多MySQL镜像,这是因为任何人都可以推送镜像。 因此,我们需要根据实际需求选择合适的镜像。

假设我们提取一个bitnami/mysql镜像。

# docker pull bitnami/mysql

创建镜像

创建镜像需要一个Dockerfile。 你可以将Dockerfile视为Docker构建镜像的说明书。 简单来说,就是一个包含构建指令的配置文件,告诉Docker如何构建镜像。

工作原理

Docker读取Dockerfile中的指令并自动构建镜像。 Docker镜像是一个分层的文件系统,由多个只读层组成,其中每一层都对应着Dockerfile中的一条指令。 现在,我们按照以下步骤使用Dockerfile创建镜像。

创建一个Dockerfile,用于指定应用程序的配置。

# sudo vim Dockerfile

请注意,文件名必须是Dockerfile,并带有大写字母“D”。

FROM ubuntu:16.04
MAINTAINER [email protected]
RUN apt-get update
RUN apt-get install -y mysql
CMD echo "My first image created."

下面我们来看一下Dockerfile中一些重要的关键词:

  • 可以使用 # 符号在Dockerfile中添加注释。
  • “FROM”关键词定义了要使用的基础镜像。
  • MAINTAINER”关键词用于定义镜像的维护者。
  • “RUN”关键词用于执行指定的指令。在本例中,先更新系统,然后安装MySQL。
  • “CMD”关键词用于在容器启动后执行命令。
  • “COPY”关键词用于将主机上的文件复制到Docker容器中。
  • “EXPOSE”关键词用于指定容器运行进程的端口号。

运行以下命令来构建Docker镜像:

语法:

docker build -t /repo-name .

# docker build -t asadali08537/first-repo .

在上面的命令中,镜像的名称是asadali08537/first-repo.表示当前工作目录。 Docker 会在当前目录中查找 Dockerfile。 -t用于标记镜像。 你会看到类似的输出:

现在我们运行镜像进行测试:

docker run asadali08527/first-repo

执行上述命令,Docker会在你的机器上成功安装MySQL,并进行必要的更新,最后显示echo消息。

推送镜像

一旦镜像创建并成功运行,可以使用push命令将其推送到Docker Hub。

docker push asadali08527/first-repo

我们可以在Docker Hub上检查镜像的标签和状态,如下所示:

什么是Docker认证镜像?

这些是由供应商或贡献者发布的官方镜像。 镜像只有在内容符合Docker Hub的规则、标准和法律时才能被认证。 简而言之,镜像必须通过一些基本测试。

Docker Hub 提供 inspectDockerImage 工具,供应商可以通过它对镜像和插件进行自我认证。 (通常,供应商或贡献者会发布插件来记录卷和网络)。

注意:

要将镜像发布为Docker认证镜像,必须先使用inspectDockerImage工具自行认证并测试镜像和插件。 认证成功提交后,Docker Hub将对其进行认证。 如果你的内容需要在未经认证的环境中使用,那么不能以认证形式发布。

DockerHub上的热门镜像

Docker Hub上有许多精心策划和优化的镜像。

这些镜像的受欢迎程度取决于多个因素,例如下载量、市场份额、评级和满意度评分等。要查看最受欢迎的仓库的详细列表,请访问Docker Hub网站。 镜像的使用还取决于操作系统及其架构。 如果我们知道拉取的镜像将用于哪个操作系统及其架构,那么在拉取镜像之前必须考虑以下关键因素。

  • 使用标签查找特定版本(大多数情况下为最新版本)。
  • 选择下载量和星数最多的镜像。
  • 查看更新时间(上次更新时间)。
  • 尽可能检查类型,是经过验证的发布者还是官方(Docker认证)的镜像。

Webhooks

Webhooks是一种处理事件的Web回调。它是一种应用向其他应用提供实时信息的方式。 现在,几乎每个应用都提供Webhooks工具,Docker Hub也具备此功能。

它是由用户指定的事件触发的HTTP推送API。 我们可以在Docker中使用Webhooks来通知使用相关镜像的应用或服务。 通常,我们将Docker的Webhook配置为事件管道。 这样,任何新镜像的上传都会触发测试应用的运行。

一旦测试结果成功,它会触发另一个事件,即容器部署,部署成功后会触发其他事件来记录迄今为止所做的更改。

结论

相信你现在对Docker Hub以及如何搜索、创建和推送镜像有了相当的了解。 请记住,当你推送公共镜像时,任何人都可以访问它。

如果你还没有安装Docker,请查看此Docker安装指南。