Skip to main content

Multiple Processes in a Single Container

Project description

Monofy: Process Manager for Docker Containers

This Python script is designed to manage multiple processes within a single Docker container, ensuring they are started, monitored, and terminated together.

This approach is useful when the processes are tightly integrated and need to operate in unison.

Features

  • Unified Process Management: Starts and manages multiple processes as children of a single parent process.

  • Connected fates: If one child process exits, terminate all others.

  • Signal Handling: Forwards relevant signals (e.g., SIGINT, SIGTERM) to all child processes.

  • Unified Output: Consolidates the output (stdout, stderr) of all child processes.

  • Graceful Shutdown: Ensure the parent process waits for all children to exit before shutting down.

Rationale

Running multiple processes in a single Docker container is often discouraged. However, when processes are closely connected and need to work together, this approach can simplify deployment and maintenance.

This script provides a Python-based solution to manage such processes efficiently within a single container, without adding unnecessary complexity. Read more about why this is a great idea

Installation

To use this script, clone the repository or install via your preferred method:

pip install monofy

Usage

You can use this script to start and manage multiple processes in a Docker container.

The commands for the processes and their own arguments should be passed as arguments should be passed as arguments to monofy, separated by the literal string |||.

You can also provide "pre commands", one or more commands to run before the parallel processes are started, usually to perform setup tasks like checking the environment. Such pre-commands should be separated by &&.

Examples

Launch two commands in parallel, with connected fates (death of one kills the other):

monofy child-command-1 --param-for-2 '|||' child-command-2 --param-for-2

(Note the single quotes around the operators, which ensure they are not parsed by your shell, but are instead passed on to monofy)

Launch some "pre commands" before launching two commands in parallel:

monofy pre-command-1 --foo=bar '&&' child-command-1 param-for-that '|||' child-command-2 -v

Example Dockerfile

Here’s how you might use this script in a Dockerfile:

FROM [..]

RUN pip install monofy

CMD ["monofy", "check-install", "--deploy", "&&", "web-server", "0.0.0.0:8000", "|||", "background-process", "-v"]

Usage outside Docker

This package was written with (the limitations of) Docker in mind, but it can also be used in other contexts. One thing I found useful is to use it to start multiple development-related processes in a single line. The property that the death of one process takes down the others is very useful in reducing confusion if only a part of your set of tools goes down.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

monofy-1.0.0.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

monofy-1.0.0-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file monofy-1.0.0.tar.gz.

File metadata

  • Download URL: monofy-1.0.0.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for monofy-1.0.0.tar.gz
Algorithm Hash digest
SHA256 572694c93081a8693ff8fc01dadbf4577e9f6f988639a563e5a36de32e16491e
MD5 ec30b100936c6d2d44395f528800a231
BLAKE2b-256 0fa13274cb48d55704fe095d9674ec6976d487686ab8b65606884fd2ecc52d46

See more details on using hashes here.

File details

Details for the file monofy-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: monofy-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 7.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for monofy-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d67073034f464691b97a87bb1e1b1a4dd9f2a19acd4660e2164796aef3214289
MD5 944aa872015de0090a67a01393b27097
BLAKE2b-256 3ce09077e9537cd4cdb3f3a26203830cf82cdfd227118a042a2adb2587bbd561

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page