- 0.1 -- Initial release
- 0.2 -- More commands supported
- 0.3 -- More commands and options
- 0.4 -- Commands and options are almost done, except for swarm, node, service categories
- 0.5 -- Now it's usable π
- 0.6 -- Fix format problems within lots of commands
- 0.7 -- Code cleanup and move root commands into their command groups (such as container, image, network, and etc)
- 0.8 -- Plugin feature works, but is still under heavy development.
- 0.8.1 -- Change name from 'Dokcer' to 'Tsaotun'.
-
Currently support following commands:
- tsaotun
version, info, inspect, images, pull, build, run, save, logs, stats, rename, restart, exec, rmi, rm, ps, top, history, cp
- tsaotun container
inspect, run, logs, stats, rename, restart, exec ,rm, ls, top, cp
- tsaotun image
inspect, ls, pull, build, save, rm, history
- tsaotun network
inspect, ls, create, rm, remove, connect, disconnect
- tsaotun volume
inspect, ls, create, rm, remove
- tsaotun
-
Plugins feature is testing right now, and each plugin should has its own folder with
__init__.py
inside. Plugins folder struture shows like:
$HOME
ββββTsaotun
ββββplugins
βββ plugin_A - __init__.py, ...
βββ plugin_B - __init__.py, ...
ββββ__init__.py
-
Sample plugin to remove "ALL" containers at once:
-
from Container import rm __override__ = {'Container.rm': 'Rm'}
-
"""This module contains `docker container rm` class""" from docker.errors import APIError from tsaotun.lib.Docker.Container.command import Command from tsaotun.cli import Tsaotun class Rm(Command): """This class implements `docker container rm` command""" name = "container rm" require = [] def __init__(self): Command.__init__(self) self.settings[self.name] = None def eval_command(self, args): try: containers = args["containers"] del args["containers"] Ids = [] if "ALL" in containers: # tsaotun container rm ALL or tsaotun rm ALL cli = Tsaotun(original=True) cli.send('ps -a --format {{Id}}') ress = cli.recv() if ress: ress = ress.split('\n') ress = [res[0:4] for res in ress] for Id in ress: Ids.append(Id) args['container'] = Id self.client.remove_container(**args) del args['container'] else: for Id in containers: Ids.append(Id) args['container'] = Id self.client.remove_container(**args) del args['container'] self.settings[self.name] = '\n'.join(Ids) except APIError as e: raise e def final(self): return self.settings[self.name]
-
-
If you want auto-complete feature, you could use bash completion for tsaotun, taken and modified from docker one, or configure argcomplete.
- You can run any command docker can run on tsaotun.
- It's written in Python with love of docker API, so you can tune it by yourself!
- It means you can have your own implementation of docker command line tool. π
pip install tsaotun
, or- Clone the repo, and
python ./setup.py install
-
Pull from docker hub
docker pull qazbnm456/tsaotun
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock qazbnm456/tsaotun version
-
Build it yourself
- Dockerfile is provided, and you can build it with:
docker build -t tsaotun .
. Once you finished, you'd like to run any command, such as:docker run --rm -v /var/run/docker.sock:/var/run/docker.sock tsaotun version
- Dockerfile is provided, and you can build it with:
Linux | Windows | MacOSX |
---|---|---|
Wanna enrich the possibilities that tsaotun can inspire? Send pull requests or issues immediately!
This project use Apache License, Version 2.0.