Docker container builds for nodejs projects
Automatically build Docker images and run Docker contains for a project with support for npm.
Features
- Automatically tag Docker images with version numbers
- Release and push Docker images after testing
- Integrated into npm plugin hooks
- Support for npm layers to speed up and share package installs in containers
- Support for Docker files as EJS templates
install
$ npm install --save containr
Quickstart
Build a container (default filename is Dockerfile
) with the latest git tag
$ containr build <filename>
Push a dev tag to the repository:
$ containr push dev
Build, tag and push the latest
tag and the npm version:
$ containr release
Setup a prepublish script that auto-builds and pushes the Docker container tagged as latest
:
In package.json
:
... "script":
Auto build and push the container tagged with the latest npm release version:
In package.json
:
... "scripts":
then:
$ npm version patch<images build with new version ... >
Workflow Example
Create a new repo for a Docker image from an example package:
$ mkdir test-project$ cd test-project$ npm init -y$ npm install -S express$ npm install -S containr
Set it up as a git
repository (required):
$ git init$ git add .$ git ci -m 'init'
Create a simple example app:
$ cat << EOF >> server.jsconst express = require;let app = app.get; EOF$
Edit the package.json
and add an npm hook for postversion which will build the container:
Create a simple Dockerfile.ejs
with npm package layer support:
layer.npm
accepts a single parameter which is the base image to build from. It defaults to Alpine Linux node.
$ cat << EOF > Dockerfile.ejs> FROM <% >> WORKDIR /src> ADD . /src> EXPOSE 3080> CMD ["/usr/bin/npm", "start"]> EOF
Test the build:
$ containr test
Custom Repositories
To define a custom repository to push your images to, define them in package.json
as a repository of type docker.
Example:
"repositories": ,
Commands
build
- build a containertag
- tag a container with the default package versionpush
- push to the reporelease
- mark the current image release as latest and pushtest
- test the image in a temporary containerrun
- run the container