func New(manifest Manifest, options ...Options) *Composer {
	opts := Options{}
	for _, o := range options {
		for k, v := range o {
			opts[k] = v
		}
	}
	return &Composer{manifest: manifest, options: opts}
}
New constructs a new Composer from a Manifest. A network name must also be
provided; it will be created and cleaned up when Run and Teardown are
called.
package duct
import (
	"context"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"log"
	"os"
	"os/signal"
	"path/filepath"
	"strings"
	"syscall"
	"time"
	dc "github.com/fsouza/go-dockerclient"
	"golang.org/x/sys/unix"
)
type Container struct {
	Name string
	Env []string
	PostCommands [][]string
	Command []string
	Entrypoint []string
	Image string
	BindMounts map[string]string
	LocalImage bool
	BootWait time.Duration
	AliveFunc func(context.Context, *dc.Client, string) error
	PortForwards map[int]int
	WaitForExit bool
	id       string  
	exitCode *int    
}
type Manifest []*Container
type Composer struct {
	manifest  Manifest
	options   Options
	netID     string
	sigCancel context.CancelFunc
}