Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/komuw/meli
faster, drop in, alternative to docker-compose
https://github.com/komuw/meli
docker docker-compose go meli
Last synced: 4 days ago
JSON representation
faster, drop in, alternative to docker-compose
- Host: GitHub
- URL: https://github.com/komuw/meli
- Owner: komuw
- License: mit
- Created: 2017-04-06T18:38:31.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-05-11T20:39:29.000Z (over 1 year ago)
- Last Synced: 2024-12-06T06:11:54.726Z (17 days ago)
- Topics: docker, docker-compose, go, meli
- Language: Go
- Homepage:
- Size: 27.4 MB
- Stars: 174
- Watchers: 11
- Forks: 13
- Open Issues: 21
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# meli
[![ci](https://github.com/komuw/meli/workflows/meli%20ci/badge.svg)](https://github.com/komuw/meli/actions)
[![codecov](https://codecov.io/gh/komuw/meli/branch/master/graph/badge.svg)](https://codecov.io/gh/komuw/meli)
[![GoDoc](https://godoc.org/github.com/komuw/meli?status.svg)](https://godoc.org/github.com/komuw/meli)
[![Go Report Card](https://goreportcard.com/badge/github.com/komuw/meli)](https://goreportcard.com/report/github.com/komuw/meli)Meli is supposed to be a faster, and drop in, alternative to docker-compose. Faster in the sense that, Meli will try to pull as many services(docker containers)
as it can in parallel.Meli is a Swahili word meaning ship; so think of Meli as a ship carrying your docker containers safely across the treacherous container seas.
It's currently work in progress, API will remain unstable for sometime.
I only intend to support docker-compose [version 3+](https://docs.docker.com/compose/compose-file/compose-versioning/)
Meli is NOT intended to replicate every feature of docker-compose, it is primarily intended to enable you to pull, build and run the services in your docker-compose file as fast as possible.
If you want to exec in to a running container, use docker; if you want to run an adhoc command in a container, use docker; if you want..... you get the drift.# Installing/Upgrading
Download a binary release for your particular OS from the [releases page](https://github.com/komuw/meli/releases)
We have binaries for:
- linux(64bit)
- windows(64bit)
- macOS(64bit)# Usage
`meli --help`
```bash
Usage of meli:
-up
Builds, re/creates, starts, and attaches to containers for a service.
-d option runs containers in the background
-f string
path to docker-compose.yml file. (default "docker-compose.yml")
-build
Rebuild services
-v Show version information.
-version
Show version information.
````cat docker-compose.yml`
```bash
version: '3'
services:
redis:
image: 'redis:3.0-alpine'
environment:
- RACK_ENV=development
- type=database
ports:
- "6300:6379"
- "6400:22"
````meli -up`
```bash
redis :: Pulling from library/redis
redis :: Pulling fs layer
redis :: Pulling fs layer
redis :: Downloading [======================> ] 3.595kB/8.164kB
redis :: Downloading [==============================>] 8.164kB/8.164kB
redis :: Download complete [========================>] 8.164kB/8.164kB
redis :: The server is now ready to accept connections on port 6379
```# Usage as a library
You really should be using the official [docker Go sdk](https://godoc.org/github.com/moby/moby/client)
However, if you feel inclined to use meli;
```go
package mainimport (
"context"
"log"
"os""github.com/docker/docker/client"
"github.com/komuw/meli"
)func main() {
dc := &meli.DockerContainer{
ComposeService: meli.ComposeService{Image: "busybox"},
LogMedium: os.Stdout,
FollowLogs: true}ctx := context.Background()
cli, err := client.NewEnvClient()
if err != nil {
log.Fatal(err, " :unable to intialize docker client")
}
defer cli.Close()meli.LoadAuth() // load dockerhub info
err = meli.PullDockerImage(ctx, cli, dc)
log.Println(err)}
```# Benchmarks
Aaah, everyones' favorite vanity metric yet no one seems to know how to conduct one in a consistent and scientific manner.
Take any results you see here with a large spoon of salt; They are unscientific and reek of all that is wrong with most developer benchmarks.Having made that disclaimer,
Benchmark test:
[this docker-compose file](https://github.com/komuW/meli/blob/master/testdata/docker-compose.yml)Benchmark script:
for docker-compose:
`docker ps -aq | xargs docker rm -f; docker system prune -af; /usr/bin/time -apv docker-compose up -d`
for meli:
`docker ps -aq | xargs docker rm -f; docker system prune -af; /usr/bin/time -apv meli -up -d`Benchmark results(average):
| tool | Elapsed wall clock time(seconds) |
| :--- | ---: |
| docker-compose | 10.411 seconds |
| meli | 3.945 seconds |Thus, meli appears to be 2.6 times faster than docker-compose(by wall clock time).
You can [checkout the current benchmark results from circleCI](https://circleci.com/gh/komuW/meli/)
However, I'm not making a tool to take docker-compose to the races.# Development
#### Build
`git clone [email protected]:komuw/meli.git`
`go build -trimpath -o meli cli/cli.go`
`./meli -up -f /path/to/docker-compose-file.yml`# TODO
- add better documentation(godoc)
- stabilise API(maybe)