```go title="usage.go"
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"os"
	"os/exec"
	"path/filepath"
	"time"
)

type DockerKreuzbergClient struct {
	containerName string
	containerImage string
	apiPort       int
}

func NewDockerKreuzbergClient(containerName, image string, port int) *DockerKreuzbergClient {
	return &DockerKreuzbergClient{
		containerName: containerName,
		containerImage: image,
		apiPort:       port,
	}
}

func (c *DockerKreuzbergClient) StartContainer() error {
	fmt.Println("Starting Kreuzberg Docker container...")
	cmd := exec.Command("docker", "run", "-d",
		"--name", c.containerName,
		"-p", fmt.Sprintf("%d:8000", c.apiPort),
		c.containerImage)

	if err := cmd.Run(); err != nil {
		return fmt.Errorf("failed to start container: %w", err)
	}

	fmt.Printf("Container started on http://localhost:%d\n", c.apiPort)
	return nil
}

func (c *DockerKreuzbergClient) ExtractFile(filePath string) (string, error) {
	fileBytes, err := os.ReadFile(filePath)
	if err != nil {
		return "", err
	}

	var buf bytes.Buffer
	writer := multipart.NewWriter(&buf)

	part, err := writer.CreateFormFile("file", filepath.Base(filePath))
	if err != nil {
		return "", err
	}

	if _, err := io.Copy(part, bytes.NewReader(fileBytes)); err != nil {
		return "", err
	}

	if err := writer.Close(); err != nil {
		return "", err
	}

	resp, err := http.Post(
		fmt.Sprintf("http://localhost:%d/api/extract", c.apiPort),
		writer.FormDataContentType(),
		&buf,
	)
	if err != nil {
		return "", err
	}
	defer resp.Body.Close()

	var result map[string]string
	if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
		return "", err
	}

	return result["content"], nil
}

func (c *DockerKreuzbergClient) StopContainer() error {
	fmt.Println("Stopping Kreuzberg Docker container...")
	if err := exec.Command("docker", "stop", c.containerName).Run(); err != nil {
		return err
	}
	if err := exec.Command("docker", "rm", c.containerName).Run(); err != nil {
		return err
	}
	fmt.Println("Container stopped and removed")
	return nil
}

func main() {
	client := NewDockerKreuzbergClient("kreuzberg-api", "kreuzberg:latest", 8000)

	if err := client.StartContainer(); err != nil {
		panic(err)
	}

	time.Sleep(2 * time.Second)

	content, err := client.ExtractFile("document.pdf")
	if err != nil {
		panic(err)
	}

	fmt.Printf("Extracted content:\n%s\n", content)

	if err := client.StopContainer(); err != nil {
		panic(err)
	}
}
```
