Home

Awesome

<p align="center"> <a href="https://github.com/robertpsoane/ducker"><img src="https://raw.githubusercontent.com/robertpsoane/ducker/master/assets/ducker.png?raw=true" width="250" height="250" /></a> <h1 align="center">Ducker</h1> </p> <p align="center"> ๐Ÿ‹ A terminal app for managing docker containers, inspired by <a href="https://k9scli.io">K9s</a> <br/> <a href="#installation">Installation</a> ยท <a href="#usage">Usage</a> ยท <a href="#configuration">Configuration</a> </p>

<a href="https://github.com/robertpsoane/ducker"><img src="https://raw.githubusercontent.com/robertpsoane/ducker/master/assets/demo.gif?raw=true" width="100%" /></a>

<p align="center"> ๐Ÿฆ€ Written in Rust ๐Ÿฆ€ </p>

Installation

Cargo

There isn't currently a downloadable pre-built binary; to install you will need cargo installed:

cargo install --locked ducker

:warning: Make sure you use --locked: if ducker is installed without --locked it is susceptible to changes in upstream dependencies, which could break the build.

Arch Linux

You can install ducker from the official repositories with using pacman.

pacman -S ducker

Brew

For macOS, you can install ducker using by homebrew.

brew install ducker

Unstable

To install the latest unstable version of Ducker, run the following command:

cargo install --git https://github.com/robertpsoane/ducker

Usage

Ducker is comprised of a set of pages, each of which display specific information about and/or allow interaction with the docker containers and images on the host system.

Top level pages can be navigated to with commands, input via the prompt. Pages can be interacted with using actions; these are input via hotkey inputs.

A legend for common global hotkey inputs is displayed at the bottom of the screen; one for contextual (eg different on each page) hotkey inputs are displayed in the top right.

Commands

The following commands are supported:

CommandAliasesDescription
imagesimageOpen the Images top level page
containerscontainerOpen the Containers top level page
volumesvolumeOpen the Volumes top level page
networksnetworkOpen the Networks top level page
quitqClose the application

Actions

Global

The following global actions are available on all pages:

HotkeyAction
k/โ†‘Navigate up in a list/table
j/โ†“Navigate down in a list/table
Q/qClose the application
:Open the command prompt
GNavigate to the bottom of a list or table
gNavigate to the top of a list or table

Containers

The following actions are available on the Containers page:

HotkeyAction
Ctrl+dDelete the currently selected container
aExec into the currently selected container (if container is running)*
lView the logs for the currently selected container
rRun the currently selected container
sStop the currently selected container

*NB: exec currently only supports containers with bash installed. The intention is that this will be updated to provide a user option.

Images

The following actions are available on the Images page:

HotkeyAction
Ctrl+dDelete the currently selected image
dDescribe the currently selected image
DToggle whether or not to show dangling images (off by default)

Volumes

The following actions are available on the Volumes page:

HotkeyAction
Ctrl+dDelete the currently selected volume
dDescribe the currently selected volume

Networks

The following actions are available on the Networks page:

HotkeyAction
Ctrl+dDelete the currently selected network
dDescribe the currently selected network

:warning: Network deletion isn't entirely complete: A failed deletion currently results in a yes/no modal telling you that it couldn't be deleted. There is no difference between the yes and no results. This is due to the current modal story and a quick and dirty hack to get them set up. Once a generic modal exists this will be patched up!

Logs

The following actions are available on the Logs page:

HotkeyAction
EscReturn to the containers page

Configuration

Ducker is configured via a yaml file found in the relevant config directory for host platform. On linux this is ~/.config/ducker/config.yaml.

The following table summarises the available config values:

KeyDefaultDescription
prompt๐Ÿฆ†The default prompt to display in the command pane
default_exec/bin/bashThe default prompt to display in the command pane. NB - currently uses this for all exec's; it is planned to offer a choice
docker_pathunix:///var/run/docker.sockThe location of the socket on which the docker daemon is exposed (defaults to npipe:////./pipe/docker_engine on windows)
check_for_updatetrueWhen true, checks whether there is a newer version on load. If a newer version is found, indicates via note in bottom right.
theme[See below]The colour theme configuration

If a value is unset or if the config file is unfound, Ducker will use the default values. If a value is malformed, Ducker will fail to run.

To create a fully populated default config, run ducker with the -e/--export-default-config flag; this will write the default config to the default location, overwriting any existing config.

Themes

By default, ducker uses the terminal emulator's preset colours. However, it is possible to set a custom colour theme in config. This is set in the theme section of the config file. The following table describes the theme options. The default theme provides the colours provided in the GIF in this README.

KeyDefaultDescription
use_themefalseWhen true uses the colour scheme defined in config, when false uses the default terminal colours
title#96E072The colour used for the Ducker font in the header
help#EE5D43The colour used in the help prompts in the header
background#23262EThe colour used in the background
footer#00E8C6The colour used for the text in the footer
success#96E072The colour used for a successful result
error#EE5D43The colour used for an error result
positive_highlight#96E072The colour used for highlighting in a happy state
negative_highlight#FF00AAThe colour used for highlighting in a sad state

Tmux

Some characters in ducker use italics/boldface. This doesn't work by default when running in tmux. To fix this, add the following to your add to tmux.conf

set -g default-terminal "tmux-256color"
set -as terminal-overrides ',xterm*:sitm=\E[3m'