docs: def deploy_containers(self, commercial_invoice, tag=None, env=None):
          """
          Deploy containers to specific container ship.
          'restart_policy' = {"maximum_retry_count": 5, "name": "always"}
          """
          commercial_invoice = self.__validate_commercial_invoice(commercial_invoice, 'deploy')
  
          fleet = self.__assemble_fleet(commercial_invoice)
          logger.info('Running deploy.')
  
          try:
              for address, container_ship in six.iteritems(fleet):
                  # write state file
                  self.__write_state_file(address, commercial_invoice.data_center, commercial_invoice.environment)
  
                  # get new transport service for each container ship
                  transport_service = commercial_invoice.transport_service
  
                  # if source tag is provided override what was parsed in image.
                  if tag:
                      transport_service.source_tag = tag
  
                  # if env is provided merge what has been passed.
                  if env:
                      transport_service.container_config.merge_env(env)
  
                  # during a deploy always restart containers on failure. if detach is true.
                  if transport_service.container_config.detach:
                      transport_service.host_config.restart_policy = {"maximum_retry_count": 5, "name": "always"}
  
                  # validate service configs for deployment
                  self.__service_deployment_validation(transport_service)
  
                  # check with dispatch to see if its okay to export.
                  self.__wait_for_dispatch(address)
  
                  logger.info("dispatching service: {0} on host: {1}.".format(transport_service.alias, address))
                  self.__dispatch(container_ship, transport_service)
  
                  if self._bill_of_lading.get('failures'):
                      container_ship.recall_service(transport_service)
                  else:
                      container_ship.offload_previous_containers(transport_service)
                      # clean up service expired service cargo.
                      container_ship.offload_expired_service_cargo(transport_service)
  
              return False if self._bill_of_lading.get('failures') else True
          finally:
              # complete distribution and delete state file.
              self.__complete_distribution(commercial_invoice)