code: func from(b *Builder, args []string, attributes map[string]bool, flagArgs []string, original string) error {
  	switch {
  	case len(args) == 1:
  	case len(args) == 3 && len(args[0]) > 0 && strings.EqualFold(args[1], "as") && len(args[2]) > 0:
  
  	default:
  		return fmt.Errorf("FROM requires either one argument, or three: FROM <source> [as <name>]")
  	}
  
  	name := args[0]
  
  	// Support ARG before from
  	argStrs := []string{}
  	for n, v := range b.Args {
  		argStrs = append(argStrs, n+"="+v)
  	}
  	var err error
  	if name, err = ProcessWord(name, argStrs); err != nil {
  		return err
  	}
  
  	// Windows cannot support a container with no base image.
  	if name == NoBaseImageSpecifier {
  		if runtime.GOOS == "windows" {
  			return fmt.Errorf("Windows does not support FROM scratch")
  		}
  	}
  	b.RunConfig.Image = name
  	// TODO: handle onbuild
  	return nil
  }
docs: // FROM imagename
  //
  // This sets the image the dockerfile will build on top of.
  //