A tool for exploring each layer in a docker image

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
Owner
Alex Goodman
www.linkedin.com/in/alexgoodman87
Alex Goodman
Comments
  • 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.

  • 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.

  • 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.

  • 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.

  • 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.

  • 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 ?

  • 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..

  • 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
    
  • 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

  • 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.

  • 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.

  • feat: add support for alternative ordering strategies

    feat: add support for alternative ordering strategies

    Addresses https://github.com/wagoodman/dive/issues/341.

    Adds a default hotkey of ctrl+o to flip between A-Z sort order and numerical sort-by-size-desc on the right-side pane.

    The approach to implementing this feature was to find all of the places in code that enforce the order in which file-system nodes in the selected layer are displayed in the buffer window. Three methods were identified: FileTree.StringBetween, FileNode.VisitDepthParentFirst and FileNode.VisitDepthChildFirst. These locations were taking the FileNode's property Children map[string]*FileNode and performing sort.Strings(keys) in order to implement alphanumeric sorting.

    These locations have been unified with OrderStrategy.orderKeys(map[string]*FileNode). A factory function, GetSortOrderStrategy, tees up the corresponding ordering strategy given an enum, which it then propagates down to the three mentioned methods.

    Additionally, a Size int64 field has been attached to FileNode in order to cache information on directory/file size for use in the sort-by-size-desc strategy (with a simple extraction refactor of the FileNode.MetadataString method.

    Happy New Year! 🥂

  • oci image layout format support

    oci image layout format support

    We (w/@dentrax) noticed that dive does not support OCI Image Layout formats, which is a basically folder structure that describes the OCI image, so we can add that support too:

    $ dive oci-dir:<oci_image_layout_path>
    

    WDYT? @wagoodman

  • Unable to `dive` into images build with `buildah`

    Unable to `dive` into images build with `buildah`

    Dive works great on Docker build images, so much so I want to continue using is as my organization moves away from Docker towards more agnostic tools. Specifically I am trying buildah and podman. So far, everything has gone well with them. Sadly, when I try to dive into an image built with buildah I am responded to with an error.

    $ cd project_root
    $ buildah images
    REPOSITORY                                                                  TAG      IMAGE ID       CREATED             SIZE
    433[[REDACTED]]gw                                                           0.0.3    ce0eda2f69e5   23 minutes ago      11.3 MB
    433[[REDACTED]]gw                                                           0.0.4    ce0eda2f69e5   23 minutes ago      11.3 MB
    localhost/nginx-alpine-boto3                                                0.0.4    ce0eda2f69e5   23 minutes ago      11.3 MB
    localhost/nginx-alpine-boto3                                                0.0.2    ce0eda2f69e5   23 minutes ago      11.3 MB
    localhost/nginx-alpine-boto3                                                0.0.1    cee5d6a15786   42 minutes ago      11.3 MB
    localhost/fedora-httpd                                                      latest   0ae8c1b11fe9   About an hour ago   256 MB
    localhost/fedora-httpd                                                      0.0.1    1cf28a879296   About an hour ago   256 MB
    docker.io/library/alpine                                                    3.16     bfe296a52501   4 days ago          5.83 MB
    registry.fedoraproject.org/fedora                                           latest   885d2b38b819   6 days ago          190 MB
    $ rip_docker_long_live_containers$ dive localhost/nginx-alpine-boto3:0.0.4
    Image Source: docker://localhost/nginx-alpine-boto3:0.0.4
    Fetching image... (this can take a while for large images)
    Handler not available locally. Trying to pull 'localhost/nginx-alpine-boto3:0.0.4'...
    Error response from daemon: Get "http://localhost/v2/": dial tcp 127.0.0.1:80: connect: connection refused
    cannot fetch image
    exit status 1
    $ rip_docker_long_live_containers$ dive 433[[REDACTED]]gw:0.0.4
    Image Source: docker://433[[REDACTED]]gw:0.0.4
    Fetching image... (this can take a while for large images)
    Handler not available locally. Trying to pull '433[[REDACTED]]gw:0.0.4'...
    Error response from daemon: pull access denied for 433[[REDACTED]]gw, repository does not exist or may require 'docker login': denied: Your authorization token has expired. Reauthenticate and try again.
    cannot fetch image
    exit status 1
    $ rip_docker_long_live_containers$ 
    
    $ dive --version
    dive 0.9.2
    $ buildah --version
    buildah version 1.23.1 (image-spec 1.0.1, runtime-spec 1.0.2-dev)
    $ podman --version
    podman version 3.4.4
    

    I did indeed double check I have authenticated with the remove repository but using docker pull to pull a different image.

    Does the road map for Dive include the ability to analyze non-Docker images?

  • fix(sec): upgrade github.com/docker/docker to 1.6.1

    fix(sec): upgrade github.com/docker/docker to 1.6.1

    What happened?

    There are 1 security vulnerabilities found in github.com/docker/docker v0.7.3-0.20190309235953-33c3200e0d16

    What did I do?

    Upgrade github.com/docker/docker from v0.7.3-0.20190309235953-33c3200e0d16 to 1.6.1 for vulnerability fix

    What did you expect to happen?

    Ideally, no insecure libs should be used.

    The specification of the pull request

    PR Specification from OSCS

  • Love the tool, great effort; please use SemVer.

    Love the tool, great effort; please use SemVer.

    Love the work your doing here. Really good tool, great effort. Please use SemVer 2 versioning. This is the only tool of a dozen or so that has a special version syntax and adds un-needed complexity to automation and pipeline logic.

    v0.10 would be 0.10.0 for example

    https://semver.org/

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

Dec 19, 2022
Tools for exploring OpenVG
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

Dec 30, 2022
CLI to run a docker image with R. CLI built using cobra library in go.
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

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

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

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

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

Jul 26, 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

Dec 18, 2021
❓🖼 Find the anime scene by image using your terminal
❓🖼 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

Jan 2, 2023
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

Aug 19, 2022
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

Dec 25, 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, ...

Jan 4, 2023
Several Examples for building docker containers for your Go applications

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

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!

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

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 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

Jan 8, 2023
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.

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

Sep 26, 2022
Arduino command line tool
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

Jan 7, 2023
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

Jan 4, 2021