```ruby title="usage.rb"
require 'open3'
require 'net/http'
require 'json'

class DockerKreuzbergClient
  def initialize(container_name = 'kreuzberg-api', api_port = 8000)
    @container_name = container_name
    @api_port = api_port
    @api_url = "http://localhost:#{api_port}/api/extract"
  end

  def start_container(image = 'kreuzberg:latest')
    puts 'Starting Kreuzberg Docker container...'
    cmd = "docker run -d --name #{@container_name} -p #{@api_port}:8000 #{image}"
    stdout, stderr, status = Open3.capture3(cmd)

    raise "Failed to start container: #{stderr}" unless status.success?

    puts "Container started on http://localhost:#{@api_port}"
  end

  def extract_file(file_path)
    file_content = File.read(file_path, mode: 'rb')
    boundary = "----WebKitFormBoundary#{SecureRandom.hex(16)}"

    body = "--#{boundary}\r\n"
    body += "Content-Disposition: form-data; name=\"file\"; filename=\"#{File.basename(file_path)}\"\r\n"
    body += "Content-Type: application/octet-stream\r\n\r\n"
    body += file_content
    body += "\r\n--#{boundary}--\r\n"

    uri = URI(@api_url)
    http = Net::HTTP.new(uri.host, uri.port)
    request = Net::HTTP::Post.new(uri.path)
    request['Content-Type'] = "multipart/form-data; boundary=#{boundary}"
    request.body = body

    response = http.request(request)
    result = JSON.parse(response.body)
    result['content']
  end

  def stop_container
    puts 'Stopping Kreuzberg Docker container...'
    system("docker stop #{@container_name}")
    system("docker rm #{@container_name}")
    puts 'Container stopped and removed'
  end
end

docker_client = DockerKreuzbergClient.new

begin
  docker_client.start_container
  sleep(2)

  content = docker_client.extract_file('document.pdf')
  puts "Extracted content:\n#{content}"
ensure
  docker_client.stop_container
end
```
