container-run 0.3.5

An opinionated wrapper for running commands in containers
# container-run

An opinionated wrapper for running commands in containers. container-run
automates the mechanics of associating directories with container images
and working directories to run commands within those containers.

## How to use container-run

The `container-run` binary will attempt to find a container engine
(`podman` then `docker`) in the path, and then run any arguments after the
command (eg `container-run /bin/run --this=stuff --inside=container`) inside a
container that will have the current directory mounted inside with read/write
privileges.  In this manner a container environment can be used to read and
write files on the host filesystem, while a configuration file organizes
common container options.

### Install

Install from [crates.io][crates-page] using cargo.

1. `cargo install container-run`

### Create a configuration file

Create a file in one of three locations:
* `./.container-run.conf`
* `~/.container-run.conf`
* `~/.config/container-run/container-run.conf`

```json
{
    "basenames": {
        "myproject": {"profile": "golang-github"}
    },
    "profiles": {
        "golang-github": {
            "image": "docker.io/library/golang:1.16",
            "mountpoint": "/go/src/github.com/{basename}"
        }
    }
}
```

See the [container-run.conf documentation](/docs/config.md) for more detailed
information.

### Invoke container-run

Most frequently, container-run is used to execute software development oriented
commands within the scope of a container that has been constructed to provide
all the necessary build tools.

Change directory to the path you would like to execute commands within a
container, and execute the commands by prefixing them with `container-run`
(eg `$ container-run make test build`).

#### Example usage
With a working directory of `/home/me/myproject`, and the configuration
file from the configuration file section, running the
command `container-run make test` will do the following:
* determine the container engine to use (podman or docker)
* start running a container that:
    * uses the image `docker.io/library/golang:1.16`
    * mounts the host directory `/home/me/myproject/` into the container as `/go/src/github.com/myproject`
    * sets the working directory in the container to `/go/src/github.com/myproject`
    * executes the command `make test`
* passes execution to the container engine process, this will return all output and status
  to the shell from which it ran

[crates-page]: https://crates.io/crates/container-run