{"id":22899719,"url":"https://github.com/wolfulus/transfer","last_synced_at":"2025-05-08T01:09:56.384Z","repository":{"id":65199363,"uuid":"217361580","full_name":"WoLfulus/transfer","owner":"WoLfulus","description":"Docker CLI plugin to push images directly to a docker host","archived":false,"fork":false,"pushed_at":"2023-02-16T14:17:04.000Z","size":4240,"stargazers_count":9,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-08T01:09:35.831Z","etag":null,"topics":["docker","docker-cli","docker-push","docker-registry","docker-registry-v2","registry","registry-cli"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WoLfulus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-24T17:58:30.000Z","updated_at":"2024-12-30T11:27:40.000Z","dependencies_parsed_at":"2024-06-19T11:15:27.598Z","dependency_job_id":"da77eab1-3ac8-431d-804b-9fdd621b40c6","html_url":"https://github.com/WoLfulus/transfer","commit_stats":{"total_commits":15,"total_committers":2,"mean_commits":7.5,"dds":0.06666666666666665,"last_synced_commit":"9a9d11c0789ad59afa06381bf180232e71ac3eff"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WoLfulus%2Ftransfer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WoLfulus%2Ftransfer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WoLfulus%2Ftransfer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WoLfulus%2Ftransfer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WoLfulus","download_url":"https://codeload.github.com/WoLfulus/transfer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252978768,"owners_count":21834916,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-cli","docker-push","docker-registry","docker-registry-v2","registry","registry-cli"],"created_at":"2024-12-14T01:16:09.739Z","updated_at":"2025-05-08T01:09:56.358Z","avatar_url":"https://github.com/WoLfulus.png","language":"Go","readme":"# Docker Transfer\n\n## What is it?\n\nTransfer is a docker CLI plugin that enables pushing images directly to a remote docker host, skipping the process of pushing to an intermediate registry.\n\n![Transfer](.github/images/demo.gif)\n\n![Transfer](.github/images/demo2.gif)\n\n## Why?\n\nI don't really like repeating stuff, so this process might sound familiar to you:\n\n-   Build image\n-   Push image\n-   Go to vps\n-   Pull image\n\nUsing transfer this boils down to:\n\n-   Build image\n-   ~~Push~~ transfer image\n\nAnd the image is now available on your remote host.\n\n## How it works?\n\nTransfer contains two components: a service (preconfigured registry server) and a CLI. The service enables you to push images with layer caching and all the good stuff registry has, and CLI adds some commands to your docker client to push images and manage the service instance.\n\n### Registry\n\nTransfer builds directly from `docker/distribution` source repository, it just adds a new go package before the build, that acts as a notification handler (so it knows when an image gets pushed - this is where the image gets restored on the host machine). It also enables `htpasswd` authentication by default, and users can be managed through the CLI.\n\n### CLI\n\nThe CLI can act as a standalone CLI or as a docker plugin. It allows you to push and manage the transfer service with simple commands.\n\n# Installation\n\n### Install the service\n\nA full installation process will be available through the CLI, but for now it's recommended to run it through a `docker-compose` file.\n\n```yaml\nversion: \"3.7\"\n\n# Services\nservices:\n    # Registry\n    registry:\n        image: wolfulus/transfer:v0.0.2\n        restart: unless-stopped\n        ports:\n            # \"PUBLIC:5000\"\n            - \"5000:5000\"\n        environment:\n            # This should match the (public) port above\n            # The container port will always run on port 5000\n            TRANSFER_SERVICE_PORT: \"5000\"\n            TRANSFER_MANAGEMENT_USERNAME: \"wolfulus\"\n            TRANSFER_MANAGEMENT_PASSWORD: \"yourpassword\"\n        labels:\n            # Required for service detection\n            - com.wolfulus.transfer.version=v0.0.2\n            - com.wolfulus.transfer.managed=no\n        volumes:\n            # Contains the htpasswd file\n            - ./data/auth/:/data/auth/\n            # Stores the layer cache\n            - ./data/registry/:/var/lib/registry/\n            # Required to interact with docker\n            - /var/run/docker.sock:/var/run/docker.sock\n```\n\n### Install the CLI\n\nDownload the CLI release from GitHub that matches the service you installed on the server. The `docker-transfer` executable should be put into your `~/.docker/cli-plugins` directory and permission set to `+x`. On windows (Docker for Windows), the executable should be put in `C:\\Users\\\u003cyour-user\u003e\\.docker\\cli-plugins`.\n\nThere are no automatic installation scripts right now.\n\n\u003e NOTE: you should do this for both the server and the client.\n\n### Login into the registry\n\nYou can login to your registry (just make sure the service port is exposed and accessible before trying to)\n\n`docker login service.address:5000`\n\n### Make an easy alias\n\nThis step is optional, but you can create an alias on your CLIENT machine using\n\n`docker transfer alias vps service.address:5000`\n\nNow whenever you want to push an image, you can target `vps` instead of `service.address:5000`. This is very useful when dealing with IP addresses and ports.\n\n### Transfer an image\n\nMake sure you have an image to transfer to the target machine and push it to your host using `docker transfer image` command.\n\nUsage:\n\n`docker transfer image host image[:tag]`\n\nFor example (using the above alias):\n\n`docker transfer image vps nginx`\n\nAfter pushing, the image will be available on the host as `nginx`\n\n### Test it\n\nOn your host machine (assuming you didn't have an nginx machine there yet), check if the image got restored with `docker image ls | grep nginx`\n\n## FAQ\n\n:shrugs:\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwolfulus%2Ftransfer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwolfulus%2Ftransfer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwolfulus%2Ftransfer/lists"}