此容器镜像包含Node.JS 10,作为Node.JS 10应用程序的S2I基础镜像。用户可选择基于RHEL、CentOS和Fedora的镜像。RHEL镜像可在Red Hat Container Catalog获取,CentOS镜像可在Quay.io获取,Fedora镜像可在Fedora Registry获取。生成的镜像可使用podman运行。
注意:虽然本README中的示例使用podman,但您可以将任何此类调用替换为docker,参数保持不变。
Node.js 10容器镜像是构建和运行各种Node.js 10应用程序和框架的基础平台。Node.js是基于Chrome JavaScript运行时构建的平台,便于构建快速、可扩展的网络应用程序。Node.js采用事件驱动、非阻塞I/O模型,使其轻量且高效,非常适合在分布式设备上运行的数据密集型实时应用程序。
本示例假设您使用ubi8/nodejs-10镜像,该镜像可通过OpenShift中的nodejs:10镜像流标签获取。
要在OpenShift中构建简单的nodejs-sample-app应用程序:
oc new-app nodejs:10~[***]
访问应用程序:
$ oc get pods $ oc exec <pod> -- curl 127.0.0.1:8080
此镜像支持OpenShift中的源到镜像(S2I)策略。S2I是一个OpenShift框架,便于编写将应用源代码作为输入、使用构建器镜像(如本Node.js容器镜像)并生成运行组装后应用的新镜像的镜像。
为支持S2I框架,构建器镜像中包含以下重要脚本:
镜像内的/usr/libexec/s2i/assemble脚本用于生成包含应用artifacts的新镜像。该脚本获取给定应用的源代码并将其放置到镜像内的适当目录中。它利用Node.js应用开发中的一些常见模式(见下文“环境变量”部分)。
/usr/libexec/s2i/run脚本作为生成的容器镜像(包含应用artifacts的新镜像)的默认命令。它在生产环境中运行npm run,如果DEV_MODE设置为true(见下文“环境变量”部分),则使用nodemon。
与S2I策略相比,使用Dockerfile是构建包含应用程序的Node.js容器镜像的更灵活方式。当S2I不够灵活或在OpenShift环境外构建镜像时,使用Dockerfile。
要在Dockerfile中使用Node.js镜像,请按照以下步骤操作:
podman pull ubi8/nodejs-10
本示例使用UBI镜像ubi8/nodejs-10。此镜像可根据UBI最终用户许可协议(EULA)免费使用和再分发。有关UBI的更多信息,请参见UBI常见问题。
此处使用可从[***]
git clone [***] app-src
此步骤通常至少包括以下部分:
对于这三个部分,用户可以在Dockerfile中手动设置并显式使用nodejs和npm命令(3.1.),或者使用镜像内的S2I脚本(3.2.;有关这些脚本的更多信息,请参见上文“源到镜像(S2I)框架和脚本”部分),这些脚本已知道如何设置和运行一些常见的Node.js应用程序。
FROM ubi8/nodejs-10 # 添加应用源代码 ADD app-src . # 安装依赖项 RUN npm install # 运行脚本使用标准方式运行应用程序 CMD npm run -d start
FROM ubi8/nodejs-10 # 将应用源代码添加到assemble脚本期望的目录,并设置权限以使容器非root用户运行 USER 0 ADD app-src /tmp/src RUN chown -R 1001:0 /tmp/src USER 1001 # 安装依赖项 RUN /usr/libexec/s2i/assemble # 为生成的镜像设置默认命令 CMD /usr/libexec/s2i/run
podman build -t node-app .
podman run -d node-app
应用开发人员可使用以下环境变量在OpenShift中配置此镜像的运行时行为:
NODE_ENV
NodeJS运行模式(默认:"production")
DEV_MODE
当设置为"true"时,nodemon将用于在您工作时自动重新加载服务器(默认:"false")。将DEV_MODE设置为"true"会将NODE_ENV的默认值更改为"development"(如果未显式设置)。
NPM_RUN
选择在您的package.json文件的scripts部分中定义的替代/自定义运行模式(默认:npm run "start")。使用DEV_MODE时,这些用户定义的运行脚本不可用。
HTTP_PROXY
在组装期间使用npm代理
HTTPS_PROXY
在组装期间使用npm代理
NPM_MIRROR
在构建过程中使用自定义NPM registry镜像下载包
定义一组环境变量的一种方法是将它们作为键值对包含在仓库的.s2i/environment文件中。
示例:DATABASE_USER=sampleUser
DEV_MODE”:以下package.json示例包含scripts.dev条目。您可以在应用的package.json文件中定义自己的自定义NPM_RUN脚本。
要更改npm install期间的日志输出级别,可设置npm_config_loglevel环境变量。参见npm-config。
此镜像支持开发模式。可通过环境变量DEV_MODE开关此模式。DEV_MODE可设置为true或false。
开发模式支持两个功能:
调试端口可通过环境变量DEBUG_PORT指定。DEBUG_PORT仅在DEV_MODE=true时有效。
在开发模式下运行容器的简单示例命令:
podman run --env DEV_MODE=true my-image-id
要在开发模式下运行容器并使用5454作为调试端口:
$ podman run --env DEV_MODE=true DEBUG_PORT=5454 my-image-id
在生产模式下运行容器:
$ podman run --env DEV_MODE=false my-image-id
默认情况下,DEV_MODE设置为false,DEBUG_PORT设置为5858,但DEBUG_PORT仅在DEV_MODE=true时相关。
作为开发模式的一部分,此镜像支持热部署。如果启用开发模式,运行中容器内更改的任何源代码将立即反映在运行的nodejs应用程序中。
要在运行中的容器中更改源代码,使用Podman的exec命令:
$ podman exec -it <容器ID> /bin/bash
使用Podman exec进入运行中的容器后,当前目录设置为/opt/app-root/src,即应用源代码所在位置。
如果已将容器部署到OpenShift,可使用oc rsync将本地文件复制到OpenShift pod中运行的远程容器。
s2i-nodejs容器镜像的默认行为是使用npm start命令运行Node.js应用程序。这将运行package.json文件中的start脚本。在开发模式下,应用程序使用nodemon命令运行。nodemon的默认行为是查找package.json文件中的main属性并执行该脚本。如果package.json文件中没有main属性,它将执行start脚本。因此,为了在生产和开发模式之间实现某种统一的功能,用户应删除main属性。
以下是带有main属性和start脚本标记的package.json示例文件:
json{ "name": "node-echo", "version": "0.0.1", "description": "node-echo", "main": "example.js", <--- main属性 "dependencies": { }, "devDependencies": { "nodemon": "*" }, "engine": { "node": "*", "npm": "*" }, "scripts": { "dev": "nodemon --ignore node_modules/ server.js", "start": "node server.js" <-- start脚本 }, "keywords": [ "Echo" ], "license": "", }
oc rsync仅在OpenShift 3.1+版本中可用。
Dockerfile和其他源代码可在[***]Dockerfile,RHEL7的Dockerfile名为Dockerfile.rhel7,RHEL8的为Dockerfile.rhel8,Fedora的Dockerfile名为Dockerfile.fedora。===SHORT_DESC===
用于构建和运行Node.js 10应用程序的平台
===FULL_DESC===
此容器镜像包含Node.JS 10,作为Node.JS 10应用程序的S2I基础镜像。用户可选择基于RHEL、CentOS和Fedora的镜像。RHEL镜像可在Red Hat Container Catalog获取,CentOS镜像可在Quay.io获取,Fedora镜像可在Fedora Registry获取。生成的镜像可使用podman运行。
注意:虽然本README中的示例使用podman,但您可以将任何此类调用替换为docker,参数保持不变。
Node.js 10容器镜像是构建和运行各种Node.js 10应用程序和框架的基础平台。Node.js是基于Chrome的JavaScript运行时构建的平台,便于构建快速、可扩展的网络应用程序。Node.js采用事件驱动、非阻塞I/O模型,使其轻量且高效,非常适合在分布式设备上运行的数据密集型实时应用程序。
本示例假设您使用ubi8/nodejs-10镜像,该镜像可通过OpenShift中的nodejs:10镜像流标签获取。
要在OpenShift中构建简单的nodejs-sample-app应用程序:
oc new-app nodejs:10~[***]
访问应用程序:
$ oc get pods $ oc exec <pod> -- curl 127.0.0.1:8080
此镜像支持OpenShift中的源到镜像(S2I)策略。S2I是一个OpenShift框架,便于编写将应用源代码作为输入、使用构建器镜像(如本Node.js容器镜像)并生成运行组装后应用的新镜像的镜像。
为支持S2I框架,构建器镜像中包含以下重要脚本:
镜像内的/usr/libexec/s2i/assemble脚本用于生成包含应用artifacts的新镜像。该脚本获取给定应用的源代码并将其放置到镜像内的适当目录中。它利用Node.js应用开发中的一些常见模式(见下文“环境变量”部分)。
/usr/libexec/s2i/run脚本作为生成的容器镜像(包含应用artifacts的新镜像)的默认命令。它在生产环境中运行npm run,如果DEV_MODE设置为true(见下文“环境变量”部分),则使用nodemon。
与S2I策略相比,使用Dockerfile是构建包含应用程序的Node.js容器镜像的更灵活方式。当S2I不够灵活或在OpenShift环境外构建镜像时,使用Dockerfile。
要在Dockerfile中使用Node.js镜像,请按照以下步骤操作:
podman pull ubi8/nodejs-10
本示例使用UBI镜像ubi8/nodejs-10。此镜像可根据UBI最终用户许可协议(EULA)免费使用和再分发。有关UBI的更多信息,请参见UBI常见问题。
此处使用可从[***]
git clone [***] app-src
此步骤通常至少包括以下部分:
对于这三个部分,用户可以在Dockerfile中手动设置并显式使用nodejs和npm命令(3.1.),或者使用镜像内的S2I脚本(3.2.;有关这些脚本的更多信息,请参见上文“源到镜像(S2I)框架和脚本”部分),这些脚本已知道如何设置和运行一些常见的Node.js应用程序。
FROM ubi8/nodejs-10 # 添加应用源代码 ADD app-src . # 安装依赖项 RUN npm install # 运行脚本使用标准方式运行应用程序 CMD npm run -d start
FROM ubi8/nodejs-10 # 将应用源代码添加到assemble脚本期望的目录,并设置权限以使容器非root用户运行 USER 0 ADD app-src /tmp/src RUN chown -R 1001:0 /tmp/src USER 1001 # 安装依赖项 RUN /usr/libexec/s2i/assemble # 为生成的镜像设置默认命令 CMD /usr/libexec/s2i/run
podman build -t node-app .
podman run -d node-app
应用开发人员可使用以下环境变量在OpenShift中配置此镜像的运行时行为:
NODE_ENV
NodeJS运行模式(默认:"production")
DEV_MODE
当设置为"true"时,nodemon将用于在您工作时自动重新加载服务器(默认:"false")。将DEV_MODE设置为"true"会将NODE_ENV的默认值更改为"development"(如果未显式设置)。
NPM_RUN
选择在您的package.json文件的scripts部分
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429