explaingit

psviderski/unregistry

4,747GoAudience · ops devopsComplexity · 2/5Setup · easy

TLDR

A command-line tool that pushes a Docker container image directly from your laptop to a remote server over SSH, transferring only the new parts, no external registry or extra ports needed.

Mindmap

mindmap
  root((unregistry))
    What it does
      Push Docker images via SSH
      Skip already-present layers
      No external registry
      Temporary server-side setup
    How it works
      SSH tunnel
      Temporary registry container
      Layer diffing
      Auto cleanup
    Installation
      Homebrew
      Direct download
      Debian package
    Audience
      Solo developers
      Homelab owners
      Small DevOps teams
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Deploy a Docker image built on your laptop directly to a remote server without setting up Docker Hub or a private registry.

USE CASE 2

Speed up repeated deployments by sending only the image layers that changed since the last push.

USE CASE 3

Transfer private container images securely to a VPS without exposing code to a third-party registry.

USE CASE 4

Add a simple one-command image deploy step to a small project that does not need a full CI/CD pipeline.

Tech stack

GoDockerSSH

Getting it running

Difficulty · easy Time to first run · 5min

Requires Docker running on both local machine and the remote server, plus SSH access to the remote host.

In plain English

Unregistry solves a specific problem: you have a Docker container image on your local machine and need to get it onto a remote server without going through an external registry like Docker Hub or GitHub Container Registry. The usual alternatives are painful. Uploading to a public registry exposes your code. Running a private registry costs money and requires maintenance. The built-in save-and-load approach sends the entire image every time, even if most of it is already on the server. The tool adds a command called docker pussh (with an extra 's' for SSH) to your Docker installation. You run it with the image name and the remote server address, and it transfers only the layers that are missing from the destination. Internally it opens an SSH tunnel to the server, starts a temporary registry container there, pushes the image through the tunnel, and then cleans up. The result lands directly in the server's Docker storage without any intermediate storage step and without opening any extra ports on the server. The README describes the behavior as similar to rsync, which is a file-copy tool that skips data already present at the destination. The analogy is accurate: both tools figure out what is missing before transferring anything, which makes repeated updates fast. Installation on macOS or Linux is available through Homebrew or as a direct download. There is also an unofficial Debian package maintained by a community contributor. Windows is not currently supported, though the README suggests using WSL 2 as a workaround. There is one configuration note worth knowing: Docker and its underlying container runtime, called containerd, can maintain separate image stores. If you enable the containerd image store option in Docker (which the README recommends), pushed images are immediately available and stored only once. Without that option, the tool runs an extra pull step after pushing, and images may accumulate in a secondary storage location over time.

Copy-paste prompts

Prompt 1
I have a Docker image on my laptop and a remote Linux server. Show me the exact commands to install and use unregistry to push the image over SSH.
Prompt 2
Explain how unregistry opens an SSH tunnel to the server and starts a temporary registry, how does it transfer only the missing image layers?
Prompt 3
How do I enable the containerd image store in Docker so that images pushed with unregistry land in the right place without a secondary pull step?
Prompt 4
I want a Makefile deploy target that builds a Docker image and pushes it to my VPS using unregistry. Show me what that looks like.
Open on GitHub → Explain another repo

← psviderski on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.