Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/AgustinCB/docker-api
Docker Remote API driver for node.js. It uses the same modem than dockerode, but the interface is promisified and with a fancier syntax.
https://github.com/AgustinCB/docker-api
Last synced: 2 months ago
JSON representation
Docker Remote API driver for node.js. It uses the same modem than dockerode, but the interface is promisified and with a fancier syntax.
- Host: GitHub
- URL: https://github.com/AgustinCB/docker-api
- Owner: AgustinCB
- License: gpl-3.0
- Created: 2016-07-05T21:43:49.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-09-25T15:54:11.000Z (over 1 year ago)
- Last Synced: 2024-10-07T01:35:14.426Z (3 months ago)
- Language: TypeScript
- Homepage:
- Size: 1.28 MB
- Stars: 305
- Watchers: 5
- Forks: 50
- Open Issues: 31
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-web-cn - docker-api - nodejs 版的 docker 客户端 (Uncategorized / Uncategorized)
- awesome-list - docker-api
README
# docker-api
[![travis-ci](https://travis-ci.org/AgustinCB/docker-api.png?branch=master)](https://travis-ci.org/AgustinCB/docker-api)Docker Remote API driver for node.js. It uses the same modem than [dockerode](https://github.com/apocas/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](https://docs.docker.com/engine/api/v1.30), including experimental stuff such as plugins.
Check the [reference](https://agustincb.github.io/docker-api/) and the [tests](https://github.com/AgustinCB/docker-api/tree/master/test) for full examples.
## Installation
```console
$ npm install node-docker-api
```## Usage
You can find more into the [examples folder](https://github.com/AgustinCB/docker-api/tree/master/examples)
### Create, start, stop, restart and remove a container
``` js
'use strict';
const {Docker} = require('node-docker-api');const 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
``` js
'use strict';
const {Docker} = require('node-docker-api');const docker = new Docker({ socketPath: '/var/run/docker.sock' });
// List
docker.container.list()
// Inspect
.then(containers => containers[0].status())
.then(container => container.top())
.then(processes => console.log(processes))
.catch(error => console.log(error));
```### List, inspect and stat containers
``` js
'use strict';
const {Docker} = require('node-docker-api');const docker = new Docker({ socketPath: '/var/run/docker.sock' });
// List
docker.container.list()
// Inspect
.then(containers => containers[0].status())
.then(container => container.stats())
.then(stats => {
stats.on('data', stat => console.log('Stats: ', stat.toString()))
stats.on('error', err => console.log('Error: ', err))
})
.catch(error => console.log(error));
```### Get logs of a container
```js
'use strict';
const {Docker} = require('node-docker-api');const 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
``` js
const {Docker} = require('node-docker-api');
const fs = require('fs');const 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 => {
const file = fs.createWriteStream("container.tar");
file.end(content)
})
.catch(error => console.log(error));
```### Manipulate file system in a container
``` js
'use strict';
const fs = require('fs');
const {Docker} = require('node-docker-api');const promisifyStream = stream => new Promise((resolve, reject) => {
stream.on('data', data => console.log(data.toString()))
stream.on('end', resolve)
stream.on('error', reject)
});const 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 => {
const 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
``` js
'use strict';
const {Docker} = require('node-docker-api');const promisifyStream = stream => new Promise((resolve, reject) => {
stream.on('data', data => console.log(data.toString()))
stream.on('end', resolve)
stream.on('error', reject)
});const 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.exec.create({
AttachStdout: true,
AttachStderr: true,
Cmd: [ 'echo', 'test' ]
})
})
.then(exec => {
return exec.start({ Detach: false })
})
.then(stream => promisifyStream(stream))
.then(() => _container.kill())
.catch(error => console.log(error));
```### Build, inspect and remove an image
``` js
'use strict';
const {Docker} = require('node-docker-api');
const tar = require('tar-fs');const promisifyStream = stream => new Promise((resolve, reject) => {
stream.on('data', data => console.log(data.toString()))
stream.on('end', resolve)
stream.on('error', reject)
});const 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.get('testimg').status())
.then(image => image.remove())
.catch(error => console.log(error));
```### Pull and check history of an image
``` js
'use strict';
const {Docker} = require('node-docker-api');const promisifyStream = (stream) => new Promise((resolve, reject) => {
stream.on('data', (d) => console.log(d.toString()))
stream.on('end', resolve)
stream.on('error', reject)
})const docker = new Docker({ socketPath: '/var/run/docker.sock' })
return docker.image.create({}, { fromImage: 'ubuntu', tag: 'latest' })
.then(stream => promisifyStream(stream))
.then(() => docker.image.get('ubuntu').status())
.then(image => image.history())
.then(events => console.log(events))
.catch(error => console.log(error))
```### Fetch events from docker
``` js
'use strict'
const fs = require('fs');
const {Docker} = require('node-docker-api');const promisifyStream = stream => new Promise((resolve, reject) => {
stream.on('data', data => console.log(data.toString()))
stream.on('end', resolve)
stream.on('error', reject)
})const docker = new Docker({ socketPath: '/var/run/docker.sock' })
docker.events({
since: ((new Date().getTime() / 1000) - 60).toFixed(0)
})
.then(stream => promisifyStream(stream))
.catch(error => console.log(error))
```