Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zozs/whalesong
Distributed container registry built on hypercores and IPFS
https://github.com/zozs/whalesong
Last synced: 7 days ago
JSON representation
Distributed container registry built on hypercores and IPFS
- Host: GitHub
- URL: https://github.com/zozs/whalesong
- Owner: zozs
- License: agpl-3.0
- Created: 2020-12-23T14:50:48.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-08-28T09:28:52.000Z (over 3 years ago)
- Last Synced: 2024-12-16T03:13:43.333Z (13 days ago)
- Language: JavaScript
- Size: 1.83 MB
- Stars: 25
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# whalesong
Distributed container registry built on hypercores and IPFS
## Installation
Requirements:
* Node 15 or later
Clone this repository, and install dependencies.
```
git clone https://github.com/zozs/whalesong
cd whalesong
npm install
```## Usage
Launch the daemon by running
`node index.js`
inside the directory above. When the deamon is up, you now have a container registry listening on port 5005. You can then try to push and pull to the distributed registry.
### Example
After launching the daemon above, open a new shell, and try to pull and run the following test image, which will print a small greeting on your screen.
```
$ docker run localhost:5005/8361c37efa52cb2809f459fcf2559966dd384787f7ea6f0475c168ac069a31fb/hello:latest
A distributed greeting to you, my friend :)
```Alternatively, you can use the following commands to pull the same image, but using a human-readable name (see [Human-readable organisations/pubkeys](docs/human-readable-organisations.md) in `docs/` for an explanation on how this works).
```
$ docker run localhost:5005/whalesong.club/hello
A distributed greeting to you, my friend :)
```If the example doesn't seem to work, or Docker returns `"Not Found"`, you may have to wait a minute or two if the sync is slow.
### Pull an image
A container image can be pulled using docker with
`docker pull `
where the url will be of the following form for whalesong:
`localhost:5005/8361c37efa52cb2809f459fcf2559966dd384787f7ea6f0475c168ac069a31fb/hello:latest`
The url consists of the following parts:
* `localhost:5005`: The url of the registry that is running on your local machine. You will always use this url for both pulling from and pushing to the distributed registry.
* `8361c37efa52cb2809f459fcf2559966dd384787f7ea6f0475c168ac069a31fb`: A long hexadecimal string, which is the encoded public key of the organisation/person whose image you want to pull or push. You can only push to public keys you own, but can pull from any public key you know of.
* `hello:latest`: The image name (`hello`) and tag (`latest`) for the given image you want to pull. An organization or person may have multiple images and tags.### Push an image
A container image can be pushed using docker with
`docker push `
where the url must contain the url of the localhost registry,as well as your own public key, and the name you want to give your image. **Your own public key is printed when you launch the daemon.**
For example, assuming you have the public key `abcd1234`, and a Dockerfile in the current directory, build and push the image using:
```
docker build -t localhost:5005/abcd1234/myownimage:latest .
docker push localhost:5005/abcd1234/myownimage:latest
```Anyone else running `whalesong` can now pull your image using the url `localhost:5005/abcd1234/myownimage:latest` and run it on their own computer.
### Other facts
The data is stored in the `~/.whalesong` directory in your home.
If you want to get a fresh start, you can delete it, but _your private keys will disappear_ so don't do this unless you know what you're doing.## Todo
* Make container registry pass conformance tests (see [docs/conformance.md](docs/conformance.md)).
* Support more registry operations, such as content discovery and content management.
* Support multiple writable feeds from a single host.
* Cleanup of unused blobs.
* General reliability improvements.
* Automatically prune old and failed/aborted uploads.
* Extend tests.
* Provide service files to launch whalesong on boot.
* Build and push with kaniko in addition to current push/pull tests.
* Multi-writer so that multiple hosts can write to a single feed.## License
Whalesong is licensed under GNU AGPL v3 or later, see the `LICENSE` file for the full license.
```
whalesong - distributed container registry
Copyright (c) 2020, 2021, Linus KarlssonThis program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
```