code: func (b *Builder) From(node *parser.Node) (string, error) {
  	if err := b.extractHeadingArgsFromNode(node); err != nil {
  		return "", err
  	}
  	children := SplitChildren(node, command.From)
  	switch {
  	case len(children) == 0:
  		return "", ErrNoFROM
  	case len(children) > 1:
  		return "", fmt.Errorf("multiple FROM statements are not supported")
  	default:
  		step := b.Step()
  		if err := step.Resolve(children[0]); err != nil {
  			return "", err
  		}
  		if err := b.Run(step, NoopExecutor, false); err != nil {
  			return "", err
  		}
  		return b.RunConfig.Image, nil
  	}
  }
docs: // From returns the image this dockerfile depends on, or an error
  // if no FROM is found or if multiple FROM are specified. If a
  // single from is found the passed node is updated with only
  // the remaining statements.  The builder's RunConfig.Image field
  // is set to the first From found, or left unchanged if already
  // set.