Building and Running Docker Containers from Node.js via Dockerton
Today I open sourced Dockerton, a Node.js wrapper library for Docker. In this post, I'll show you how you can generate a Dockerfile, build an image, and run containers from an easy-to-use JavaScript interface.
First up, if you want to check out the source, head over to GitHub.
Installation is easy, simply install via npm and you're good to go:
npm install --save dockerton
Next, we'll require Dockerton and create an instance:
var Dockerton = require('dockerton'); var dockerton = new Dockerton('dockerton-tutorial') .from('docker/whalesay', 'latest') .run('apt-get -y update && apt-get install -y fortunes') .cmd('/usr/games/fortune -a | cowsay');
As you can see, we're going to be recreating the Whalesay example from the Docker website.
Now that we've constructed an instance of Dockerton and issued our commands, we can generate a Dockerfile.
dockerton.dockerfile() .then(function(contents) { console.log("Generated Dockerfile:"); console.log(contents); });
Running the code as-is, you should see the following output:
Generated Dockerfile: FROM docker/whalesay:latest RUN apt-get -y update && apt-get install -y fortunes CMD /usr/games/fortune -a | cowsay
Now that we've generated a Dockerfile, we are all set to build and run an image:
dockerton.dockerfile() .then(function(contents) { console.log("Generated Dockerfile:"); console.log(contents); return dockerton.buildImage(); }) .then(function(imageDetails) { return dockerton.runImage(); });
Go ahead and run the program again and you should see output similar to:
_______________________________________ / The reasonable man adapts himself to \ | the world; the unreasonable one | | persists in trying to adapt the world | | to himself. Therefore all progress | | depends on the unreasonable man. | | | \ -- George Bernard Shaw / --------------------------------------- \ \ \ ## . ## ## ## == ## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/
Don't worry if your output doesn't match exactly, we use the fortunes program to randomize what the whale says.
And here's the full example:
var Dockerton = require('dockerton'); var dockerton = new Dockerton('dockerton-tutorial') .from('docker/whalesay', 'latest') .run('apt-get -y update && apt-get install -y fortunes') .cmd('/usr/games/fortune -a | cowsay'); dockerton.dockerfile() .then(function(contents) { console.log("Generated Dockerfile:"); console.log(contents); return dockerton.buildImage(); }) .then(function(imageDetails) { return dockerton.runImage(); });
Pretty simple right? Dockerton supports all Dockerfile commands, as well as command-line arguments and more. Head over to GitHub for the full documentation, and for more examples.