Using this image with OpenShift oc
command line tool, or with s2i
directly, will
assemble your application source with its required dependencies, creating a new
container image. This image contains your built Modern Web Application.
The built files will be located in /opt/app-root/output
The oc
command-line tool can be
used to start a build, layering your desired Web Application REPO_URL
sources into a ubi8
image with your selected RELEASE
of Node.js via the following command format:
oc new-app nodeshift/ubi8-s2i-web-app:latest~https://github.com/lholmquist/react-web-app
The Source2Image cli tools are available as a standalone project, allowing you to run your application directly in Docker.
This example will produce a new Docker image named webapp
:
s2i build https://github.com/nodeshift/ubi8-s2i-web-app --context-dir=test/test-react-app/ nodeshift/ubi8-s2i-web-app:latest webapp
Then you can run the application image like this.
docker run -p 8080:8080 --rm -it webapp
Use the following environment variables to configure the runtime behavior of the application image created from this builder image.
NAME | Description |
---|---|
OUTPUT_DIR | Sets the location of the output directory |
NPM_BUILD | Override the default "npm run build" |
NPM_RUN | Override the default "npx serve" command |
YARN_BUILD | Override the default "yarn build" |
YARN_ENABLED | Use "yarn" instead of "npm" |
DEPLOY_PORT | Override the default(8080) port that the serve module uses |
NPM_MIRROR | Sets the npm registry URL |
HTTP_PROXY | use an npm proxy during assembly |
HTTPS_PROXY | use an npm proxy during assembly |
NO_PROXY | set URLs that should be excluded from proxying during assembly |
One way to define a set of environment variables is to include them as key value pairs
in a .s2i/environment
file in your source repository.
Example: DATABASE_USER=sampleUser
While it is recommended to just use this image as a pure builder image, it can also be used for development.
Taking React as an example, you can deploy your React Application to Openshift using something like this:
npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --build.env YARN_ENABLED=true --deploy.env NPM_RUN="npx yarn start" --deploy.port=3000 --expose
This will deploy the application and start the React Dev server(yarn start).
Make sure to do this on your code directory, chmod -R g+w .
, it is needed for the next step
Then you can use the oc rsync
command to push changes from your local machine to your running deployment:
oc rsync --progress --watch ./src POD_NAME:/opt/app-root/src
note: a quick way to get a pod name is oc get pods | grep react-web-app | grep Running | awk '{print $1}'
Make a change locally, and it will be pushed to your running deployment, where the react dev server will recompile your app and refresh your browser.