froq-docker
v0.0.22
Published
Integration Testing environment orchestration made easy for Docker.
Downloads
22
Maintainers
Readme
froq-docker
froq-docker
is partially implemented according to Docker Engine 1.37. This still a WIP project and there is a lot to do. We also tried to give the same name as in the docker API, so some attributes are just called t
, but you can easily find them in the docs.
Usage
npm install froq-docker
We use npm package debug
. To make me verbose use DEBUG=froq-docker
.
Create Docker
At current we only support socket file.
import {Docker} from 'froq-docker';
const docker = Docker.fromSocket();
Start Container
const image = await docker.pull({fromImage: 'library/httpd', tag: 'latest'});
const container = await image.createContainer({
data: {
HostConfig: {
PortBindings: {
'80/tcp': [
{HostPort: ''} // any port
]
}
}
}
});
await container.start();
const inspection = await container.inspect();
const address = inspection.getFirstHostAddress('80/tcp');
// open browser with `address`
Build Image
// it should contain:
// 1. Dockerfile
// 2. all resources reference in Dockerfile
const buildTar = 'build.tar.gz';
// stats from tar file
const stats = await stat(buildTar);
// create read stream for tar file
const writeStream = fs.createReadStream(buildTar);
// build image
const image = await docker.build({
t: 'mynewimage',
writeStream,
contentType: 'application/x-gzip'
});
// use it
const container = await image.createContainer({
data: {
HostConfig: {
PortBindings: {
'80/tcp': [
{HostPort: ''}
]
}
}
}
});
Cleanup Container
await container.stop();
await container.wait();
await container.remove();
Cleanup Image
await image.remove();
List all Containers
const containers = await docker.listContainers();
List all Images
const images = await docker.listImages();
Attach Container
await container.attach(raw => {
raw.stdout.on('data', chunk => {
// what the container writes to stdout
});
raw.stderr.on('data', chunk => {
// what the container writes to stderr
});
// close raw stream
// raw.end()
});
Exec Container
const exec = await container.createExec({
AttachStdin: true,
AttachStdout: true,
AttachStderr: true,
DetachKeys: 'ctrl-p,ctrl-q',
Tty: true,
Cmd: [
'/bin/bash'
]
});
await exec.start({
Detach: false,
Tty: true
}, duplex => {
duplex.out.on('data', chunk => {
console.log(`server writes: ${chunk.toString()}`);
});
duplex.write('echo "Awesome!"\n').then(() => {
duplex.end();
});
});
Tests
To get a better understanding, also read the Tests