This container image includes Node.JS 8 as a S2I base image for your Node.JS 8 applications. Users can choose between RHEL and CentOS based builder images. The RHEL image is available in the Red Hat Container Catalog as registry.access.redhat.com/rhscl/nodejs-8-rhel7. The CentOS image is then available on Docker Hub as centos/nodejs-8-centos7. The resulting image can be run using Docker.
Node.js 8 available as container is a base platform for building and running various Node.js 8 applications and frameworks. Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
To build a simple nodejs-sample-app application using standalone S2I and then run the resulting image with Docker execute:
-
For RHEL based image
$ s2i build https://github.com/sclorg/s2i-nodejs-container.git --context-dir=8/test/test-app/ rhscl/nodejs-8-rhel7 nodejs-sample-app $ docker run -p 8080:8080 nodejs-sample-app
-
For CentOS based image
$ s2i build https://github.com/sclorg/s2i-nodejs-container.git --context-dir=8/test/test-app/ centos/nodejs-8-centos7 nodejs-sample-app $ docker run -p 8080:8080 nodejs-sample-app
Accessing the application:
$ curl 127.0.0.1:8080
Application developers can use the following environment variables to configure the runtime behavior of this image:
NODE_ENV
NodeJS runtime mode (default: "production")
DEV_MODE
When set to "true", nodemon
will be used to automatically reload the server while you work (default: "false"). Setting DEV_MODE
to "true" will change the NODE_ENV
default to "development" (if not explicitly set).
NPM_RUN
Select an alternate / custom runtime mode, defined in your package.json
file's scripts
section (default: npm run "start"). These user-defined run-scripts are unavailable while DEV_MODE
is in use.
HTTP_PROXY
Use an npm proxy during assembly
HTTPS_PROXY
Use an npm proxy during assembly
NPM_MIRROR
Use a custom NPM registry mirror to download packages during the build process
One way to define a set of environment variables is to include them as key value pairs in your repo's .s2i/environment
file.
Example: DATABASE_USER=sampleUser
The following package.json
example includes a scripts.dev
entry. You can define your own custom NPM_RUN
scripts in your application's package.json
file.
To alter the level of logs output during an npm install
the npm_config_loglevel environment variable can be set. See npm-config.
This image supports development mode. This mode can be switched on and off with the environment variable DEV_MODE
. DEV_MODE
can either be set to true
or false
.
Development mode supports two features:
- Hot Deploy
- Debugging
A simple example command for running the container in development mode is:
docker run --env DEV_MODE=true my-image-id
To run the container in development mode with a debug port of 5454, run:
$ docker run --env DEV_MODE=true my-image-id
To run the container in production mode, run:
$ docker run --env DEV_MODE=false my-image-id
As part of development mode, this image supports hot deploy. If development mode is enabled, any souce code that is changed in the running container will be immediately reflected in the running nodejs application.
To change your source code in a running container, use Docker's exec command:
$ docker exec -it <CONTAINER_ID> /bin/bash
After you Docker exec into the running container, your current directory is set to /opt/app-root/src
, where the source code for your application is located.
If you have deployed the container to OpenShift, you can use oc rsync to copy local files to a remote container running in an OpenShift pod.
The default behaviour of the s2i-nodejs container image is to run the Node.js application using the command npm start
. This runs the start script in the package.json file. In developer mode, the application is run using the command nodemon
. The default behaviour of nodemon is to look for the main attribute in the package.json file, and execute that script. If the main attribute doesn't appear in the package.json file, it executes the start script. So, in order to achieve some sort of uniform functionality between production and development modes, the user should remove the main attribute.
Below is an example package.json file with the main attribute and start script marked appropriately:
{
"name": "node-echo",
"version": "0.0.1",
"description": "node-echo",
"main": "example.js", <--- main attribute
"dependencies": {
},
"devDependencies": {
"nodemon": "*"
},
"engine": {
"node": "*",
"npm": "*"
},
"scripts": {
"dev": "nodemon --ignore node_modules/ server.js",
"start": "node server.js" <-- start script
},
"keywords": [
"Echo"
],
"license": "",
}
oc rsync
is only available in versions 3.1+ of OpenShift.
Dockerfile and other sources are available on https://github.com/sclorg/s2i-nodejs-container. In that repository you also can find another versions of Python environment Dockerfiles. Dockerfile for CentOS is called Dockerfile, Dockerfile for RHEL is called Dockerfile.rhel7.