构建并推送你的第一个镜像
解释说明
现在你已经更新了待办事项列表应用,你已准备好为该应用创建容器镜像并在 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 仓库用于存放源代码一样,镜像仓库用于存储容器镜像。
选择**创建仓库**。
在**创建仓库**页面,输入以下信息:
- 仓库名称 -
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。确保你已从扩展市场...安装了 VS Code 的 Docker 扩展。
在**文件**菜单中,选择**打开文件夹**。选择**克隆 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 以及它如何在你的日常工作中帮助你。