docker-api
Docker Remote API driver for node.js. It uses the same modem than dockerode, but the interface is promisified and with a different syntax.
Support for:
- streams
- stream demux
- entities
- run
- tests
- promises
- full es6 support
The current status of the package is in beta state. This module covers the full API reference, including experimental stuff such as plugins.
Check the reference and the tests for full examples.
Installation
npm install node-docker-api
Usage
Create, start, stop, restart and remove a container
const Docker = require('node-docker-api').Docker
let docker = new Docker({ socketPath: '/var/run/docker.sock' })
docker.container.create({
Image: 'ubuntu',
name: 'test'
})
.then((container) => container.start())
.then((container) => container.stop())
.then((container) => container.restart())
.then((container) => container.delete({ force: true }))
.catch((error) => console.log(error))
List, inspect and top containers
const Docker = require('node-docker-api').Docker
let docker = new Docker({ socketPath: '/var/run/docker.sock' })
docker.container.list()
.then((containers) => containers[0].status())
.then((container) => container.top())
.then((processes) => console.log(processes))
.catch((error) => console.log(error))
List, inspect and stat containers
const Docker = require('node-docker-api').Docker
let docker = new Docker({ socketPath: '/var/run/docker.sock' })
docker.container.list()
.then((containers) => containers[0].status())
.then((container) => container.stats())
.then((stats) => {
stats.on('data', (stat) => console.log('Stats: ',stat))
stats.on('error', (err) => console.log('Error: ', err))
})
.catch((error) => console.log(error))
Get logs of a container
const Docker = require('node-docker-api').Docker
let docker = new Docker({ socketPath: '/var/run/docker.sock' })
let container
docker.container.create({
Image: 'ubuntu',
name: 'test'
})
.then((container) => container.logs({
follow: true,
stdout: true,
stderr: true
}))
.then((stream) => {
stream.on('data', (info) => console.log(info))
stream.on('error', (err) => console.log(err))
})
.catch((error) => console.log(error))
Export a container
const Docker = require('node-docker-api').Docker,
fs = require('fs')
let docker = new Docker({ socketPath: '/var/run/docker.sock' })
let container
docker.container.create({
Image: 'ubuntu',
name: 'test'
})
.then((container) => container.start())
.then((container) => container.export())
.then((content) => {
let file = fs.createWriteStream("container.tar");
file.end(content)
})
.catch((error) => console.log(error))
Manipulate file system in a container
const Docker = require('node-docker-api').Docker,
fs = require('fs')
const promisifyStream = (stream) => new Promise((resolve, reject) => {
stream.on('data', (d) => console.log(d.toString()))
stream.on('end', resolve)
stream.on('error', reject)
})
let docker = new Docker({ socketPath: '/var/run/docker.sock' })
let container
docker.container.create({
Image: 'ubuntu',
Cmd: [ '/bin/bash', '-c', 'tail -f /var/log/dmesg' ],
name: 'test'
})
.then((container) => container.start())
.then((_container) => {
container = _container
return _container.fs.put('./file.tar', {
path: 'root'
})
})
.then((stream) => promisifyStream(stream))
.then(() => container.fs.get({ path: '/var/log/dmesg' }))
.then((stream) => {
let file = fs.createWriteStream("file.jpg");
stream.pipe(file)
return promisifyStream(stream)
})
.then(() => container.status())
.then((container) => container.stop())
.catch((error) => console.log(error))
Execute commands and kill containers
const Docker = require('node-docker-api').Docker
const promisifyStream = (stream) => new Promise((resolve, reject) => {
console.log(stream);
stream.on('data', (d) => console.log(d.toString()))
stream.on('end', resolve)
stream.on('error', reject)
})
let docker = new Docker({ socketPath: '/var/run/docker.sock' })
docker.container.create({
Image: 'ubuntu',
Cmd: [ '/bin/bash', '-c', 'tail -f /var/log/dmesg' ],
name: 'test'
})
.then((container) => container.start())
.then((_container) => {
container = _container
return container.exec.create({
Cmd: [ "top" ]
})
})
.then((exec) => {
return exec.start()
})
.then((stream) => {
stream.on('data', (info) => {
console.log(info.toString())
_container.kill()
})
stream.on('error', (err) => console.log(err))
})
.catch((error) => console.log(error))
Build, inspect and remove an image
const Docker = require('node-docker-api').Docker,
tar = require('tar-fs')
const promisifyStream = (stream) => new Promise((resolve, reject) => {
stream.on('data', (d) => console.log(d.toString()))
stream.on('end', resolve)
stream.on('error', reject)
})
let docker = new Docker({ socketPath: '/var/run/docker.sock' })
var tarStream = tar.pack('/path/to/Dockerfile')
docker.image.build(tarStream, {
t: 'testimg'
})
.then((stream) => promisifyStream(stream))
.then(() => docker.image.status('testimg'))
.then((image) => image.remove())
.catch((error) => console.log(error))
Pull and check history of an image
const Docker = require('node-docker-api').Docker
const promisifyStream = (stream) => new Promise((resolve, reject) => {
stream.on('data', (d) => console.log(d.toString()))
stream.on('end', resolve)
stream.on('error', reject)
})
let docker = new Docker({ socketPath: '/var/run/docker.sock' })
return docker.image.create({}, { fromImage: 'ubuntu', tag: 'latest' })
.then((stream) => promisifyStream(stream))
.then(() => docker.image.status('ubuntu'))
.then((image) => image.history())
.then((events) => console.log(events))
.catch((error) => console.log(error))
Fetch events from docker
const Docker = require('node-docker-api').Docker,
fs = require('fs')
const promisifyStream = (stream) => new Promise((resolve, reject) => {
stream.on('data', (d) => console.log(data))
stream.on('end', resolve)
stream.on('error', reject)
})
let docker = new Docker({ socketPath: '/var/run/docker.sock' })
docker.events({
since: ((new Date().getTime() / 1000) - 60).toFixed(0)
})
.then((container) => container.events())
.then((stream) => promisifyStream(stream))
.catch((error) => console.log(error))