Push Docker images directly to remote servers without a registry
GitHub RepoImpressions1.6k

Push Docker images directly to remote servers without a registry

@githubprojectsPost Author

Project Description

View on GitHub

Skip the Registry: Push Docker Images Directly to Your Servers

If you’ve ever deployed a Docker image, you know the usual drill: build, tag, push to a registry (like Docker Hub, ECR, or GCR), then pull on the server. It works, but it adds steps, costs, and sometimes complexity. What if you could just push an image straight to your remote server, no registry in the middle?

That’s exactly what unregistry does. It’s a clever little tool that bypasses the traditional registry workflow, letting you send a Docker image directly over SSH to a remote machine. It’s perfect for quick deployments, local development syncs, or environments where setting up a full registry feels like overkill.

What It Does

Unregistry is a CLI tool that takes a local Docker image, streams it over an SSH connection, and loads it directly onto a remote Docker daemon. No intermediate registry is needed. You run a command on your local machine, and moments later, the image is ready to run on your server.

Why It’s Cool

The magic here is in the simplicity and the clever use of existing tools. Unregistry doesn’t run a persistent service on your server. Instead, it uses docker save to create an image tarball, pipes it over SSH, and uses docker load on the other side to ingest it. This approach has some neat benefits:

  • No Registry Required: You don’t need to set up, configure, or pay for a private registry. This is huge for small projects, prototypes, or air-gapped environments.
  • It’s Fast for Iteration: When you’re actively developing and testing on a remote staging server, pushing directly can be faster than the build-push-pull cycle.
  • Works with Existing SSH Security: It leverages your already-configured SSH keys and access controls. If you can SSH to the server, you can push an image to it.
  • Single-Command Simplicity: The entire process is wrapped in one clean command: unregistry push.

How to Try It

Getting started is straightforward. Unregistry is a Go binary, so you can install it directly.

  1. Install it: Grab the latest binary from the GitHub Releases page, or use Go to install it:

    go install github.com/psviderski/unregistry@latest
    

    Make sure your $GOPATH/bin (usually ~/go/bin) is in your PATH.

  2. Prepare your server: The only requirement on the remote server is a working Docker daemon and an SSH server. The user you SSH as needs permission to run docker load.

  3. Push an image: Build your Docker image locally, then push it using the unregistry command. The format is unregistry push <local-image> <user>@<host>:<remote-image>.

    # Example: push a local 'my-app:v1' image to server 'staging'
    unregistry push my-app:v1 [email protected]:my-app:v1
    

    That’s it. The tool will handle the streaming and loading. On your server, you can now run docker run my-app:v1.

Final Thoughts

Unregistry isn’t meant to replace container registries for production CI/CD pipelines—those are essential for versioning, security scanning, and multi-user collaboration. But for a huge number of everyday developer tasks, it’s a perfect fit.

Think about syncing a debug build to a test VM, deploying a hotfix to a single server, or just getting an image to a colleague’s machine quickly. In these cases, unregistry removes friction and lets you focus on the code, not the infrastructure. It’s one of those tools that does a single job exceptionally well, and it’s definitely worth having in your toolbox.


@githubprojects

Back to Projects
Project ID: 755157f7-ff9c-4025-a86e-c726757099ceLast updated: December 19, 2025 at 10:37 AM