code: def push(self, image_id, service_name, tag=None, namespace=None, url=None, username=None, password=None,
               repository_prefix=None, **kwargs):
          
          auth_config = {
              'username': username,
              'password': password
          }
  
          build_stamp = self.get_build_stamp_for_image(image_id)
          tag = tag or build_stamp
  
          if repository_prefix:
              image_name = "{}-{}".format(repository_prefix, service_name)
          elif repository_prefix is None:
              image_name = "{}-{}".format(self.project_name, service_name)
          elif repository_prefix == '':
              image_name = service_name
          repository = "{}/{}".format(namespace, image_name)
  
          if url != self.default_registry_url:
              url = REMOVE_HTTP.sub('', url)
              repository = "%s/%s" % (url.rstrip('/'), repository)
  
          logger.info('Tagging %s' % repository)
          self.client.api.tag(image_id, repository, tag=tag)
  
          logger.info('Pushing %s:%s...' % (repository, tag))
          stream = self.client.api.push(repository, tag=tag, stream=True, auth_config=auth_config)
  
          last_status = None
          for data in stream:
              data = data.splitlines()
              for line in data:
                  line = json.loads(line)
                  if type(line) is dict and 'error' in line:
                      plainLogger.error(line['error'])
                      raise exceptions.AnsibleContainerException(
                          "Failed to push image. {}".format(line['error'])
                      )
                  elif type(line) is dict and 'status' in line:
                      if line['status'] != last_status:
                          plainLogger.info(line['status'])
                      last_status = line['status']
                  else:
                      plainLogger.debug(line)
docs: Push an image to a remote registry.