”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > CKA 完整课程日 ulti Stage Docker 构建

CKA 完整课程日 ulti Stage Docker 构建

发布于2024-11-04
浏览:799

CKA Full Course Day ulti Stage Docker Build

在这篇博文中,我们将探索 Docker 并逐步使用简单的 Nginx 应用程序创建多阶段 Docker 构建。如果你刚刚开始使用 Docker,别担心,我会一步一步分解所有内容,以便你可以跟着做!

Dockerfile

这是我们将使用的 Dockerfile:

FROM node:18-alpine AS installer

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

FROM nginx:latest AS deployer

COPY --from=installer /app/build /usr/share/nginx/html

解压 Dockerfile

现在,让我们一步步解开这个 Dockerfile 中发生的事情:

1. 来自节点:18-alpine AS安装程序

此行从 Docker Hub 中提取官方 Node.js 镜像(Alpine Linux 上的版本 18)。将 Docker Hub 视为一个镜像库。通过使用这一行,我们指定要使用 Node.js 作为构建第一阶段的基础镜像。

2. WORKDIR /应用程序

该命令将容器内的工作目录设置为/app。您可以将其视为在容器内为您的应用程序创建一个专用文件夹,类似于您在桌面上组织文件的方式。

3. 复制包*.json ./

在这里,我们将 package.json 和 package-lock.json 文件从本地目录复制到容器的工作目录。这些文件包含有关我们的应用程序所需的依赖项的信息。

4. 运行 npm install

此命令运行 npm install,它会安装 package.json 中指定的所有依赖项。

5. 复制。 .

这一行将其余的应用程序文件复制到容器中。它将本地目录中的所有内容带到容器内的 /app 目录中。

6. RUN npm run build

现在我们使用命令 npm run build 编译我们的应用程序。此步骤通常将我们的代码(在本例中通常是 React)转换为静态包,准备好提供给用户。此命令的输出将放置在 /app 内的构建目录中。

7. 来自 nginx:最新 AS 部署程序

在这一行中,我们切换到一个新的基础镜像:Nginx。 Nginx 是一个功能强大的 Web 服务器,可以提供静态文件,就像我们刚刚构建的那样。这是多阶段构建过程第二阶段的开始。

8. COPY --from=installer /app/build /usr/share/nginx/html

在这里,我们将前一阶段(安装程序)构建的应用程序文件复制到 Nginx 服务目录中。 --from=installer 标志告诉 Docker 从我们刚刚定义的安装程序阶段获取文件。

运行你的 Docker 容器

设置好 Dockerfile 后,您可以使用以下命令构建并运行 Docker 容器:

docker build -t your-app-name .
docker run -dp 3000:80 your-app-name

确保将 your-app-name 替换为您选择的名称。 -dp 标志将分离您的容器并将主机上的端口 3000 映射到容器中的端口 80,从而允许您通过 http://localhost:3000 访问您的应用程序。

结论

这就是你得到的!您刚刚创建了一个多阶段 Docker 构建,该构建使用 Nginx 将您的应用程序从开发带到生产。如果您对此过程有任何疑问或想法,请随时在下面发表评论!

陷阱:需要注意的事项

使用此设置时的一个常见问题是忘记映射正确的端口号。 Nginx 通常侦听容器内的端口 80,但如果您尝试访问本地计算机上的应用程序,则需要将正确的端口从容器转发到您的计算机。例如,如果您想访问 localhost:3000 上的应用程序,则需要使用 -p 3000:80 标志运行容器,以将计算机上的端口 3000 映射到容器中的端口 80。

错过这一步,您会发现自己想知道为什么一切都构建得很完美,但您无法在浏览器中访问该应用程序!


标签和提及

@piyushsachdeva
第三天视频

版本声明 本文转载于:https://dev.to/lloydrivers/cka-full-course-2024-day-340-multi-stage-docker-build-2ld3?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 掌握 Python 命令行界面 (CLI):综合指南
    掌握 Python 命令行界面 (CLI):综合指南
    介绍 Python 因其多功能性和易用性而广为人知,尤其是在构建命令行界面 (CLI) 应用程序时。无论您是想自动执行日常任务、构建开发人员工具还是创建灵活的脚本,Python 丰富的生态系统都提供了各种库来有效处理 CLI。 在这篇博文中,我们将深入探讨如何使用 Python 中...
    编程 发布于2024-11-08
  • 如何在 Pandas 中基于 If-Else-Else 条件创建列?
    如何在 Pandas 中基于 If-Else-Else 条件创建列?
    在 Pandas 中使用 If-Else-Else 条件创建列根据 if-elif-else 条件创建新列,主要有两种方法:非矢量化方法此方法涉及定义一个对行进行操作的函数:def f(row): if row['A'] == row['B']: val = 0 el...
    编程 发布于2024-11-08
  • 为什么我使用 Bootstrap Modals 会收到“TypeError: $(...).modal is Not a Function\”?
    为什么我使用 Bootstrap Modals 会收到“TypeError: $(...).modal is Not a Function\”?
    TypeError: $(...).modal is Not a Function with Bootstrap Modal问题当动态插入 Bootstrap 模态到另一个视图的 HTML,您可能会遇到以下错误: TypeError: $(...).modal is not a function。此...
    编程 发布于2024-11-08
  • 如何修复 cURL 错误 35:“SSL/TLS 握手中出现问题”?
    如何修复 cURL 错误 35:“SSL/TLS 握手中出现问题”?
    使用 cURL 解决 SSL/TLS 握手问题遇到臭名昭著的 cURL 错误 35,“SSL/TLS 握手中某处出现问题,”可能会令人沮丧。此错误消息表明即使 cURL 与 HTTP 协议完美配合,在 HTTPS 请求期间建立安全连接也存在困难。尝试的一种常见解决方案是将 CURLOPT_SSL_V...
    编程 发布于2024-11-08
  • 如何掌握 MERN 堆栈:全栈开发人员指南
    如何掌握 MERN 堆栈:全栈开发人员指南
    MERN 堆栈(MongoDB、Express.js、React.js、Node.js)已成为全栈 Web 开发最流行的技术之一。作为一名开发人员,学习 MERN 堆栈可以打开一个充满机遇的世界,并让您走上构建强大的动态 Web 应用程序的道路。以下是您如何掌握 MERN 堆栈并将您的全堆栈开发技能...
    编程 发布于2024-11-08
  • 如何确保您的 PHP 网站正确处理 UTF-8 编码?
    如何确保您的 PHP 网站正确处理 UTF-8 编码?
    确保您的 PHP 网站进行全面的 UTF-8 处理要针对 UTF-8 编码优化您的 PHP 网站,建议执行几个关键步骤.启用相关扩展:mbstring: 提供对多字节字符串的支持,包括编码转换和字符串操作。PHP配置(php.ini):default_charset:设置为“utf-8”确保默认输出...
    编程 发布于2024-11-08
  • 为什么我的 MySQL 查询在 PHP 中返回“资源 id #6”?
    为什么我的 MySQL 查询在 PHP 中返回“资源 id #6”?
    在 PHP 中回显 MySQL 响应的资源 ID #6在 PHP 中使用 MySQL 扩展查询数据库时,您可能会遇到“Resource id #6”输出而不是预期结果。发生这种情况是因为查询返回资源,而不是字符串或数值。回显结果要显示预期结果,您必须首先使用以下命令获取数据提供的获取函数之一。其中一...
    编程 发布于2024-11-08
  • (SQL 查询)Express.js 中的缓存与索引
    (SQL 查询)Express.js 中的缓存与索引
    开发者您好,这是我在这个平台上的第一篇文章! ? 我想分享我在 Express.js 和 SQL 方面的令人惊讶的体验。我是一名初学者开发人员,在为我的项目开发 API 时,我每天处理超过 20 万个 API 请求。最初,我使用 Express.js API 设置了一个 SQLite 数据库(约 4...
    编程 发布于2024-11-08
  • 以下是一些适合您文章内容的基于问题的标题:

* 如何为 Spring Boot 应用程序配置上下文路径?
* 如何使用自定义 Con 访问我的 Spring Boot 应用程序
    以下是一些适合您文章内容的基于问题的标题: * 如何为 Spring Boot 应用程序配置上下文路径? * 如何使用自定义 Con 访问我的 Spring Boot 应用程序
    如何向 Spring Boot 应用程序添加上下文路径Spring Boot 提供了一种简单的方法来设置应用程序的上下文根,允许它通过 localhost:port/{app_name} 访问。操作方法如下:使用应用程序属性:在 src/main/resources 目录中创建一个 applicat...
    编程 发布于2024-11-08
  • 代码日数:高级循环
    代码日数:高级循环
    2024 年 8 月 30 日星期五 我目前正在学习 Codecademy 全栈工程师路径的第二门课程。我最近完成了 JavaScript 语法 I 课程,并完成了 JavaScript 语法 II 中的数组和循环作业。接下来是对象、迭代器、错误和调试、练习和三个挑战项目。 今天的主要亮点是学习对我...
    编程 发布于2024-11-08
  • Angular Addicts # Angular 隐式库,未来是独立的等等
    Angular Addicts # Angular 隐式库,未来是独立的等等
    ?嘿,Angular Addict 伙伴 这是 Angular Addicts Newsletter 的第 29 期,这是一本每月精选的引起我注意的 Angular 资源合集。 (这里是第28期、27期、26期) ?发布公告 ? Angular 18...
    编程 发布于2024-11-08
  • 如何在 Java HashMap 中将多个值映射到单个键?
    如何在 Java HashMap 中将多个值映射到单个键?
    HashMap 中将多个值映射到单个键在 Java 的 HashMap 中,每个键都与单个值关联。但是,在某些情况下,您可能需要将多个值映射到单个键。以下是实现此目的的方法:多值映射方法:最简单、最直接的方法是使用列表映射。这涉及创建一个 HashMap,其中的值是包含多个值的 ArrayList。...
    编程 发布于2024-11-08
  • 如何使用 PHP 高效地检查文件中的字符串?
    如何使用 PHP 高效地检查文件中的字符串?
    如何在 PHP 中检查文件是否包含字符串要确定文件中是否存在特定字符串,让我们探索一下解决方案和更有效的替代方案。原始代码:提供的代码尝试检查通过逐行读取文件来判断文件中是否存在由变量 $id 表示的字符串。但是,while 循环中的条件 (strpos($buffer, $id) === fals...
    编程 发布于2024-11-08
  • 小型 Swoole 实体管理器
    小型 Swoole 实体管理器
    我很高兴向大家介绍 Small Swoole Entity Manager。 它是一个围绕 Swoole(和 OpenSwoole)构建的 ORM。 它支持异步连接到: MySQL Postgres Small Swoole Db(Swoole Tables 之上的关系层) 目前仅提供核心包; S...
    编程 发布于2024-11-08
  • WebCodec - 发送和接收
    WebCodec - 发送和接收
    介绍 你好! ? 在本教程中,我将向您展示如何使用 WebCodec API 发送和接收视频。 首先让我们对服务器进行编码。 设置服务器 为了在对等点之间发送和接收数据包,我们需要一个 websocket 服务器。 为此,我们将使用 Nodejs 创建一个非常基...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3