froq-docker

0.0.22 • Public • Published

froq-docker

npm node

Travis branch Coveralls github

license GitHub tag GitHub issues GitHub last commit GitHub top language GitHub code size in bytes

froQ logo

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

Package Sidebar

Install

npm i froq-docker

Weekly Downloads

1

Version

0.0.22

License

MIT

Unpacked Size

45.8 kB

Total Files

16

Last publish

Collaborators

  • daaitch