0.0.22 • Published 8 years ago
froq-docker v0.0.22
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