Skip to content

DEFRA/defra-docker-node

Repository files navigation

Docker Node

This repository contains Node parent Docker image source code for Defra.

The following table lists the versions of node available, and the parent Node.js image they are based on:

Node version Parent image
18.20.6 18.20.6-alpine3.21
20.18.2 20.18.2-alpine3.21
22.13.1 22.13.1-alpine3.21

Two parent images are created for each version:

  • defra-node
  • defra-node-development

It is recommended that services use multi-stage builds to produce production and development images, each extending the appropriate parent, from a single Dockerfile.

Examples are provided to show how parent images can be extended for different types of services. These should be a good starting point for building Node services conforming to Defra standards.

Building images locally

To build the images locally, run:

docker build . --no-cache --target <target> .

(where <target> is either development or production).

This will build an image using the default BASE_VERSION as set in the Dockerfile.

Internal CA certificates

The image includes the certificate for the internal CA so that traffic can traverse the network without encountering issues.

Versioning

Images should be tagged according to the Dockerfile version and the version of Node on which the image is based. For example, for Dockerfile version 1.0.0 based on Node 12.16.0, the built image would be tagged 1.0.0-node12.16.0.

Any new features or changes to supported Node or Alpine versions will be published as minor version updates. Any breaking changes to dependencies or how images can be consumed will be published as major updates.

Example files

Dockerfile.web - This is an example web project, that requires a build step to create some static files that are used by the web front end.

Dockerfile.service - This is an example project that doesn't expose any external ports (a message based service). There is also no build step in this Dockerfile.

CI/CD

On commit GitHub Actions will build both node and node-development images for the Node.js versions listed in the image-matrix.json file, and perform a vulnerability scan as described below.

In addition a commit to the master branch will push the images to the defradigital organisation in Docker Hub using the version tag specified in the JOB.env file. This version tag is expected to be manually updated on each release.

In addition to the version, the images will also be tagged with the contents of the tags array from image-matrix.json when pushed to Docker Hub.

Image vulnerability scanning

A GitHub Action runs a nightly Anchore Grype scan of the image published to Docker, and will build and scan pre-release images on push. At present the latest Node.js 18, 20 and 22 images are scanned.

This ensures Defra services that use the parent images are starting from a known secure foundation, and can limit patching to only newly added libraries.

For more details see Image Scanning

Convenience script

A simple convenience script bump is provided to substitute version in the files Dockerfile, README.md, and image-matrix.json.

The 'from' and 'to' values to substitute are separated by a colon, and multiple arguments must be separated by a space.

i.e. ./bump 16.13.0:16.18.1 14.18.1:14.21.1 will replace all instances of 16.13.0 with 16.18.1 and all instances of 14.18.1 with 14.21.1.

Licence

THIS INFORMATION IS LICENSED UNDER THE CONDITIONS OF THE OPEN GOVERNMENT LICENCE found at:

http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3

The following attribution statement MUST be cited in your products and applications when using this information.

Contains public sector information licensed under the Open Government license v3

About the licence

The Open Government Licence (OGL) was developed by the Controller of Her Majesty's Stationery Office (HMSO) to enable information providers in the public sector to license the use and re-use of their information under a common open licence.

It is designed to encourage use and re-use of information freely and flexibly, with only a few conditions.

About

Node.js Docker parent image

Resources

License

Stars

Watchers

Forks

Packages

No packages published