code: def build_image(self, conf, pushing=False):
          
          with conf.make_context() as context:
              try:
                  stream = BuildProgressStream(conf.harpoon.silent_build)
                  with self.remove_replaced_images(conf) as info:
                      cached = NormalBuilder().build(conf, context, stream)
                      info['cached'] = cached
              except (KeyboardInterrupt, Exception) as error:
                  exc_info = sys.exc_info()
                  if stream.current_container:
                      Runner().stage_build_intervention(conf, stream.current_container)
  
                  if isinstance(error, KeyboardInterrupt):
                      raise UserQuit()
                  else:
                      six.reraise(*exc_info)
              finally:
                  if stream and stream.intermediate_images and conf.cleanup_intermediate_images:
                      for image in stream.intermediate_images:
                          log.info("Deleting intermediate image\timage=%s", image)
                          try:
                              conf.harpoon.docker_api.remove_image(image)
                          except Exception as error:
                              log.error("Failed to remove intermediate image\timage=%s\terror=%s", image, error)
  
          return cached
docs: Build this image