Docker Hub新手入门:镜像拉取、推送与管理


Docker Hub 新手入门:镜像拉取、推送与管理

Docker Hub 是 Docker 官方提供的公共镜像仓库,类似于代码托管领域的 GitHub。它存储了大量的 Docker 镜像,供全球开发者共享和使用。对于 Docker 的初学者来说,熟练掌握 Docker Hub 的使用是至关重要的,因为它可以让你轻松获取各种预构建的镜像,避免从头开始构建的繁琐过程,同时也可以让你分享自己的镜像给他人。

本文将详细介绍 Docker Hub 的基本概念、镜像的拉取、推送、管理以及一些高级技巧,旨在帮助新手快速入门并掌握 Docker Hub 的使用。

1. Docker Hub 基础概念

1.1. 什么是 Docker Hub?

Docker Hub (hub.docker.com/) 是一个由 Docker 公司维护的在线服务,主要提供以下功能:

  • 镜像仓库 (Repository):存储和管理 Docker 镜像。仓库可以分为公开仓库和私有仓库。公开仓库对所有人可见,可以免费拉取;私有仓库只有授权用户才能访问。
  • 用户认证 (Authentication):提供用户注册、登录、权限管理等功能。
  • 团队协作 (Teams and Organizations):支持创建团队和组织,方便团队成员之间共享镜像和协作开发。
  • 官方镜像 (Official Images):提供经过 Docker 官方认证的高质量镜像,如 Ubuntu、MySQL、Nginx 等。
  • 自动构建 (Automated Builds):可以将 Docker Hub 与 GitHub 或 Bitbucket 等代码仓库关联,实现代码提交后自动构建 Docker 镜像。
  • Webhooks:允许用户配置 Webhooks,在镜像发生变化时触发自定义操作。

1.2. 仓库 (Repository)、标签 (Tag) 和镜像 (Image)

  • 仓库 (Repository):仓库是 Docker 镜像的集合。一个仓库通常包含同一软件的不同版本或不同配置的镜像。例如,ubuntu 是一个仓库,包含了 Ubuntu 操作系统的各种版本。
  • 标签 (Tag):标签用于标识仓库中特定版本的镜像。标签通常是版本号,如 18.0420.04,但也可以是任何有意义的字符串,如 latest (表示最新版本)、stable (表示稳定版本) 等。
  • 镜像 (Image):镜像是 Docker 容器运行的基础。它是一个只读的模板,包含运行应用程序所需的文件系统、库、环境变量和配置信息。

在 Docker Hub 中,一个镜像的完整名称通常由仓库名和标签组成,格式为 仓库名:标签。例如,ubuntu:20.04 表示 Ubuntu 仓库中标签为 20.04 的镜像。

2. 镜像拉取 (Pull)

从 Docker Hub 拉取镜像是使用 Docker 的第一步。docker pull 命令用于从 Docker Hub 或其他镜像仓库下载镜像。

2.1. 基本拉取

最简单的拉取命令格式如下:

bash
docker pull 镜像名称:标签

例如,要拉取 Ubuntu 20.04 镜像:

bash
docker pull ubuntu:20.04

如果不指定标签,Docker 会默认拉取 latest 标签的镜像:

bash
docker pull ubuntu

这将拉取 ubuntu:latest 镜像。

2.2. 拉取所有标签

可以使用 --all-tags-a 选项拉取仓库中的所有标签:

bash
docker pull --all-tags ubuntu

这会下载 Ubuntu 仓库中的所有镜像,包括不同的版本和变体。通常不建议这样做,除非你真的需要所有版本的镜像。

2.3. 从指定仓库拉取

默认情况下,docker pull 从 Docker Hub 拉取镜像。你也可以从其他镜像仓库拉取,只需在镜像名称前加上仓库地址:

bash
docker pull registry.example.com/myimage:tag

2.4. 拉取摘要

Docker 镜像使用摘要(digest)来唯一标识。摘要是一个 SHA256 哈希值,可以确保镜像的完整性和一致性。你可以使用摘要来拉取镜像:

bash
docker pull ubuntu@sha256:45b23dee0... (省略部分哈希值)

使用摘要拉取镜像可以避免标签被恶意篡改的风险。

2.5 查看本地镜像

使用docker images命令可以查看已经拉取到本地的镜像。

docker images

输出类似:

REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 20ff75d97578 2 days ago 72.8MB
nginx latest f688cdfa6d06 3 days ago 142MB

  • REPOSITORY: 镜像的仓库名
  • TAG: 镜像的标签
  • IMAGE ID: 镜像的唯一ID
  • CREATED: 镜像的创建时间
  • SIZE: 镜像的大小

3. 镜像推送 (Push)

将本地镜像推送到 Docker Hub 可以让你与他人共享你的镜像,或者在不同的环境中部署你的应用。

3.1. 登录 Docker Hub

在推送镜像之前,你需要先登录 Docker Hub:

bash
docker login

输入你的 Docker Hub 用户名和密码。登录成功后,你的凭证会保存在 ~/.docker/config.json 文件中。

3.2. 标记镜像

在推送镜像之前,你需要为你的镜像打上合适的标签,使其符合 Docker Hub 的命名规范。通常,你需要将镜像标记为 你的用户名/仓库名:标签 的格式。

例如,假设你的 Docker Hub 用户名是 myuser,你想推送一个名为 myapp 的镜像,版本为 1.0,则需要先标记镜像:

bash
docker tag myapp myuser/myapp:1.0

这里,myapp 是本地镜像的名称,myuser/myapp:1.0 是标记后的镜像名称。

如果本地镜像已经构建好,也可以通过镜像ID进行标记:

bash
docker tag <image_id> myuser/myapp:1.0

3.3. 推送镜像

使用 docker push 命令推送镜像:

bash
docker push myuser/myapp:1.0

推送完成后,你的镜像就可以在 Docker Hub 上找到了。

3.4 推送多架构镜像(高级)

Docker 支持构建和推送适用于多种 CPU 架构(如 amd64、arm64)的镜像。这使得你的镜像可以在不同硬件平台上运行。

要构建多架构镜像,可以使用 Docker Buildx。Buildx 是 Docker 的一个 CLI 插件,提供了更强大的构建功能,包括多架构构建。

  1. 创建并使用新的构建器实例:

    bash
    docker buildx create --use --name mybuilder

  2. 构建并推送多架构镜像:

    bash
    docker buildx build --platform linux/amd64,linux/arm64 -t myuser/myapp:1.0 --push .

    这条命令会构建适用于 amd64 和 arm64 架构的镜像,并将其推送到 Docker Hub。

4. 镜像管理

4.1. 删除镜像

使用 docker rmi 命令删除本地镜像:

bash
docker rmi myuser/myapp:1.0

或者使用镜像ID删除:

bash
docker rmi <image_id>

注意:
* 如果一个镜像有多个标签,docker rmi 只会删除指定的标签,而不会删除镜像本身。只有当镜像没有其他标签时,才会真正删除镜像。
* 如果有容器正在使用该镜像,你需要先停止并删除容器,才能删除镜像。可以使用-f 选项强制删除, 但不推荐。

4.2. 搜索镜像

使用 docker search 命令在 Docker Hub 上搜索镜像:

bash
docker search ubuntu

这将列出所有包含 "ubuntu" 关键字的镜像。

你可以使用 --filter 选项过滤搜索结果,例如:

bash
docker search --filter "is-official=true" ubuntu # 只搜索官方镜像
docker search --filter "stars=100" nginx # 只搜索星标数大于 100 的镜像

4.3. 查看镜像详情

Docker Hub 网站提供了每个镜像的详细信息页面。你可以在页面上查看镜像的描述、标签、Dockerfile、使用说明、星标数、下载量等信息。
直接在浏览器访问 https://hub.docker.com/r/<用户名>/<仓库名>

你也可以通过docker inspect命令查看本地镜像的详细信息(JSON格式):

bash
docker inspect myuser/myapp:1.0

4.4. 使用 Docker Hub 网页界面

除了命令行工具,Docker Hub 还提供了友好的网页界面,你可以在网页上执行以下操作:

  • 浏览和搜索镜像
  • 查看镜像详情
  • 管理你的仓库(创建、删除、设置可见性等)
  • 管理你的团队和组织
  • 配置自动构建和 Webhooks

5. 进阶技巧

5.1. 使用私有仓库

如果你不想公开你的镜像,可以将仓库设置为私有。每个 Docker Hub 账户都有一个免费的私有仓库额度。你可以在 Docker Hub 网站上创建私有仓库,或者在推送镜像时使用 --private 选项:

bash
docker push --private myuser/myprivateapp:1.0 # 该命令已弃用

现在推荐在Docker Hub的网页界面创建仓库时, 选择Private

5.2. 使用自动构建 (Automated Builds)

自动构建可以将 Docker Hub 与你的代码仓库(如 GitHub、Bitbucket)关联起来。当你的代码仓库发生变化时,Docker Hub 会自动构建新的镜像。这可以大大简化你的工作流程,实现持续集成和持续交付 (CI/CD)。

要在 Docker Hub 上配置自动构建,请按照以下步骤操作:

  1. 登录 Docker Hub。
  2. 转到你的仓库页面。
  3. 单击 "Builds" 选项卡。
  4. 单击 "Configure Automated Builds"。
  5. 选择你的代码仓库提供商(GitHub 或 Bitbucket)。
  6. 按照提示授权 Docker Hub 访问你的代码仓库。
  7. 选择要构建的分支和 Dockerfile 路径。
  8. 保存配置。

配置完成后,每次你向代码仓库推送新的提交时,Docker Hub 都会自动触发构建过程。

5.3 充分利用官方镜像

Docker Hub上有很多官方镜像,这些镜像是由Docker官方或者相关软件厂商维护的,通常具有较高的质量和安全性。
尽可能的使用官方镜像可以:
* 减少安全风险
* 获得及时的安全更新和补丁
* 遵循最佳实践

6. 更上一层楼

Docker Hub 是 Docker 生态系统中不可或缺的一部分,掌握 Docker Hub 的使用对于任何 Docker 用户来说都是至关重要的。本文详细介绍了 Docker Hub 的基本概念、镜像的拉取、推送和管理,以及一些高级技巧,希望能帮助你快速入门并熟练使用 Docker Hub。

除了本文介绍的内容,Docker Hub 还有很多其他功能和用法等待你去探索。你可以通过阅读 Docker Hub 的官方文档、参与社区讨论、实践各种应用场景,不断提升你的 Docker 技能。随着你对 Docker Hub 的深入了解,你将能够更好地利用 Docker 的强大功能,构建和部署你的应用程序。
请记住,实践是最好的学习方式。多多动手操作,你会发现 Docker Hub 并没有想象中那么复杂。


希望这篇文章能够对你有所帮助!

THE END