dkr

Extendable alternative client for Docker


License
MulanPSL-2.0
Install
pip install dkr==0.0.1

Documentation

dkr

Extensible Docker CLI Client

To Use

dkr --help for use.

To Install

pip install dkr

To Extend

Add any .py file to ~/.dkr/commands/. It should have the following functions:

  • command(): returns a str or list of str. The name of the subcommand(s).
  • help_summary(str): takes a str returns a str. The returned string is what is displayed for the given command in --help.
  • import_command(docker_client, args, state): Takes the docker-py docker client and a subparser for argparse.ArgumentParser for the command. The state is a simple dictionary that remains persistent between running the dkr command. You can use this to track state, e.g. to remember what the last container was used so you can provide a shortcut.
    args.set_defaults(func=somefunc) should be called. somefunc will be invoked when your particular command is run from the CLI. It should accept the same three arguments as import_command.

Create Options

The dkr create command has the --option (-o) flag that can be specified multiple times. The format is explained below. This can be used to specify any docker create arg, using the naming conventions used by docker-py

Create Options Format

These arguments get expanded to a dict. For example:

 dkr create -o key=value image_name

Is expanded to:

 {
    "key": "value"
 }

This also handles nested values:

 dkr create -o nested.key=value image_name

Is expanded to:

 {
    "nested": {
        "key": "value"
    }
 }

You can also specify raw json values:

 dkr create -o nested.key:=true image_name

Is expanded to:

 {
    "nested": {
        "key": True
    }
 }

And:

 dkr create -o "nested.key:=[true, false, 0]" image_name

Is expanded to:

 {
    "nested": {
        "key": [True, False, 0]
    }
 }

You can use multiple options:

 dkr create -o "nested.key:=[true, false, 0]" -o "nested.key2=value" image_name

Is expanded to:

 {
    "nested": {
        "key": [True, False, 0],
        "key2": "value"
    }
 }

You can test this yourself by running dkr_core/cmd_to_json.py with naked arguments. i.e. no -o:

 python3 dkr_core/cmd_to_json.py "nested.key:=[true, false, 0]" "nested.key2=value"