构建并推送您的第一个镜像
说明
现在您已经更新了 待办事项应用程序,您已准备好为该应用程序创建容器镜像并将其分享到 Docker Hub。为此,您需要执行以下操作:
- 使用您的 Docker 账户登录
- 在 Docker Hub 上创建镜像仓库
- 构建容器镜像
- 将镜像推送到 Docker Hub
在您开始动手实践之前,以下是一些您应该了解的核心概念。
容器镜像
如果您对容器镜像还不熟悉,可以将它们视为一种标准化的软件包,其中包含了运行应用程序所需的一切,包括其文件、配置和依赖项。这些软件包随后可以被分发并与他人共享。
Docker Hub
要分享您的 Docker 镜像,您需要一个地方来存储它们。这就是仓库的作用所在。尽管有许多仓库,Docker Hub 是默认且首选的镜像仓库。Docker Hub 既为您提供了一个存储自己镜像的地方,也为您提供了查找他人镜像的途径,这些镜像可以直接运行或作为您自己镜像的基础。
在 使用容器开发中,您使用了以下来自 Docker Hub 的镜像,每个镜像都是 Docker 官方镜像:
- node - 提供了一个 Node 环境,并作为您开发工作的基础。此镜像也用作最终应用程序镜像的基础。
- mysql - 提供一个 MySQL 数据库来存储待办事项列表项
- phpmyadmin - 提供 phpMyAdmin,一个基于 Web 的 MySQL 数据库管理界面
- traefik - 提供 Traefik,这是一个现代的 HTTP 反向代理和负载均衡器,根据路由规则将请求路由到适当的容器
探索 Docker 官方镜像、 Docker 认证发布者和 Docker 赞助的开源软件的完整目录,了解更多可运行和构建的内容。
试用
在本实践指南中,您将学习如何登录 Docker Hub 并将镜像推送到 Docker Hub 仓库。
使用您的 Docker 账户登录
要将镜像推送到 Docker Hub,您需要使用 Docker 账户登录。
打开 Docker 仪表板。
选择右上角的登录。
如果需要,请创建一个账户,然后完成登录流程。
完成后,您应该看到 登录 按钮变为个人资料图片。
创建镜像仓库
现在您已经有了账户,您可以创建一个镜像仓库。就像 Git 仓库存储源代码一样,镜像仓库用于存储容器镜像。
前往 Docker Hub.
选择 Create repository。
在创建仓库页面上,输入以下信息:
- 仓库名称 -
getting-started-todo-app - 简短描述 - 如果您愿意,可以随意输入描述
- 可见性 - 选择 公开 以允许其他人拉取您的自定义待办事项应用
- 仓库名称 -
选择 创建 来创建仓库。
构建并推送镜像
现在您已经拥有一个仓库,可以开始构建并推送您的镜像了。需要注意的是,您正在构建的镜像基于 Node 镜像,这意味着您无需安装或配置 Node、yarn 等。您只需专注于让您的应用程序独特的部分。
什么是镜像/Dockerfile?
暂不深入探讨,可以将容器镜像视为一个包含运行进程所需所有内容的单一软件包。在本例中,它将包含Node环境、后端代码以及编译后的React代码。
任何使用该镜像运行容器的机器,都将能够像构建时那样运行应用程序,而无需在机器上预先安装任何其他东西。
A
Dockerfile是一个基于文本的脚本,提供了关于如何构建镜像的指令集。对于这个快速入门,仓库已经包含了 Dockerfile。
要开始使用,请克隆或 下载项目为 ZIP 文件 到本地计算机。
$ git clone https://github.com/docker/getting-started-todo-app克隆项目后,请进入克隆创建的新目录:
$ cd getting-started-todo-app通过运行以下命令来构建项目,将
DOCKER_USERNAME替换为您的用户名。$ docker build -t <DOCKER_USERNAME>/getting-started-todo-app .例如,如果您的 Docker 用户名是
mobydock,您将运行以下命令:$ docker build -t mobydock/getting-started-todo-app .要验证镜像是否存在于本地,可以使用
docker image ls命令:$ docker image ls您将看到类似于以下的输出:
REPOSITORY TAG IMAGE ID CREATED SIZE mobydock/getting-started-todo-app latest 1543656c9290 2 minutes ago 1.12GB ...要推送镜像,请使用
docker push命令。请务必将DOCKER_USERNAME替换为您的用户名:$ docker push <DOCKER_USERNAME>/getting-started-todo-app根据您的上传速度,推送可能需要一点时间。
打开 Visual Studio Code。在文件菜单中,选择打开文件夹。选择克隆 Git 仓库并粘贴此 URL: https://github.com/docker/getting-started-todo-app

右键点击
Dockerfile并选择 构建镜像... 菜单项。

在出现的对话框中,输入名称
DOCKER_USERNAME/getting-started-todo-app,将DOCKER_USERNAME替换为您的 Docker 用户名。按下 Enter 后,您将看到一个终端窗口出现,构建将在其中进行。完成后,您可以随意关闭该终端。
通过选择左侧导航菜单中的 Docker 图标来打开 VS Code 的 Docker 扩展。
找到您创建的镜像。它的名称将是
docker.io/DOCKER_USERNAME/getting-started-todo-app。展开图片以查看图片的标签(或不同版本)。您应该看到一个名为
latest的标签,这是图片的默认标签。右键点击 latest 项并选择 Push... 选项。

按 Enter 键确认,然后观察镜像被推送到 Docker Hub。根据您的上传速度,推送镜像可能需要一些时间。
上传完成后,您可以随意关闭终端。
回顾
在继续之前,请花一点时间回顾一下这里发生的事情。在短短几分钟内,您就能够构建一个打包您的应用程序的容器镜像,并将其推送到 Docker Hub。
今后,您需要记住:
Docker Hub 是查找可信内容的首选注册表。Docker 提供了一系列可信内容,包括 Docker 官方镜像、Docker 认证发布者和 Docker 赞助的开源软件,可直接使用或作为您自己镜像的基础。
Docker Hub 提供了一个市场来分发您自己的应用程序。任何人都可以创建账户并分发镜像。当您公开分发您创建的镜像时,私有仓库可以确保您的镜像仅对授权用户可访问。
使用其他注册表
虽然 Docker Hub 是默认的注册表,但注册表通过 开放容器倡议 实现了标准化和互操作性。这使公司和组织能够运行自己的私有注册表。通常,受信任的内容会从 Docker Hub 镜像(或复制)到这些私有注册表中。
后续步骤
既然您已经构建了一个镜像,那么现在是时候讨论一下为什么作为开发者的您应该更多地了解 Docker,以及它将如何帮助您完成日常工作。