Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/vmorganp/Lazytainer

Docker container lazy loading
https://github.com/vmorganp/Lazytainer

container container-image docker docker-compose docker-container dockerfile energy-efficiency go golang greenit hacktoberfest hacktoberfest2021 lazy lazy-loading lazyload self-hosted sustainability

Last synced: 1 day ago
JSON representation

Docker container lazy loading

Awesome Lists containing this project

README

        

# Lazytainer - Lazy Load Containers

Putting your containers to sleep
[![Docker Release](https://github.com/vmorganp/Lazytainer/actions/workflows/release.yml/badge.svg)](https://github.com/vmorganp/Lazytainer/actions/workflows/release.yml)

---

https://github.com/vmorganp/Lazytainer/assets/31448722/91af5528-6fee-4837-b4d8-11c03e792e94

## Quick Explanation

Monitors network traffic to containers. If there is traffic, the container runs, otherwise the container is stopped/paused. for more details check out the [Configuration](##Configuration) section.

## Want to test it?

1. Clone the project
```
git clone https://github.com/vmorganp/Lazytainer
cd Lazytainer
```
2. Start the stack
```sh
# if "docker compose" doesn't work, try "docker-compose"
docker compose up
```
This will create 2 containers that you can reach through a third "lazytainer" container
3. View the running container by navigating to its web ui at `http://localhost:81`. You should see some information about the container
4. Close the tab and wait until the logs say "stopped container"
5. Navigate again to `http://localhost:81`, it should be a dead page
6. Navigate to `http://localhost:81` several times, enough to generate some network traffic, and it should start
7. To clean up, run
```sh
docker-compose down
```

## Configuration

### Note:

Lazytainer does not "automatically" start and stop all of your containers. You must apply a label to them and proxy their traffic through the Lazytainer container.

### Examples

For examples of lazytainer in action, check out the [Examples](./examples/)

### Groups

Lazytainer starts and stops other containers in "groups" of one or more other containers. To assign a container to a lazytainer group, a label must be added. The label will look like this.

```yaml
yourContainerThatWillSleep:
# ... configuration omitted for brevity
labels:
- "lazytainer.group="
```

To configure a group, add labels to the lazytainer container like this. Note that each is required to have a port(s) specified. These ports must also be forwarded on the lazytainer container

```yaml
lazytainer:
# ... configuration omitted for brevity
ports:
- 81:81 # used by group1 and group2
- 82:82 # used by group2
labels:
# Configuration items are formatted like this
- "lazytainer.group..=value"
# configuration for group 1
- "lazytainer.group.group1.ports=81"
# configuration for group 2
- "lazytainer.group.group2.ports=81,82"
```

Group properties that can be changed include:

| Name | description | required | default |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- |
| ports | Network ports associated with a group, can be comma separated. Should be the INTERNAL port, not the EXPOSED port. ex: service running on `8080` but exposed on `80` should have port set to `8080` | Yes | n/a |
| inactiveTimeout | Time (seconds) before container is stopped when there is insufficient network activity | No | 30 |
| minPacketThreshold | Minimum count of network packets for container to be on | No | 30 |
| ignoreActiveClients | Determine container activity based on only packet count, ignoring connected client count. | No | false |
| pollRate | How frequently (seconds) to check network activity | No | 30 |
| sleepMethod | How to put the container to sleep. Can be `stop` or `pause` | No | `stop` |
| netInterface | Network interface to listen on | No | `eth0` |

### Additional Configuration

#### Verbose Logging

For more verbose logging, you can apply the environment variable `VERBOSE=true` to lazytainer:

```yaml
lazytainer:
# ... configuration omitted for brevity
environment:
- VERBOSE=true
```

#### ipv4/ipv6 toggles

To disable ipv4 or ipv6, pass environment variables:

```yaml
lazytainer:
# ... configuration omitted for brevity
environment:
- IPV6_DISABLED=true
- IPV4_DISABLED=true
```

#### Volumes

If using lazytainer, you MUST provide the following volume to lazytainer

```yaml
lazytainer:
# ... configuration omitted for brevity
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
```