# docker-compose

`docker-compose` is a small library that allows you to run [docker-compose](https://docs.docker.com/compose/) via Node. The docker-compose executable is still required.

Fork of https://github.com/PDMLab/docker-compose

## Installation

```
npm install --save @dgsh/docker-compose
```

## Usage

`docker-compose` current supports these commands:

- `upAll(options)` - Create and start containers - always uses the `-d` flag due to non interactive mode
- `pullAll(options)` - Pulls images associated with the services
- `upMany(services, options)` - Create and start containers specified in `services` - always uses the `-d` flag due to non interactive mode
- `upOne(service, options)` - Create and start container specified in `service` - always uses the `-d` flag due to non interactive mode
- `containers(options)` - Returns IDs of running containers
- `down(options)` - Stop and remove containers, networks, images, and volumes
- `kill(options)` - Kill containers
- `stop(options)` - Stop services
- `rm(options)` - Remove stopped containers - always uses the `-f` flag due to non interactive mode
- `exec(container, command, options)` - Exec `command` inside `container`, uses `-T` to properly handle stdin & stdout
- `run(container, command, options)` - Run `command` inside `container`, uses `-T` to properly handle stdin & stdout
- `buildAll(options)` - Build all images
- `buildMany(services, options)` - Build images of specified services
- `buildOne(service, options)` - Build image of specified service
- `port(service, port, protocol, options)` - Returns host port for exposed service port

All commands return a `Promise({object})` with an stdout and stderr strings

```javascript
{
  out: 'stdout contents'
  err: 'stderr contents'
}
```

### Options

`docker-compose` accepts these params:

- `cwd {string}`: mandatory folder path to the `docker-compose.yml`
- `config {(string|string[])}`: custom and/or multiple yml files can be specified (relative to `cwd`)
- `[log] {boolean}`: optional setting to enable console logging (output of `docker-compose` `stdout`/`stderr` output)

### Example

To start containers based on the `docker-compose.yml` file in your current directory, just call `compose.up` like this:

```javascript
const DockerCompose = require('@dgsh/docker-compose')
const compose = new DockerCompose({
  cwd: path.join(__dirname),
  log: false
})

compose.up().then(
  () => {
    console.log('done')
  },
  (err) => {
    console.log('something went wrong:', err.message)
  }
)
```

To execute command inside a running container

```javascript
compose.exec('node', 'npm install', { log: true })
```
