Most active commenters

    ←back to thread

    726 points psviderski | 11 comments | | HN request time: 1.277s | source | bottom

    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

    1. nine_k ◴[] No.44314310[source]
    Nice. And the `pussh` command definitely deserves the distinction of one of the most elegant puns: easy to remember, self-explanatory, and just one letter away from its sister standard command.
    replies(3): >>44314604 #>>44314789 #>>44314848 #
    2. EricRiese ◴[] No.44314604[source]
    > The extra 's' is for 'sssh'

    > What's that extra 's' for?

    > That's a typo

    replies(1): >>44320863 #
    3. gchamonlive ◴[] No.44314789[source]
    It's fine, but it wouldn't hurt to have a more formal alias like `docker push-over-ssh`.

    EDIT: why I think it's important because on automations that are developed collaboratively, "pussh" could be seen as a typo by someone unfamiliar with the feature and cause unnecessary confusion, whereas "push-over-ssh" is clearly deliberate. Think of them maybe as short-hand/full flags.

    replies(2): >>44315319 #>>44320738 #
    4. someothherguyy ◴[] No.44314848[source]
    and prone to collision!
    replies(1): >>44315063 #
    5. nine_k ◴[] No.44315063[source]
    Indeed so! Because it's art, not engineering. The engineering approach would require a recognizably distinct command, eliminating the possibility of such a pun.
    replies(2): >>44319345 #>>44320118 #
    6. psviderski ◴[] No.44315319[source]
    That's a valid concern. You can very easily give it whatever name you like. Docker looks for `docker-COMAND` executables in ~/.docker/cli-plugins directory making COMMAND a `docker` subcommand.

    Rename the file to whatever you like, e.g. to get `docker pushoverssh`:

      mv ~/.docker/cli-plugins/docker-pussh ~/.docker/cli-plugins/docker-pushoverssh
    
    Note that Docker doesn't allow dashes in plugin commands.
    7. rollcat ◴[] No.44319345{3}[source]
    I used to have an alias em=mg, because mg(1) is a small Emacs, so "em" seemed like a fun name for a command.

    Until one day I made that typo.

    replies(1): >>44320391 #
    8. bobbiechen ◴[] No.44320391{4}[source]
    I'm a fan of installing sl(1), the terminal steam locomotive. I mistype it every couple months and it always gives me a laugh.

    https://github.com/mtoyoda/sl

    replies(1): >>44320991 #
    9. whalesalad ◴[] No.44320738[source]
    can easily see an engineer spotting pussh in a ci/cd workflow or something and thinking "this is a mistake" and changing it.
    10. causasui ◴[] No.44320863[source]
    https://www.youtube.com/watch?v=3m6Blqs0IgY
    11. danillonunes ◴[] No.44320991{5}[source]
    In the same spirit there's gti https://r-wos.org/hacks/gti