// BuildImage builds the image according to specified options func (d *stiDocker) BuildImage(opts BuildImageOptions) error { dockerOpts := dockertypes.ImageBuildOptions{ Tags: []string{opts.Name}, NoCache: true, SuppressOutput: false, Remove: true, ForceRemove: true, } if opts.CGroupLimits != nil { dockerOpts.Memory = opts.CGroupLimits.MemoryLimitBytes dockerOpts.MemorySwap = opts.CGroupLimits.MemorySwap dockerOpts.CPUShares = opts.CGroupLimits.CPUShares dockerOpts.CPUPeriod = opts.CGroupLimits.CPUPeriod dockerOpts.CPUQuota = opts.CGroupLimits.CPUQuota } glog.V(2).Infof("Building container using config: %+v", dockerOpts) resp, err := d.client.ImageBuild(context.Background(), opts.Stdin, dockerOpts) if err != nil { return err } defer resp.Body.Close() // since can't pass in output stream to engine-api, need to copy contents of // the output stream they create into our output stream _, err = io.Copy(opts.Stdout, resp.Body) return err }
// BuildImage builds the image according to specified options func (d *stiDocker) BuildImage(opts BuildImageOptions) error { dockerOpts := dockertypes.ImageBuildOptions{ Tags: []string{opts.Name}, NoCache: true, SuppressOutput: false, Remove: true, ForceRemove: true, } if opts.CGroupLimits != nil { dockerOpts.Memory = opts.CGroupLimits.MemoryLimitBytes dockerOpts.MemorySwap = opts.CGroupLimits.MemorySwap dockerOpts.CPUShares = opts.CGroupLimits.CPUShares dockerOpts.CPUPeriod = opts.CGroupLimits.CPUPeriod dockerOpts.CPUQuota = opts.CGroupLimits.CPUQuota } glog.V(2).Infof("Building container using config: %+v", dockerOpts) ctx, cancel := getDefaultContext(((1<<63 - 1) * time.Nanosecond)) // infinite duration ... go does not expost max duration constant defer cancel() resp, err := d.client.ImageBuild(ctx, opts.Stdin, dockerOpts) if err != nil { return err } defer resp.Body.Close() // since can't pass in output stream to engine-api, need to copy contents of // the output stream they create into our output stream _, err = io.Copy(opts.Stdout, resp.Body) return err }