krgo was formerly dlrootfs and cargo but has been renamed because of this issue
docker hub without docker. krgo is a command line tool to pull and push docker images from/to the docker hub.
krgo brings the docker hub content and delivery capabilities to any container engine.
Read the launch article and how to
docker is really popular and a lot of people and organisations are building docker images. These images are stored
and shared on the docker hub. However they are only available to docker users. Metadata apart, a docker
image is a linux root file system that can be used with any container engine
(LXC,
libcontainer nsinit,
systemd-nspawn,
rocket
...).
Using krgo, non docker users would be able to pull and share linux images using the docker hub.
curl -sL https://github.com/robinmonjo/krgo/releases/download/v1.5.0/krgo-v1.5.0_x86_64.tgz | tar -C /usr/local/bin -zxf -Provided binary is linux only but krgo may be used on OSX and (probably) Windows too.
NAME:
krgo - docker hub without docker
USAGE:
krgo [global options] command [command options] [arguments...]
VERSION:
krgo 1.5.0 (docker 1.5.0)
COMMANDS:
pull pull an image
push push an image
commit commit changes to an image pulled with -g
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--help, -h show help
--version, -v print the version
krgo pull image [-r rootfs] [-u user] [-g] [-v2]
Pull image into rootfs directory:
-uflag allows you to specify your docker hub credentials:username:password-gflag download the image into a git repository. Each branch contains a layer of the image. This is the resulting rootfs ofkrgo pull busybox -g:
Branches are named layer_<layer_index>_<layer_id>. layer_n is a checkout -b from layer_n-1, so
the layer_3 branch contains the full image. You can then use it as is.
The -g flag brings the power of git to container images (versionning, inspecting diffs ...). But more importantly, it will allow to
push image modifications to the docker hub (see krgo push)
-v2flag makeskrgodownload the image using docker v2 registry. Because everything is not yet production ready, images pulled with the-v2flag won't be pushable to the docker hub
Examples:
krgo pull debian -v2 #library/debian:latest using v2 registrykrgo pull progrium/busybox -r busybox -gkrgo pull robinmonjo/debian:latest -r debian -u $DHUB_CREDS
Push an image downloaded with the -g option to the docker hub
(a docker hub account is needed). Images downloaded with the -v2 flag can't be pushed at this time as registry v2 is not yet fully operational.
In order to push your modification you must commit them beforehand:
krgo commit [-r rootfs] -m "commit message"
This will take every changes on the current branch, and commit them onto a new branch. The new branch will be properly named and some additional metadata will be written, so this new layer can be pushed:
$> krgo commit -m "adding new user"
Changes commited in layer_4_804c37249306321b90bbfa07d7cfe02d5f3d056971eb069d7bc37647de484a35
Image ID: 804c37249306321b90bbfa07d7cfe02d5f3d056971eb069d7bc37647de484a35
Parent: 4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125
Layer size: 1536
DoneIf you plan to use krgo push, branches should not be created manually and commit must be done via krgo.
Also, branches other than the last one should never be modified.
krgo push image [-r rootfs] -u username:password
Push the image in the rootfs directory onto the docker hub.
Examples:
krgo push username/debian:krgo -u $DHUB_CREDSkrgo push username/busybox -r busybox -u $DHUB_CREDS
If you plan to use krgo to push images, you will need git >= 1.8
docker 1.5.0 pulls official images (library/*) from the v2 registry. Push are still made using the v1 registry. v2 registry brings a lot of changes, the most noticeable ones for krgo are:
- images are now addressed by content (IDs are tarsum calculation)
- images are described in a manifest
- images metadata are no more stored in a json file at the root of the file system
A lot of layers in v1 where created only because the json metadata file changed. Since this file is no more distributed, some (all ?) images have "dulpicated empty layers". krgo clean the manifest to download only what's needed.
krgo directly uses some of docker source code. Docker is moving fast, and krgo must keep up.
I will maintain it but if you want to contribute every pull requests / bug reports are welcome.
You don't need linux, krgo can run on OSX (Windows ?). Fork the repository and clone it into your
go workspace. Then make vendor, make build and you are ready to go. Tests can be run
with make test. Note that most krgo command must be run as sudo.
MIT
