getme
getMe is a persistent, embeddable key-value store written in Go. contains: engine; cli; tcp-proxy
1.2K
getme is a persistent, embeddable, log-structured key-value store optimized for high write throughput and low-latency reads.
This document covers the different containerized environments available for getme, allowing you to run the database seamlessly across various setups.
getme provides multiple Docker architectures depending on your use case:
ContainerFile (All-in-one): Packages the Core Server, HTTP Proxy, and CLI into a single lightweight image.ContainerFile.server (Core Engine): Runs only the core storage engine over Unix Domain Sockets (UDS).mcp-server/Dockerfile: A specialized Python-based container exposing the getme database as tools for Large Language Models using the Model Context Protocol.Built from the ContainerFile, this is the standard image. It runs the storage engine internally and exposes it over port 8080 via the HTTP proxy, alongside pre-installing the CLI.
Run the container in the background, exposing the HTTP proxy port and mounting a volume for data persistence:
docker run -d \
--name getme-store \
-p 8080:8080 \
-v getme_data:/var/lib/getMeStore \
-v getme_tmp:/tmp/getMeStore \
your-dockerhub-username/getme:latest
The image comes with the getme CLI pre-installed. We have configured the image to automatically load an alias (getme-cli), allowing you to interact with the database directly from your host using docker exec:
# Set a value
docker exec -it getme-store sh -ic "getme-cli set mykey 'hello world'"
# Get a value
docker exec -it getme-store sh -ic "getme-cli get mykey"
(Note: the -ic flags are required to invoke an interactive shell that loads the alias configuration inside the container).
For an easier deployment, use a docker-compose.yml:
version: "3.8"
services:
getme:
image: your-dockerhub-username/getme:latest
container_name: getme-store
ports:
- "8080:8080"
volumes:
- getme_data:/var/lib/getMeStore
- getme_tmp:/tmp/getMeStore
restart: unless-stopped
volumes:
getme_data:
getme_tmp:
If you are using getme with an LLM agent (like Claude Desktop or Cursor), deploy the MCP server container defined in mcp-server/Dockerfile.
This container requires access to the Unix Domain Socket file of the running getme server.
cd mcp-server
docker compose run --rm -T getme-mcp-server
This communicates over standard I/O (JSON-RPC) avoiding TTY allocation (-T). Note that it mounts /tmp/getMeStore/sockDir from the host.
If you only need the raw storage engine and are interacting directly via UDS (without HTTP), you can build ContainerFile.server.
docker build -t getme-core -f ContainerFile.server .
docker run -d \
--name getme-engine \
-v getme_data:/var/lib/getMeStore \
-v /tmp/getMeStore/sockDir:/tmp/getMeStore/sockDir \
getme-core
Crucial: /tmp/getMeStore/sockDir MUST be bind-mounted so external processes (SDKs) can reach the getMe.sock.
To ensure your data survives container restarts, you must mount volumes to the following directories inside the container:
/var/lib/getMeStore/dataDir: The primary directory where the log-structured segments (database files) are stored./tmp/getMeStore/sockDir: Used for internal Unix Domain Socket communication./tmp/getMeStore/dumpDir: Used by the internal application logger.Security is built-in by design. The containers do not run as root.
During the multi-stage build processes, an unprivileged user named appuser (along with appgroup) is created. All binaries are executed under this user profile, and the ownership of all critical data directories is automatically assigned to appuser:appgroup.
You can override the default UID and GID during the build phase using build-args if your environment requires specific user ID mappings to avoid local permission issues:
docker build --build-arg UID=2000 --build-arg GID=2000 -t getme -f ContainerFile .
Content type
Image
Digest
sha256:a72f41250…
Size
18 MB
Last updated
about 1 month ago
docker pull aatir0docking/getme