Extensible Docker CLI Client
dkr --help
for use.
pip install dkr
Add any .py file to ~/.dkr/commands/
. It should have the following functions:
command()
: returns astr
orlist
ofstr
. The name of the subcommand(s).help_summary(str)
: takes astr
returns astr
. 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.
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
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"