【问题标题】:Creating a custom NodeJSDocker image on rhel7在 rhel7 上创建自定义 NodeJSDocker 镜像
【发布时间】:2019-09-18 21:46:30
【问题描述】:

我正在为我的组织构建一些基础 Docker 映像,供应用程序团队在 OpenShift 中部署应用程序时使用。我必须制作的图像之一是 NodeJS 图像(我们希望我们的图像是内部的,而不是来自 DockerHub)。我正在 RedHat 的 RHEL7 Universal Base Image (ubi) 上构建。但是,我无法将 NodeJS 配置为在容器中工作。这是我的 Dockerfile:

FROM myimage_rhel7_base:1.0

USER root

RUN INSTALL_PKGS="rh-nodejs10 rh-nodejs10-npm rh-nodejs10-nodejs-nodemon nss_wrapper" && \
    yum install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \
    rpm -V $INSTALL_PKGS && \
    yum clean all

USER myuser

但是,当我运行映像时,没有可用的 nodenpm 命令,除非我运行 scl enable rh-nodejs10 bash。这在 Dockerfile 中不起作用,因为它创建了一个对访问容器的用户不可用的子 shell。

我尝试从源代码安装,但我遇到了需要升级 gcc/g++ 版本的不同问题,尽管它们在我的组织的配置存储库中不可用。我还认为,如果我可以从包管理器中让 NodeJS 工作,它将有助于获取安全补丁,并且应该更新包。

我的问题是,创建可用于构建在 NodeJS 上运行的应用程序的图像的推荐步骤是什么?

【问题讨论】:

    标签: node.js docker redhat yum


    【解决方案1】:

    在这种情况下,最好的代码可能是您根本不编写的代码。看看https://github.com/sclorg/s2i-nodejs-container

    这是一个创建安装了 nodejs 的图像的项目。这可能是一个开箱即用的完美解决方案,或者它也可以作为您尝试构建的一个很好的示例。

    此外,他们的自述文件试图描述他们如何绕过 scl enable 命令。

    通常,SCL 需要手动操作才能启用您的收藏 想用。这是繁重的并且容易出错。这 OpenShift S2I 方法是设置服务的 Bash 环境变量 自动启用所需的集合:

    • BASH_ENV:为所有非交互式 Bash 会话启用集合
    • ENV:启用所有/bin/sh 调用的集合
    • PROMPT_COMMAND:在交互式 shell 中启用集合

    两个例子: * 如果您指定BASH_ENV,那么您所有的#!/bin/bash 脚​​本都不需要调用scl enable。 * 如果指定PROMPT_COMMAND,则在执行podman exec ... /bin/bash 命令时,将自动收集 已启用。

    【讨论】:

      【解决方案2】:

      我最终决定使用二进制文件而不是我们的 rpm 服务器来安装节点。这是实现

      FROM myimage_rhel7_base:1.0
      
      USER root
      
      # Get node distribution from nexus and install it
      RUN   wget -P /tmp http://myrepo.example.com/repository/node/node-v10.16.3-linux-x64.tar.xz && \
            tar -C /usr/local --strip-components 1 -xf /tmp/node-v10.16.3-linux-x64.tar.xz && \
            rm /tmp/node-v10.16.3-linux-x64.tar.xz
      
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-18
        • 2021-12-12
        • 2022-11-11
        • 2019-12-21
        • 2021-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多