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

系列 入门

说明

既然您已经更新了待办事项应用程序,您就可以为该应用程序创建容器镜像并将其共享到 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,这是一个用于 MySQL 数据库的基于 Web 的界面
  • traefik - 提供 Traefik,这是一种现代 HTTP 反向代理和负载均衡器,它根据路由规则将请求路由到相应的容器

探索Docker 官方镜像 的完整目录,以查看更多可运行和构建的内容。

试一试

在本实践指南中,您将学习如何登录 Docker Hub 并将镜像推送到 Docker Hub 仓库。

使用您的 Docker 帐户登录

要将镜像推送到 Docker Hub,您需要使用 Docker 帐户登录。

  1. 打开 Docker 仪表板。

  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 &quot;Build Image&quot; 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 是默认注册表,但注册表已通过Open Container Initiative 标准化并通过互操作性。这使公司和组织能够运行他们自己的私有注册表。通常,可信内容会从 Docker Hub 镜像(或复制)到这些私有注册表中。

下一步

现在您已经构建了一个映像,是时候讨论为什么您作为开发人员应该了解有关 Docker 的更多信息,以及它将如何帮助您完成日常任务。