Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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: 6 days ago
JSON representation
Docker container lazy loading
- Host: GitHub
- URL: https://github.com/vmorganp/Lazytainer
- Owner: vmorganp
- License: mit
- Created: 2021-10-13T04:08:32.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2024-10-29T15:25:35.000Z (14 days ago)
- Last Synced: 2024-11-05T04:10:23.060Z (7 days ago)
- Topics: container, container-image, docker, docker-compose, docker-container, dockerfile, energy-efficiency, go, golang, greenit, hacktoberfest, hacktoberfest2021, lazy, lazy-loading, lazyload, self-hosted, sustainability
- Language: Go
- Homepage:
- Size: 1.44 MB
- Stars: 574
- Watchers: 4
- Forks: 20
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Codeowners: .github/CODEOWNERS
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
```