构建并推送你的第一个镜像
说明
现在你已经更新了待办事项应用程序,你就可以为该应用程序创建一个容器镜像,并在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 Dashboard。
选择右上角的**登录**。
如果需要,创建一个账户,然后完成登录流程。
完成后,你应该看到**登录**按钮变成你的个人资料图片。
创建一个镜像仓库
现在你有了账户,就可以创建一个镜像仓库了。就像Git仓库保存源代码一样,镜像仓库保存容器镜像。
前往 Docker Hub。
选择 **创建仓库**。
在 **创建仓库** 页面,输入以下信息
- **仓库名称** -
getting-started-todo-app
- **简短描述** - 您可以随意输入描述
- **可见性** - 选择 **公开** 以允许其他人拉取您自定义的待办事项应用
- **仓库名称** -
选择 **创建** 以创建仓库。
构建并推送镜像
现在您已经拥有了一个仓库,您可以开始构建和推送您的镜像了。需要注意的是,您正在构建的镜像扩展了 Node 镜像,这意味着您无需安装或配置 Node、yarn 等。您可以专注于使您的应用程序独一无二的功能。
什么是镜像/Dockerfile?
暂时无需深入了解,您可以将容器镜像视为包含运行进程所需所有内容的单个包。在本例中,它将包含 Node 环境、后端代码和已编译的 React 代码。
使用该镜像运行容器的任何机器都能够运行该应用程序,而无需在机器上预安装任何其他内容。
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** 项目并选择 **推送...** 选项。
按 **Enter** 键确认,然后观看您的镜像被推送到 Docker Hub 的过程。根据您的上传速度,推送镜像可能需要一些时间。
上传完成后,您可以随意关闭终端。
回顾
在继续之前,请花一点时间回顾一下这里发生的事情。短短几分钟内,您就能够构建一个打包应用程序并将其推送到 Docker Hub 的容器镜像。
展望未来,您需要记住
Docker Hub 是查找可信内容的首选注册表。Docker 提供一系列可信内容,包括 Docker 官方镜像、Docker 验证发布者和 Docker 赞助的开源软件,可以直接使用或作为您自己镜像的基础。
Docker Hub 提供了一个分发您自己应用程序的市场。任何人都可以创建一个帐户并分发镜像。虽然您正在公开分发您创建的镜像,但私有仓库可以确保您的镜像仅供授权用户访问。
使用其他注册表
虽然 Docker Hub 是默认注册表,但注册表是标准化的,并通过 开放容器倡议 来实现互操作性。这允许公司和组织运行他们自己的私有注册表。通常,可信内容会从 Docker Hub 镜像到这些私有注册表中(或复制)。
后续步骤
既然您已经构建了一个镜像,那么现在是时候讨论为什么您作为开发人员应该学习更多关于 Docker 的知识以及它如何在您的日常工作中帮助您。