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

解释说明

现在你已经更新了待办事项列表应用,你已准备好为该应用创建容器镜像并在 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。确保你已从扩展市场...安装了 VS Code 的 Docker 扩展

    Screenshot of VS code extension marketplace
  2. 在**文件**菜单中,选择**打开文件夹**。选择**克隆 Git 仓库**并粘贴此 URL:https://github.com/docker/getting-started-todo-app...

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

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

  5. 按下 **Enter** 后,你将看到一个终端出现,构建将在其中进行。完成后,随时可以关闭终端。

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

  7. 找到你创建的镜像。它的名称将是 docker.io/DOCKER_USERNAME/getting-started-todo-app

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

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

    Screenshot of the Docker Extension and the right-click menu to push an image
  10. 按下 **Enter** 进行确认,然后观察你的镜像被推送到 Docker Hub。取决于你的上传速度,推送镜像可能需要一些时间。

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


总结回顾

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

未来,你会想记住的是

  • Docker Hub 是查找可信内容的首选镜像仓库。Docker 提供了一系列可信内容,包括 Docker 官方镜像、Docker 认证发布者和 Docker 赞助开源软件,你可以直接使用它们或将它们用作自己镜像的基础。

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

其他镜像仓库的使用

虽然 Docker Hub 是默认的镜像仓库,但所有镜像仓库通过开放容器倡议...实现了标准化和互操作。这使得公司和组织可以运行自己的私有镜像仓库。通常,可信内容会从 Docker Hub 镜像(或复制)到这些私有镜像仓库。

下一步

现在你已经构建了一个镜像,是时候讨论一下作为开发者,你为什么应该更多地了解 Docker 以及它如何在你的日常工作中帮助你。

页面选项