Files
shell/docker-manager

Docker Manager

A Python command-line application to manage Docker containers defined in subdirectories of ~/docker/.

Features

  • List: View currently running containers across all your projects.
  • Stop: Stop containers for a specific project or all projects.
  • Update: Pull the latest images and recreate containers (equivalent to docker compose pull && docker compose up -d).
  • Restart: Restart containers for a specific project or all projects.

Prerequisites

  • Python 3
  • Docker and Docker Compose (plugin) installed.
  • A ~/docker/ directory containing subdirectories for each of your projects.
  • Each project subdirectory must contain a docker-compose.yml, docker-compose.yaml, compose.yml, or compose.yaml file.

Installation

  1. Ensure the script is executable:

    chmod +x ~/shell/docker-manager/docker-manager.py
    
  2. Make it accessible from anywhere: You can create a symbolic link to a directory in your $PATH (e.g., ~/.local/bin or /usr/local/bin), or add an alias.

    Option A: Symbolic Link (Recommended)

    mkdir -p ~/.local/bin
    ln -s ~/shell/docker-manager/docker-manager.py ~/.local/bin/dm
    

    Note: Ensure ~/.local/bin is in your $PATH.

    Option B: Alias Add the following to your ~/.zshrc or ~/.bashrc:

    alias dm='~/shell/docker-manager/docker-manager.py'
    

Usage

Run the application using the command name you set up (e.g., dm).

List Running Containers

dm list

Stop Containers

Stop a specific project:

dm stop project_name

Stop all projects:

dm stop --all

Update Containers

Pull latest images and recreate containers for a specific project:

dm update project_name

Update all projects:

dm update --all

Restart Containers

Restart a specific project:

dm restart project_name

Restart all projects:

dm restart --all

Directory Structure Example

The tool expects a structure like this:

~/docker/
├── media-server/
│   └── docker-compose.yml
├── web-app/
│   └── compose.yml
└── database/
    └── docker-compose.yml

In this example, the project names are media-server, web-app, and database.