A tool for exploring each layer in a docker image

Overview

dive

Go Report Card Pipeline Status Donate

A tool for exploring a docker image, layer contents, and discovering ways to shrink the size of your Docker/OCI image.

Image

To analyze a Docker image simply run dive with an image tag/id/digest:

dive <your-image-tag>

or if you want to build your image then jump straight into analyzing it:

dive build -t <some-tag> .

Building on Macbook (supporting only the Docker container engine)

docker run --rm -it \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v  "$(pwd)":"$(pwd)" \
      -w "$(pwd)" \
      -v "$HOME/.dive.yaml":"$HOME/.dive.yaml" \
      wagoodman/dive:latest build -t <some-tag> .

Additionally you can run this in your CI pipeline to ensure you're keeping wasted space to a minimum (this skips the UI):

CI=true dive <your-image>

Image

This is beta quality! Feel free to submit an issue if you want a new feature or find a bug :)

Basic Features

Show Docker image contents broken down by layer

As you select a layer on the left, you are shown the contents of that layer combined with all previous layers on the right. Also, you can fully explore the file tree with the arrow keys.

Indicate what's changed in each layer

Files that have changed, been modified, added, or removed are indicated in the file tree. This can be adjusted to show changes for a specific layer, or aggregated changes up to this layer.

Estimate "image efficiency"

The lower left pane shows basic layer info and an experimental metric that will guess how much wasted space your image contains. This might be from duplicating files across layers, moving files across layers, or not fully removing files. Both a percentage "score" and total wasted file space is provided.

Quick build/analysis cycles

You can build a Docker image and do an immediate analysis with one command: dive build -t some-tag .

You only need to replace your docker build command with the same dive build command.

CI Integration

Analyze an image and get a pass/fail result based on the image efficiency and wasted space. Simply set CI=true in the environment when invoking any valid dive command.

Multiple Image Sources and Container Engines Supported

With the --source option, you can select where to fetch the container image from:

dive <your-image> --source <source>

or

dive <source>://<your-image>

With valid source options as such:

  • docker: Docker engine (the default option)
  • docker-archive: A Docker Tar Archive from disk
  • podman: Podman engine (linux only)

Installation

Ubuntu/Debian

wget https://github.com/wagoodman/dive/releases/download/v0.9.2/dive_0.9.2_linux_amd64.deb
sudo apt install ./dive_0.9.2_linux_amd64.deb

RHEL/Centos

curl -OL https://github.com/wagoodman/dive/releases/download/v0.9.2/dive_0.9.2_linux_amd64.rpm
rpm -i dive_0.9.2_linux_amd64.rpm

Arch Linux

Available as dive in the Arch User Repository (AUR).

yay -S dive

The above example assumes yay as the tool for installing AUR packages.

Mac

If you use Homebrew:

brew install dive

If you use MacPorts:

sudo port install dive

Or download the latest Darwin build from the releases page.

Windows

Download the latest release.

Go tools Requires Go version 1.10 or higher.

go get github.com/wagoodman/dive

Note: installing in this way you will not see a proper version when running dive -v.

Docker

docker pull wagoodman/dive

or

docker pull quay.io/wagoodman/dive

When running you'll need to include the docker socket file:

docker run --rm -it \
    -v /var/run/docker.sock:/var/run/docker.sock \
    wagoodman/dive:latest <dive arguments...>

Docker for Windows (showing PowerShell compatible line breaks; collapse to a single line for Command Prompt compatibility)

docker run --rm -it `
    -v /var/run/docker.sock:/var/run/docker.sock `
    wagoodman/dive:latest <dive arguments...>

Note: depending on the version of docker you are running locally you may need to specify the docker API version as an environment variable:

   DOCKER_API_VERSION=1.37 dive ...

or if you are running with a docker image:

docker run --rm -it \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e DOCKER_API_VERSION=1.37 \
    wagoodman/dive:latest <dive arguments...>

CI Integration

When running dive with the environment variable CI=true then the dive UI will be bypassed and will instead analyze your docker image, giving it a pass/fail indication via return code. Currently there are three metrics supported via a .dive-ci file that you can put at the root of your repo:

rules:
  # If the efficiency is measured below X%, mark as failed.
  # Expressed as a ratio between 0-1.
  lowestEfficiency: 0.95

  # If the amount of wasted space is at least X or larger than X, mark as failed.
  # Expressed in B, KB, MB, and GB.
  highestWastedBytes: 20MB

  # If the amount of wasted space makes up for X% or more of the image, mark as failed.
  # Note: the base image layer is NOT included in the total image size.
  # Expressed as a ratio between 0-1; fails if the threshold is met or crossed.
  highestUserWastedPercent: 0.20

You can override the CI config path with the --ci-config option.

KeyBindings

Key Binding Description
Ctrl + C Exit
Tab Switch between the layer and filetree views
Ctrl + F Filter files
PageUp Scroll up a page
PageDown Scroll down a page
Ctrl + A Layer view: see aggregated image modifications
Ctrl + L Layer view: see current layer modifications
Space Filetree view: collapse/uncollapse a directory
Ctrl + Space Filetree view: collapse/uncollapse all directories
Ctrl + A Filetree view: show/hide added files
Ctrl + R Filetree view: show/hide removed files
Ctrl + M Filetree view: show/hide modified files
Ctrl + U Filetree view: show/hide unmodified files
Ctrl + B Filetree view: show/hide file attributes
PageUp Filetree view: scroll up a page
PageDown Filetree view: scroll down a page

UI Configuration

No configuration is necessary, however, you can create a config file and override values:

# supported options are "docker" and "podman"
container-engine: docker
# continue with analysis even if there are errors parsing the image archive
ignore-errors: false
log:
  enabled: true
  path: ./dive.log
  level: info

# Note: you can specify multiple bindings by separating values with a comma.
# Note: UI hinting is derived from the first binding
keybinding:
  # Global bindings
  quit: ctrl+c
  toggle-view: tab
  filter-files: ctrl+f, ctrl+slash

  # Layer view specific bindings
  compare-all: ctrl+a
  compare-layer: ctrl+l

  # File view specific bindings
  toggle-collapse-dir: space
  toggle-collapse-all-dir: ctrl+space
  toggle-added-files: ctrl+a
  toggle-removed-files: ctrl+r
  toggle-modified-files: ctrl+m
  toggle-unmodified-files: ctrl+u
  toggle-filetree-attributes: ctrl+b
  page-up: pgup
  page-down: pgdn

diff:
  # You can change the default files shown in the filetree (right pane). All diff types are shown by default.
  hide:
    - added
    - removed
    - modified
    - unmodified

filetree:
  # The default directory-collapse state
  collapse-dir: false

  # The percentage of screen width the filetree should take on the screen (must be >0 and <1)
  pane-width: 0.5

  # Show the file attributes next to the filetree
  show-attributes: true

layer:
  # Enable showing all changes from this layer and every previous layer
  show-aggregated-changes: false

dive will search for configs in the following locations:

  • $XDG_CONFIG_HOME/dive/*.yaml
  • $XDG_CONFIG_DIRS/dive/*.yaml
  • ~/.config/dive/*.yaml
  • ~/.dive.yaml
Issues
  • Update views

    Update views

    Summary

    The goal of this PR is to make the UI components that dive uses re-usable and extendable. This is a requirement to eventually allow users the ability to plugin their own functionality.

    It introduces a few major changes to do this:

    • migrate off of gocui to a tcell based alternative tview, this project gives us some easily extendable types and is actively maintained.
    • refactor front end to have a clean division between views and the data they consume.

    TODO

    That said there are still quite a few features that need to be added before this can be considered equivalent to the previous implementation, namely:

    Visual changes needed:

    • ~~Pull color settings from terminal / allow configuration~~
    • Could probably use a bit more beautification on the front end.
    • ~~Key mapping view~~
    • ~~Hide filter view when empty/unfocused~~
    • ~~Limited space views~~

    Functionality features needed:

    • ~~missing some change based filtering (▏^R Removed ▏^M Modified ▏^U Unmodified ▏^B Attributes )~~
    • ~~Few filetree commands missing (collapse all)~~
    • ~~CompareAllLayers view~~
    • Factor out the tview.Grid used to arrange view components.

    Would love some feedback on the direction of this PR. And will be adding some more documentation to the code to help with readability.

    opened by dwillist 12
  • Move formula to homebrew-core

    Move formula to homebrew-core

    I think it would be nice to add this formula into homebrew-core. So I went ahead creating a PR for it, https://github.com/Homebrew/homebrew-core/pull/42492.

    opened by chenrui333 11
  • Building from source fails

    Building from source fails

    $ make build
    go build -o build/dive
    # github.com/wagoodman/dive/image
    image/image.go:205:23: undefined: client.NewClientWithOpts
    image/image.go:205:48: undefined: client.FromEnv
    image/image.go:338:23: undefined: client.NewClientWithOpts
    image/image.go:338:48: undefined: client.WithVersion
    image/image.go:338:83: undefined: client.FromEnv
    make: *** [build] Error 2
    

    Seems like there's a version mismatch since e.g. client.NewClientWithOpts doesn't exist in github.com/docker/docker/client/client.go, whereas it exists in https://github.com/moby/moby/client/client.go. This may come from the docker to moby rename since the last version of github.com/docker/docker is v1.13.1. In that case it might be a good thing to move to github.com/moby/moby.

    opened by lloeki 11
  • v0.9.0 can't find libdevmapper.so.1.02

    v0.9.0 can't find libdevmapper.so.1.02

    For stability and compatibility, I run Ubuntu 18.04.3 LTS. I just installed dive v0.9.0, and when I run dive I get the error

    dive: error while loading shared libraries: libdevmapper.so.1.02: cannot open shared object file: No such file or directory
    

    I thought I might be able to fix it with sudo ln -s /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1 /lib/x86_64-linux-gnu/libdevmapper.so.1.02, but then I get the error

    dive: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by dive)
    

    My libc6 version is 2.27-3ubuntu1. Since I'm not aware of a simple way to upgrade libc6 under Ubuntu, I did not attempt to further debug the issue.

    After downgrading to v0.8.1, dive just works.

    opened by maresb 8
  • Failed to write to log, invalid argument

    Failed to write to log, invalid argument

    On Win10, when using full, the docker cli is found and the target image is succesfully pulled. However, dive fails because of some issue with the log:

    # docker run --rm -v //var/run/docker.sock://var/run/docker.sock wagoodman/dive:full ghdl/run:buster-gcc
    Unable to find image 'wagoodman/dive:full' locally
    full: Pulling from wagoodman/dive
    c4417d4ce49e: Pulling fs layer
    f54082d45830: Pulling fs layer
    f54082d45830: Verifying Checksum
    f54082d45830: Download complete
    c4417d4ce49e: Verifying Checksum
    c4417d4ce49e: Download complete
    c4417d4ce49e: Pull complete
    f54082d45830: Pull complete
    Digest: sha256:196d317a75f6691b8fccb4d27f81366cbf97da03a4a787ad6e05b45ddbae211b
    Status: Downloaded newer image for wagoodman/dive:full
    Fetching image... (this can take a while with large images)
    Image not available locally. Trying to pull 'ghdl/run:buster-gcc'...
    buster-gcc: Pulling from ghdl/run
    1ab2bdfe9778: Already exists
    765cf918ec12: Pulling fs layer
    a6f4bbfc5d61: Pulling fs layer
    867fa6686aa6: Pulling fs layer
    a6f4bbfc5d61: Download complete
    867fa6686aa6: Verifying Checksum
    867fa6686aa6: Download complete
    765cf918ec12: Verifying Checksum
    765cf918ec12: Download complete
    765cf918ec12: Pull complete
    a6f4bbfc5d61: Pull complete
    867fa6686aa6: Pull complete
    Digest: sha256:de28d4886eb540b6ca51eea348baee1b6e54e2f2966b7ffa19444d0404660e90
    Status: Downloaded newer image for ghdl/run:buster-gcc
    docker.io/ghdl/run:buster-gcc
    Parsing image...
    Analyzing image...
    Building cache...
    Failed to write to log, invalid argument
    

    This is the same if I try to use dive with any image which is available locally already.

    opened by eine 8
  • apparent mismatched dependencies on 'go get'

    apparent mismatched dependencies on 'go get'

    https://github.com/wagoodman/dive/blob/54979ae1ebaab7207f2fe6bd65e07266bd54dd76/image/docker_image.go#L7 —————————————————————— hello this code cant import, I cant saw it in https://github.com/docker , maybe the owner rename it into https://github.com/docker/go-docker ?

    opened by oohook 8
  • Support remote docker installations

    Support remote docker installations

    The docker client can be set up to connect to a docker server remotely using the value specified in the DOCKER_HOST env variable, (e.g. DOCKER_HOST=tcp://127.0.0.1:2375)

    This can be useful if you have a Windows machine running Docker and WSL connecting to it. Having this setup and trying to dive into a docker image, produces the error:

    ❯ dive jenkins/jenkins:latest
    dive jenkins/jenkins:latest
    Analyzing Image
    latest: Pulling from jenkins/jenkins
    Digest: sha256:5d9450a3b391e96a1525f6a5b40b3e2095df7a19195b6341fb097120cb0ab099
    Status: Image is up to date for jenkins/jenkins:latest
      Fetching metadata...
      Fetching image...panic: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    
    goroutine 1 [running]:
    github.com/wagoodman/dive/image.check(0x9d6de0, 0xc4202a9f60)
            /home/wagoodman/go/src/github.com/wagoodman/dive/image/image.go:27 +0x4a
    github.com/wagoodman/dive/image.saveImage(0x7fffcd788c0c, 0x16, 0x0, 0x0, 0x0, 0x0)
            /home/wagoodman/go/src/github.com/wagoodman/dive/image/image.go:356 +0x3cd
    github.com/wagoodman/dive/image.InitializeData(0x7fffcd788c0c, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
            /home/wagoodman/go/src/github.com/wagoodman/dive/image/image.go:215 +0x218
    github.com/wagoodman/dive/cmd.analyze(0xc47fe0, 0xc4202a9bb0, 0x1, 0x1)
            /home/wagoodman/go/src/github.com/wagoodman/dive/cmd/analyze.go:21 +0xfc
    github.com/spf13/cobra.(*Command).execute(0xc47fe0, 0xc42000c070, 0x1, 0x1, 0xc47fe0, 0xc42000c070)
            /home/wagoodman/go/src/github.com/spf13/cobra/command.go:766 +0x2c1
    github.com/spf13/cobra.(*Command).ExecuteC(0xc47fe0, 0x1, 0x1, 0x0)
            /home/wagoodman/go/src/github.com/spf13/cobra/command.go:852 +0x30a
    github.com/spf13/cobra.(*Command).Execute(0xc47fe0, 0xc420088058, 0x0)
            /home/wagoodman/go/src/github.com/spf13/cobra/command.go:800 +0x2b
    github.com/wagoodman/dive/cmd.Execute()
            /home/wagoodman/go/src/github.com/wagoodman/dive/cmd/root.go:28 +0x2d
    main.main()
            /home/wagoodman/go/src/github.com/wagoodman/dive/main.go:34 +0x20
    

    Would it be feasible to use the value specified in DOCKER_HOST (if present) to connect to the docker server?

    edit: replaced DOCKER_HOME with DOCKER_HOST to avoid any comprehension errors..

    opened by mwidmann 8
  • Error: When building cache: file tree has path errors

    Error: When building cache: file tree has path errors

    Hi, thanks for the project. I just built the latest git from source (needed to do so to overcome another issue) and I'm still getting another error. Like this:

    Building cache...
      path error at layer index Index(0-3:4): unable to remove '/.dockerenv': path does not exist: /.dockerenv
      path error at layer index Index(0-4:5): unable to add '/.dockerenv': path does not exist: /.dockerenv
      path error at layer index Index(0-5:6): unable to add '/.dockerenv': path does not exist: /.dockerenv
      path error at layer index Index(0-6:7): unable to add '/.dockerenv': path does not exist: /.dockerenv
      path error at layer index Index(0-7:8): unable to add '/.dockerenv': path does not exist: /.dockerenv
      path error at layer index Index(0-8:9): unable to add '/.dockerenv': path does not exist: /.dockerenv
      path error at layer index Index(0-9:10): unable to add '/.dockerenv': path does not exist: /.dockerenv
      path error at layer index Index(0-10:11): unable to add '/.dockerenv': path does not exist: /.dockerenv
      path error at layer index Index(0-11:12): unable to add '/.dockerenv': path does not exist: /.dockerenv
      path error at layer index Index(0-12:13): unable to add '/.dockerenv': path does not exist: /.dockerenv
      path error at layer index Index(0-13:14): unable to add '/.dockerenv': path does not exist: /.dockerenv
    file tree has path errors
    
    opened by SuperJC710e 7
  • Sluggish UI on images with a lot of files

    Sluggish UI on images with a lot of files

    With this image: https://hub.docker.com/r/butomo1989/docker-android-x86-9.0/ moving up and down on a layer can take a few seconds and spin the CPU up to 100%.

    If you push up and down a few times the wait time piles up.

    It seems the UI code that does some CPU intensive task for rendering the layer. I think there is a lot of room for optimizations.

    I am not sure how this relates with #94

    opened by ChrisCinelli 7
  • 9GB image slows down gnome

    9GB image slows down gnome

    It slows my UI so much that gnome somehow crashes and restart the session. Gnome is slowing down for no apparent reason because the CPU usage is really low (<15) while scanning the image. I have an i7-7700.

    bug 
    opened by Lorac 7
  • Failed to write to log, invalid argument

    Failed to write to log, invalid argument

    W10 dive version 0.9.1

    Hi, I'm getting the above error when using dive on W10, installed locally + running from docker: Fetching image... (this can take a while for large images) Analyzing image... Failed to write to log, invalid argument Failed to write to log, invalid argument Failed to write to log, invalid argument Failed to write to log, invalid argument Building cache... Failed to write to log, invalid argument cannot build cache tree Failed to write to log, invalid argument cannot remove upperNode /var/lib/yum/rpmdb-indexes/conflicts: path does not exist: /var/lib/yum/rpmdb-indexes/conflicts

    The image I tested on is big (that's why we want to use dive), it works with a few smaller images.

    opened by CurryWurry 6
  • [Question] How to use dive with M1 and colima?

    [Question] How to use dive with M1 and colima?

    I build an image, let's call it new_1:

    $ docker images
    REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
    new_1        latest    f2c3c30fca2d   About an hour ago   179MB
    ...
    

    and would like to dive into it, but it fails:

    $ dive new_1
    Image Source: docker://new_1
    Fetching image... (this can take a while for large images)
    Handler not available locally. Trying to pull 'new_1'...
    Using default tag: latest
    Error response from daemon: pull access denied for new_1, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
    cannot fetch image
    exit status 1
    

    What is the exact issue here, and what can I do to make it work (if anything?). It does work with:

    docker save new_1 > new_1.tar
    dive docker-archive://new_1.tar
    

    that I stole from https://github.com/wagoodman/dive/issues/397#issuecomment-1123061576, but is it the only way?

    opened by wujek-srujek 0
  • Support go-containerregistry as a new image resolver

    Support go-containerregistry as a new image resolver

    go-containerregistry is a golang library for working with container registries. By supporting this library as a new resolver, we don't need Docker dependency anymore (save & pull stuff in pipeline) since we are able to talk directly with registries. I'm not sure if this is a straightforward task to implement but all we need to do is write a simple converter to convert go-containerregistry models into dives'.

    cc @developer-guy

    opened by Dentrax 1
  • desperately need metadata export option.

    desperately need metadata export option.

    I love the idea of this tool, but in practice it is quite cumbersome to use the gui. I want to see exactly when a file gets exported to a disk and which command did it, but doing so right now requires a LOT of gui navigation. Instead, it would be awesome if you got something like:

    01_run.txt

    where 01_run.txt contained a dump of the command being used and a snapshot of resultant filesystem (permissions and sizes of the files). That way you could simply grep for a pattern to look for the file that you were interested in. Perhaps the directories and files that actually changed could have a '*' next to them for emphasis.

    This would save hours of time. If you've got an image with lots of steps, navigating through the menus is fairly manually intensive and error prone.

    opened by horos22reg 0
  • fix(deps): bump golang.org/x/sys so that project builds on darwin arm64

    fix(deps): bump golang.org/x/sys so that project builds on darwin arm64

    This PR addresses the following build error on darwin arm64:

    # golang.org/x/sys/unix
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/syscall_darwin.1_13.go:25:3: //go:linkname must refer to declared function or variable
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.1_13.go:27:3: //go:linkname must refer to declared function or variable
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.1_13.go:40:3: //go:linkname must refer to declared function or variable
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.go:28:3: //go:linkname must refer to declared function or variable
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.go:43:3: //go:linkname must refer to declared function or variable
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.go:59:3: //go:linkname must refer to declared function or variable
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.go:75:3: //go:linkname must refer to declared function or variable
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.go:90:3: //go:linkname must refer to declared function or variable
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.go:105:3: //go:linkname must refer to declared function or variable
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.go:121:3: //go:linkname must refer to declared function or variable
    ../../.gvm/pkgsets/go1.18.2/global/pkg/mod/golang.org/x/[email protected]/unix/zsyscall_darwin_arm64.go:121:3: too many errors
    
    opened by pmalek 0
Releases(v0.10.0)
Owner
Alex Goodman
www.linkedin.com/in/alexgoodman87
Alex Goodman
CLI for exploring AWS EC2 Spot inventory. Inspect AWS Spot instance types, saving, price, and interruption frequency.

spotinfo The spotinfo is a command-line tool that helps you determine AWS Spot instance types with the least chance of interruption and provides the s

Alexei Ledenev 62 Jun 21, 2022
Tools for exploring OpenVG

Testbed for exploring OpenVG on the Raspberry Pi. First program Here is the graphics equivalent of "hello, world" // first OpenVG program // Anthony S

Anthony Starks 392 Jun 17, 2022
CLI to run a docker image with R. CLI built using cobra library in go.

BlueBeak Installation Guide Task 1: Building the CLI The directory structure looks like Fastest process: 1)cd into bbtools 2)cd into bbtools/bin 3)I h

Aniruddha Chattopadhyay 0 Dec 20, 2021
tfuzz is a command-line tool to fuzz some layer 7 OSI protocols with a template file

tfuzz tfuzz is a command-line tool to fuzz some layer 7 OSI protocols with a template file download the linux binary executable (or you can compile fr

Noob0x 3 Sep 29, 2021
Onion-Layer-Golang - A web application boilerplate built with go and clean architecture

go-clean-architecture-web-application-boilerplate A web application boilerplate

Endy Gigih Pratama 1 May 4, 2022
A Go library and a command-line tool to manage Docker Swarm clusters

go-swarm go-swarm is a Go library and command-line tool for managing the creation and maintenance of Docker Swarm cluster. Features: Creates new Swarm

AUCloud 3 Mar 23, 2022
A command line tool for simplified docker volume command built with go

dockervol A command line tool for simplified docker volume command built with go. Features: Remove anonymous volume (beta) Remove volume by matching n

Moh Achun Armando 0 Dec 18, 2021
❓🖼 Find the anime scene by image using your terminal

What Anime CLI ❓ ?? > This application is basically a ?? wrapper around trace.moe PREVIEW Usage ?? Get Anime By Image File ?? what-anime file anime.jp

Ilya Revenko 682 Jun 16, 2022
A terminal image renderer written in Go.

TermPic An image renderer for the terminal. Written in Go. Usage You need Golang to build the binary. # Build it $ go build -o termpic main.go # Run

Mohammed Ajmal Siddiqui 1 Dec 25, 2021
Bulk image downloader for reddit.

rrip Program to bulk-download image from reddit subreddits. Features Set max size of file, max total size, minimum score etc.. Filter by post title or

Mahesh Hegde 38 Jun 21, 2022
contaiNERD CTL - Docker-compatible CLI for containerd, with support for Compose, Rootless, eStargz, OCIcrypt, IPFS, ...

contaiNERD CTL - Docker-compatible CLI for containerd, with support for Compose, Rootless, eStargz, OCIcrypt, IPFS, ...

containerd 4k Jun 26, 2022
Several Examples for building docker containers for your Go applications

go-docker Several Examples for building docker containers for your Go applicatio

Eric Calabretta 0 Dec 27, 2021
This tool is a CLI-interactive tool for TA who use eeclass platform

NTHU eeclass TA helper. This tool is a CLI-interactive tool for TA who use eeclass platform. It helps TA to download all the submitted homework, and use CSV to record the score and comment, and upload CSV score directly to the eeclass platform with just 2 Enter key!

Bo-Wei Chen 1 Dec 11, 2021
A command line tool that builds and (re)starts your web application everytime you save a Go or template fileA command line tool that builds and (re)starts your web application everytime you save a Go or template file

# Fresh Fresh is a command line tool that builds and (re)starts your web application everytime you save a Go or template file. If the web framework yo

null 0 Nov 22, 2021
fofax is a fofa query tool written in go, positioned as a command-line tool and characterized by simplicity and speed.

fofaX 0x00 Introduction fofax is a fofa query tool written in go, positioned as

null 395 Jun 23, 2022
Nebula Diagnosis CLI Tool is an information diagnosis cli tool for the nebula service and the node to which the service belongs.

Nebula Diagnosis CLI Tool is an information diagnosis cli tool for the nebula service and the node to which the service belongs.

Katz 1 Jan 12, 2022
timestamp convert & compare tool. 时间戳转换与对比工具

ts timestamp convert & compare tool Install Shell Install support Linux & MacOS # binary will be $(go env GOPATH)/bin/ts $: curl -sfL https://raw.gith

JayL 13 Feb 13, 2021
Arduino command line tool

arduino-cli Arduino CLI is an all-in-one solution that provides builder, Boards/Library Manager, uploader, discovery and many other tools needed to us

Arduino 3.5k Jun 27, 2022
A CLI tool implemented by Golang to manage `CloudComb` resource

CloudComb CLI tool: comb Get Started comb is a CLI tool for manage resources in CloudComb base on cloudcomb-go-sdk. Support Mac, Linux and Windows. We

Bingo Huang 22 Jan 4, 2021