了解如何构建 Docker 镜像并将其推送到容器注册表

2025-06-07

了解如何构建 Docker 镜像并将其推送到容器注册表

Docker已成为 DevOps 中用于应用程序容器化和部署的热门工具。它提供了一种标准化的方法,将应用程序及其依赖项和运行时环境打包到容器中,从而可以轻松地在不同环境中分发和运行。为了使此过程更加高效,容器注册表应运而生,它允许开发人员存储和管理他们的容器镜像。在本教程中,我们将逐步讲解构建 Docker 镜像、配置镜像并将其推送到容器注册表的过程。学完本教程后,您将对容器化过程有更深入的了解,并能够使用容器注册表高效且可扩展地部署 Docker 应用程序。

什么是 Docker 镜像?

Docker 镜像是一个轻量级、独立且可执行的包,其中包含运行应用程序所需的所有内容,包括应用程序代码、运行时、库和系统工具。Docker 镜像是使用 Dockerfile 创建的,Dockerfile 是一个指定构建镜像步骤的脚本。

要构建 Docker 镜像,首先需要创建一个 Dockerfile,其中指定基础镜像、所有附加依赖项以及用于安装和配置应用程序的命令。创建 Dockerfile 后,即可使用“docker build”命令来构建镜像。

“docker build” 命令会获取 Dockerfile 的路径,并用它来构建镜像。该命令首先读取 Dockerfile,下载所有必要的依赖项,然后根据指定的配置创建镜像。生成的镜像可以用来运行容器。

以下是构建 Docker 镜像的基本步骤:

docker容器创建

  1. 创建一个包含应用程序必要配置的 Dockerfile。
  2. 在终端中导航到包含 Dockerfile 的目录。
  3. 运行“docker build”命令,指定 Dockerfile 的路径和镜像的名称。
  4. 等待构建过程完成,这可能需要一些时间,具体取决于应用程序的大小和依赖项的数量。
  5. 通过运行“docker images”命令来验证映像是否已成功构建,该命令将列出系统上可用的所有 Docker 映像。

我们将使用持续交付工具Harness来自动化上述过程。我们只需要将 Dockerfile 放在应用程序仓库中(我们的示例仓库中有)。

构建 Docker 镜像是容器化过程中的重要步骤,因为它允许开发人员以标准化、可移植的格式打包他们的应用程序,以便于共享和部署。

先决条件

  • Docker,最好是Docker Desktop
  • 免费的Harness CI模块可以自动构建和推送 Docker 镜像
  • 一个用于实验的示例应用程序。我们有一个Node.js 示例应用程序仓库。您可以 fork 它并使用它。
  • 一个免费的Docker Hub 帐户。我们将使用 DockerHub 作为我们的容器注册中心来推送我们的镜像。

教程

我假设您已经分叉了这个示例 Node.js 应用程序

您在 repo 中看到的 Dockerfile 将用于构建我们的应用程序并将其作为映像推送到 Docker Hub 或您选择的任何容器注册表。

FROM node:14-alpine AS development
ENV NODE_ENV development
# Add a work directory
WORKDIR /app
# Cache and Install dependencies
COPY package.json .
RUN npm install
# Copy app files
COPY . .
# Expose port
EXPOSE 3002
# Start the app
CMD [ "node", "app.js" ]
Enter fullscreen mode Exit fullscreen mode

接下来,登录Harness CI模块并创建一个项目。
线束 CI 模块

如果您愿意,可以邀请合作者参与您的项目。
邀请合作者

选择持续集成模块。
持续集成模块

让我们开始创建您的第一个管道。
第一个 CI 管道

如果这是您第一次使用 Harness,您需要通过源代码管理(无论您的应用程序代码/仓库位于何处)进行身份验证。选择示例应用程序仓库。也就是您 fork 的那个,就是这个
选择 repo

由于它是一个 Node.js 应用程序,我们将从列表中选择 Node.js
nodejs 应用程序仓库

上面,您将看到应用程序的默认 yaml 文件。
点击“继续”,您将进入管道工作室。(有时您可能会转到 yaml 格式,请切换回可视化格式)
管道工作室

在执行选项卡下,您将看到“构建节点应用程序”。如果您点击它,它将显示以下详细信息/设置。
构建节点应用程序

应用更改,保存所有内容并运行管道。
运行管道

您应该会看到如下所示的成功管道执行。
管道执行步骤

现在,让我们编辑管道以扩展将图像推送到 Docker 注册表的功能。

添加一个步骤,您将看到几个选项。
步骤库

选择“构建并将图像推送到 Docker Registry”
构建镜像并将其推送到 Docker Registry

我们没有 Docker 连接器;让我们添加它。
Docker连接器

添加连接器

分步指南将向您展示如何添加它。
Docker 注册表详细信息

添加 DockerHub 详细信息,如下所示。您的 Docker Hub 用户名和密码作为密钥。
添加详细信息

添加您的 DockerHub 用户名和密码(添加密码作为秘密)
密码作为秘密

创建一个新的秘密并添加您的 DockerHub 密码。
docker pass

添加 DockerHub 详细信息后,它看起来如下所示。
dockerhub 所有详细信息

接下来,您需要将 DockerHub 连接到 Harness 提供程序。在此处选择 Harness Platform 进行连接。
线束平台

确保 Harness 和 DockerHub 之间的连接成功。
harness 和 docker 连接

现在,您可以看到“构建并将映像推送到 Docker 注册表”步骤以及添加的详细信息。
构建并将映像推送到 Docker Registry 步骤

在上面的截图中,pavansa是我的 DockerHub 用户名,samnode是我想要的镜像名称。meg是我使用的标签。您可以选择您想要的名称。

应用更改,保存并运行管道。
轻松运行管道

您应该会看到管道执行成功。
管道成功

让我们验证一下 Harness 是否已将镜像推送到 DockerHub。
我们前往 DockerHub 查看仓库。您应该会看到刚刚推送的新镜像。
已推送新图片

恭喜!我们已成功构建、标记镜像并将其推送到 Docker 镜像仓库。同样,在 Harness 中,您可以选择将镜像推送到您选择的任何容器镜像仓库,例如 Amazon ECR、Harbor、RedHat Quay、JFrog Artifactory、Google 容器镜像仓库、GitHub 容器镜像仓库等。

现在,每当有新的代码推送到主分支时,构建就会被触发,并且在每次将新镜像推送到 DockerHub 时运行所有步骤。

看看我的其他教程,我将从头开始展示一个完整的 CI/CD 工作流程教程。

文章来源:https://dev.to/pavanbelagatti/learn-how-to-build-and-push-a-docker-image-to-a-container-registry-282
PREV
模型上下文协议 (MCP):每个开发人员都应该尝试的 8 个 MCP 服务器!
NEXT
Kubernetes 部署:滚动部署、金丝雀部署、蓝绿部署