←back to thread

726 points psviderski | 5 comments | | HN request time: 0.001s | source

I got tired of the push-to-registry/pull-from-registry dance every time I needed to deploy a Docker image.

In certain cases, using a full-fledged external (or even local) registry is annoying overhead. And if you think about it, there's already a form of registry present on any of your Docker-enabled hosts — the Docker's own image storage.

So I built Unregistry [1] that exposes Docker's (containerd) image storage through a standard registry API. It adds a `docker pussh` command that pushes images directly to remote Docker daemons over SSH. It transfers only the missing layers, making it fast and efficient.

  docker pussh myapp:latest user@server
Under the hood, it starts a temporary unregistry container on the remote host, pushes to it through an SSH tunnel, and cleans up when done.

I've built it as a byproduct while working on Uncloud [2], a tool for deploying containers across a network of Docker hosts, and figured it'd be useful as a standalone project.

Would love to hear your thoughts and use cases!

[1]: https://github.com/psviderski/unregistry

[2]: https://github.com/psviderski/uncloud

Show context
koakuma-chan ◴[] No.44314204[source]
This is really cool. Do you support or plan to support docker compose?
replies(1): >>44314249 #
psviderski ◴[] No.44314249[source]
Thank you! Can you please clarify what kind of support you mean for docker compose?
replies(2): >>44314283 #>>44315975 #
fardo ◴[] No.44314283[source]
I assume that he means "rather than pushing up each individual container for a project, it could take something like a compose file over a list of underlying containers, and push them all up to the endpoint."
replies(1): >>44314317 #
1. koakuma-chan ◴[] No.44314317[source]
Yes, pushing all containers one by one would not be very convenient.
replies(1): >>44314474 #
2. baobun ◴[] No.44314474[source]
The right yq|xargs invocation on your compose file should get you to a oneshot.
replies(1): >>44314527 #
3. koakuma-chan ◴[] No.44314527[source]
I would prefer docker compose pussh or whatever
replies(2): >>44315461 #>>44316813 #
4. psviderski ◴[] No.44315461{3}[source]
That's an interesting idea. I don't think you can create a subcommand/plugin for compose but creating a 'docker composepussh' command that parses the compose file and runs 'docker pussh' should be possible.

My plan is to integrate Unregistry in Uncloud as the next step to make the build/deploy flow super simple and smooth. Check out Uncloud (link in the original post), it uses Compose as well.

5. djfivyvusn ◴[] No.44316813{3}[source]
You can wrap docker in a bash function that passes through to `command docker` when it's not a compose pussh command.