code: func (containers Containers) Provision(nocache bool, parallel int) {
  	var (
  		throttle = make(chan struct{}, parallel)
  		wg       sync.WaitGroup
  	)
  	if parallel != 1 {
  		// As we won't dump the result of provisioning until the first
  		// image succeeds, give some early feedback so that the operator
  		// does not feel it's stuck
  		fmt.Println("Provisioning containers ...")
  	}
  	for _, container := range containers.stripProvisioningDuplicates() {
  		if parallel > 0 {
  			throttle <- struct{}{}
  		}
  		wg.Add(1)
  		go func(container Container) {
  			var out, err bytes.Buffer
  			defer func() {
  				out.WriteTo(os.Stdout)
  				err.WriteTo(os.Stderr)
  				handleRecoveredError(recover())
  				if parallel > 0 {
  					<-throttle
  				}
  				wg.Done()
  				container.SetCommandsOutput(nil, nil)
  			}()
  			if parallel != 1 {
  				// Prevent parallel provisioning output interlacing
  				// by redirecting the outputs to buffers
  				container.SetCommandsOutput(&out, &err)
  			}
  			container.Provision(nocache)
  		}(container)
  	}
  	wg.Wait()
  }
docs: // Provision containers.