code: func NewCopyCommand(dockerCli command.Cli) *cobra.Command {
  	var opts copyOptions
  
  	cmd := &cobra.Command{
  		Use: `cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
  	docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH`,
  		Short: "Copy files/folders between a container and the local filesystem",
  		Long: strings.Join([]string{
  			"Copy files/folders between a container and the local filesystem\n",
  			"\nUse '-' as the source to read a tar archive from stdin\n",
  			"and extract it to a directory destination in a container.\n",
  			"Use '-' as the destination to stream a tar archive of a\n",
  			"container source to stdout.",
  		}, ""),
  		Args: cli.ExactArgs(2),
  		RunE: func(cmd *cobra.Command, args []string) error {
  			if args[0] == "" {
  				return errors.New("source can not be empty")
  			}
  			if args[1] == "" {
  				return errors.New("destination can not be empty")
  			}
  			opts.source = args[0]
  			opts.destination = args[1]
  			return runCopy(dockerCli, opts)
  		},
  	}
  
  	flags := cmd.Flags()
  	flags.BoolVarP(&opts.followLink, "follow-link", "L", false, "Always follow symbol link in SRC_PATH")
  	flags.BoolVarP(&opts.copyUIDGID, "archive", "a", false, "Archive mode (copy all uid/gid information)")
  	return cmd
  }
docs: // NewCopyCommand creates a new `docker cp` command