如何将 Docker 镜像推送到 Docker Hub

随着开发人员继续在日益复杂的环境中构建和部署应用程序,容器化通过简化流程彻底改变了这一过程。Docker 是容器化的领先工具,它允许开发人员将应用程序与其依赖项打包在一起并高效协作,同时保持不同环境之间的一致性。要打包应用程序并与他人共享,开发人员需要通过构建应用程序的 Docker 映像对其进行容器化。此外,他们将其发布到 Docker Hub,其他人可以在那里提取映像并在他们的机器上继续开发,类似于我们使用 GitHub 处理代码库的方式。

hero-image

在这篇博客中,我们将学习如何为应用程序创建 Dockerfile、构建 Docker 镜像并将其推送到 Docker Hub,以便其他人可以访问。

先决条件

  • 虚拟机(例如 NodeShift 提供的虚拟机)至少具有:2 个 vCPU、2 GB RAM、10 GB SSD
  • Ubuntu 22.04 虚拟机
  • 在 Ubuntu 上安装 Docker
  • 注意:此操作的先决条件在不同用例中有很大差异。高端配置可用于大规模部署。

    将 Docker 镜像推送到 Docker Hub 的分步过程

    在本教程中,我们将使用 NodeShift 的 CPU 驱动虚拟机,它以非常实惠的价格提供高计算能力的虚拟机,其规模符合 GDPR、SOC2 和 ISO27001 的要求。它还提供了直观且用户友好的界面,使初学者更容易开始云部署。但是,您可以随意使用您选择的任何云提供商,并按照本教程的其余部分相同的步骤进行操作。

    步骤 1:设置 NodeShift 帐户

    访问 app.nodeshift.com 并填写基本信息创建一个帐户,或者继续使用您的 Google/GitHub 帐户注册。

    如果您已经有帐户,请直接登录到您的仪表板。

    Image-step1-1

    第 2 步:创建计算节点(CPU 虚拟机)

    访问您的帐户后,您应该会看到一个仪表板(见图),现在:

    1)导航至左侧菜单。

    2)点击**计算节点**选项。

    Image-step2-2

    3)单击**开始**开始创建您的第一个计算节点。

    Image-step2-2

    这些计算节点是 NodeShift 的 CPU 驱动虚拟机。这些节点可高度自定义,可让您根据需要控制不同的环境配置,例如 vCPU、RAM 和存储。

    步骤 3:选择虚拟机配置

    1) 您看到的第一个选项是 **可靠性** 下拉菜单。此选项可让您选择虚拟机所需的正常运行时间保证级别(例如 99.9%)。

    Image-step3-1

    2) 接下来,从**区域**下拉菜单中选择您想要启动虚拟机的地理区域(例如美国)。

    Image-step3-2

    最重要的是,通过滑动每个选项的条形图,根据您的工作负载要求为您的虚拟机选择正确的规格。

    步骤 4:选择虚拟机配置和映像

    1) 选择所需的配置选项后,您将看到您所在地区可用的虚拟机,并且符合(或非常接近)您的配置。在我们的例子中,我们将选择“2vCPUs/2GB/60GB SSD”作为与“先决条件”最接近的匹配。

    2) 接下来,您需要为虚拟机选择一个映像。在本教程的范围内,我们将选择 Ubuntu,因为我们在 Ubuntu 上创建 Docker 映像。

    Image-step4-1

    步骤 5:选择结算周期和身份验证方法

    1) 提供两种计费周期选项:**按小时**,适合短期使用,提供即用即付的灵活性;**按月**,适用于具有一致使用率且可能降低成本的长期项目。

    Image-step5-1

    2) 接下来,您需要选择一种身份验证方法。有两种方法可用:密码和 SSH 密钥。我们建议使用 SSH 密钥,因为它们是更安全的选择。要创建一个,请转到我们的官方文档。

    Image-step5-2

    步骤 6:确定细节并创建部署

    最后,您还可以添加 VPC(虚拟私有云),它提供了一个隔离的部分,可以在安全、私有的环境中启动您的云资源(虚拟机、存储等)。我们暂时将此选项保留为默认选项,但您可以根据需要随意创建 VPC。

    另外,您可以使用**数量**选项一次部署多个节点。

    Image-step6-1

    就这样!您现在可以部署节点了。完成配置摘要;如果看起来不错,请继续单击**创建**以部署节点。

    Image-step6-2

    步骤 7:使用 SSH 连接到活动计算节点

    创建节点后,它会在几秒钟或一分钟内部署完毕。部署后,您将看到绿色的 **正在运行** 状态,这意味着我们的计算节点已准备好使用!

    Image-step7-1

    一旦您的节点显示此状态,请按照以下步骤通过 SSH 连接到正在运行的 VM:

    1)打开终端并运行以下 SSH 命令:

    (将“root”替换为您的用户名,并从仪表板复制后,将您的虚拟机的 IP 粘贴到“ip”的位置)

    ssh root@ip
  • 在某些情况下,您的终端可能会在连接之前征求您的同意。输入“是”。
  • 系统会提示输入密码。输入 SSH 密码后,您便可以连接。
  • 输出:

    Image-step7-2
  • 此外,如果您想在 Ubuntu VM 上使用 VS Code,则需要按照以下步骤通过 SSH 将本地 VS Code 编辑器连接到 Ubuntu VM:
  • a) 在 VS Code 上安装 Microsoft 的“Remote-SSH”扩展。

    b) 在命令面板上输入“Remote-SSH:连接到主机”。

    c) 输入主机详细信息,例如用户名和 SSH 密码。

    d) 您的 SSH 连接应该已建立!

    步骤 8:为应用程序创建 Dockerfile

    在 Ubuntu 上安装 Docker(如**先决条件**中所述)并连接到 Visual Studio Code 编辑器后,继续为您的应用程序创建 Dockerfile。

    为了演示目的,我们使用 Node.js 创建了一个非常简单的 Express 应用程序,当服务器启动并运行时,它会在浏览器上显示“Hello Docker!”。我们将在本教程中为该应用程序创建一个 Docker 映像。

    1)在项目的根目录中创建一个文件,即Dockerfile(不带扩展名)。

    这是我们应用程序的示例目录结构:

    Image-step8-1

    2)配置Dockerfile

    接下来,将应用程序特定的指令添加到 Dockerfile,

    # Use an official Node.js image as the base image
    FROM node:19-alpine3.16
    
    # Set the working directory inside the container and update the PATH environment variable
    WORKDIR /app
    ENV PATH="/app/node_modules/.bin:$PATH"
    
    # Copy application files to the working directory
    COPY . .
    
    # Install application dependencies & build the app
    RUN npm install
    RUN npm run build
    
    # Specify the command to start the application
    CMD ["npm", "run", "start"]

    该文件可能看起来与此类似:

    Image-step8-2

    每个术语的具体内容如下:

  • FROM:选择Node.js基础镜像。
  • WORKDIR:设置容器的工作目录。
  • ENV:设置环境变量(路径)。
  • COPY:将应用程序文件添加到容器中。
  • 运行:安装依赖项并构建应用程序。
  • EXPOSE:指定应用程序的端口。
  • CMD:启动应用程序。
  • 步骤 9:构建 Docker 映像

    配置完成后,运行以下命令构建Docker 镜像:

    注意:在构建 Docker 镜像之前,请确保在项目目录中包含构建脚本,并使用“npm run build”创建应用程序的生产版本(如果是 Node 应用程序)。

    (替换 `` 为您的 Docker 镜像命名)

    docker build -t  .

    输出:

    Image-step9-1

    使用以下命令确认镜像是否创建:

    docker image ls

    输出:

    Image-step9-2

    如你所见,我们的镜像已成功创建。让我们继续将其推送到 Docker Hub。

    步骤 10:将镜像推送到 Docker Hub

    现在,我们已经创建了 Docker 镜像,我们需要将其推送到 Docker Hub,以使其可公开/私下访问。**Docker Hub** 是一个 Docker 镜像库,您可以从中提取其他应用程序的镜像并推送自己的镜像供其他人使用。

    1)创建账户或登录Docker。

    2)导航到Docker Hub。

    3)点击**创建存储库**,如下图所示。

    Image-step10-1

    4) 填写必要的详细信息,然后单击**创建**以创建存储库。

    Image-step10-2

    5)创建存储库后,转到 Ubuntu 终端并使用您的凭据登录 Docker 注册中心。

    (替换 ``和`` 使用您的帐户凭证)

    docker login --username  --password 

    6)接下来,在将图像推送到 Docker 之前对其进行标记。

    标记镜像将帮助您为不同的版本控制 Docker 镜像的版本,并在必要时进行回滚。例如,我们将当前构建的镜像标记为“latest”,表示它是镜像的最新版本。

    docker tag : /:

    7)继续将镜像推送到Docker hub。

    docker image push /:

    输出:

    Image-step10-3

    8)确认Docker Hub中的镜像

    最后,导航到 Docker Hub 并检查您的存储库以验证新推送的 Docker 镜像。

    Image-step10-4

    如上图,我们的Docker镜像已经成功推送到Docker hub了!

    结论

    在本博客中,我们介绍了如何为 Node.js 应用程序创建 Dockerfile、构建 Docker 映像并将其推送到 Docker Hub,所有这些都来自基于云的 Ubuntu VM。通过容器化您的应用程序,您可以确保应用程序在各个环境中保持一致且可扩展,从而使任何需要与代码库交互的人都可以轻松顺利地进行部署。对于寻求高效、可靠且开发人员友好的云平台来托管和管理容器化应用程序的开发人员,NodeShift 提供了强大的云计算,可针对现代 Web 应用程序进行自定义。无论您是从小规模开始还是大规模扩展,NodeShift 都可以让您轻松优化云基础架构,同时隐藏底层复杂性。