构建并推送你的第一个镜像

说明

现在你已经更新了待办事项应用程序,你就可以为该应用程序创建一个容器镜像,并在Docker Hub上共享它。为此,你需要执行以下操作:

  1. 使用你的Docker账户登录
  2. 在Docker Hub上创建一个镜像仓库
  3. 构建容器镜像
  4. 将镜像推送到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账户登录。

  1. 打开Docker Dashboard。

  2. 选择右上角的**登录**。

  3. 如果需要,创建一个账户,然后完成登录流程。

完成后,你应该看到**登录**按钮变成你的个人资料图片。

创建一个镜像仓库

现在你有了账户,就可以创建一个镜像仓库了。就像Git仓库保存源代码一样,镜像仓库保存容器镜像。

  1. 前往 Docker Hub

  2. 选择 **创建仓库**。

  3. 在 **创建仓库** 页面,输入以下信息

    • **仓库名称** - getting-started-todo-app
    • **简短描述** - 您可以随意输入描述
    • **可见性** - 选择 **公开** 以允许其他人拉取您自定义的待办事项应用
  4. 选择 **创建** 以创建仓库。

构建并推送镜像

现在您已经拥有了一个仓库,您可以开始构建和推送您的镜像了。需要注意的是,您正在构建的镜像扩展了 Node 镜像,这意味着您无需安装或配置 Node、yarn 等。您可以专注于使您的应用程序独一无二的功能。

什么是镜像/Dockerfile?

暂时无需深入了解,您可以将容器镜像视为包含运行进程所需所有内容的单个包。在本例中,它将包含 Node 环境、后端代码和已编译的 React 代码。

使用该镜像运行容器的任何机器都能够运行该应用程序,而无需在机器上预安装任何其他内容。

Dockerfile 是一个基于文本的脚本,它提供构建镜像的指令集。对于此快速入门,仓库中已包含 Dockerfile。


  1. 要开始,请克隆或 下载项目作为 ZIP 文件 到您的本地机器。

    $ git clone https://github.com/docker/getting-started-todo-app
    

    克隆项目后,导航到克隆创建的新目录。

    $ cd getting-started-todo-app
    
  2. 运行以下命令构建项目,将 DOCKER_USERNAME 替换为您的用户名。

    $ docker build -t <DOCKER_USERNAME>/getting-started-todo-app .
    

    例如,如果您的 Docker 用户名是 mobydock,则应运行以下命令

    $ docker build -t mobydock/getting-started-todo-app .
    
  3. 要验证镜像是否存在于本地,可以使用 docker image ls 命令

    $ docker image ls
    

    您将看到类似于以下的输出

    REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
    mobydock/getting-started-todo-app   latest    1543656c9290   2 minutes ago    1.12GB
    ...
    
  4. 要推送镜像,请使用 docker push 命令。请务必将 DOCKER_USERNAME 替换为您的用户名

    $ docker push <DOCKER_USERNAME>/getting-started-todo-app
    

    根据您的上传速度,推送可能需要一些时间。

  1. 打开 Visual Studio Code。在 **文件** 菜单中,选择 **打开文件夹**。选择 **克隆 Git 仓库** 并粘贴此 URL: https://github.com/docker/getting-started-todo-app

    Screenshot of VS code showing how to clone a repository
  2. 右键单击 Dockerfile 并选择 **构建镜像...** 菜单项。

    Screenshot of VS Code showing the right-click menu and "Build Image" menu item
  3. 在出现的对话框中,输入名称 DOCKER_USERNAME/getting-started-todo-app,将 DOCKER_USERNAME 替换为您的 Docker 用户名。

  4. 按 **Enter** 键后,您将看到出现一个终端,构建将在其中进行。完成后,您可以随意关闭终端。

  5. 通过选择左侧导航菜单中的 Docker 徽标,打开 VS Code 的 Docker 扩展。

  6. 找到您创建的镜像。它的名称将为 docker.io/DOCKER_USERNAME/getting-started-todo-app

  7. 展开镜像以查看镜像的标签(或不同版本)。您应该看到一个名为 latest 的标签,这是赋予镜像的默认标签。

  8. 右键单击 **latest** 项目并选择 **推送...** 选项。

    Screenshot of the Docker Extension and the right-click menu to push an image
  9. 按 **Enter** 键确认,然后观看您的镜像被推送到 Docker Hub 的过程。根据您的上传速度,推送镜像可能需要一些时间。

    上传完成后,您可以随意关闭终端。


回顾

在继续之前,请花一点时间回顾一下这里发生的事情。短短几分钟内,您就能够构建一个打包应用程序并将其推送到 Docker Hub 的容器镜像。

展望未来,您需要记住

  • Docker Hub 是查找可信内容的首选注册表。Docker 提供一系列可信内容,包括 Docker 官方镜像、Docker 验证发布者和 Docker 赞助的开源软件,可以直接使用或作为您自己镜像的基础。

  • Docker Hub 提供了一个分发您自己应用程序的市场。任何人都可以创建一个帐户并分发镜像。虽然您正在公开分发您创建的镜像,但私有仓库可以确保您的镜像仅供授权用户访问。

使用其他注册表

虽然 Docker Hub 是默认注册表,但注册表是标准化的,并通过 开放容器倡议 来实现互操作性。这允许公司和组织运行他们自己的私有注册表。通常,可信内容会从 Docker Hub 镜像到这些私有注册表中(或复制)。

后续步骤

既然您已经构建了一个镜像,那么现在是时候讨论为什么您作为开发人员应该学习更多关于 Docker 的知识以及它如何在您的日常工作中帮助您。