⚠️ Deprecation Notice: This project and repository is now deprecated and is no longer under active development. Please use compose-go instead.
libcompose
A Go library for Docker Compose. It does everything the command-line tool does, but from within Go -- read Compose files, start them, scale them, etc.
Note: This is not really maintained anymore — the reason are diverse but mainly lack of time from the maintainers
The current state is the following :
- The
libcompose
CLI should considered abandonned. Thev2
parsing is incomplete andv3
parsing is missing. - The official compose Go parser implementation is on
docker/cli
but only supportv3
version of the compose format.
What is the work that is needed:
- Remove the cli code (thus removing dependencies to
docker/cli
) - Clearer separation of packages :
parsing
,conversion
(to docker api or swarm api),execution
(Up
,Down
, … behaviors) - Add support for all compose format version (v1, v2.x, v3.x)
- Switch to either
golang/dep
orgo mod
for dependencies (removing thevendor
folder) - (bonus) extract the
docker/cli
code here and vendor this library intodocker/cli
.
If you are interested to work on libcompose
, feel free to ping me (over twitter @vdemeest), I'll definitely do code reviews and help as much as I can
Note: This is experimental and not intended to replace the Docker Compose command-line tool. If you're looking to use Compose, head over to the Compose installation instructions to get started with it.
Here is a list of known project that uses libcompose
:
- rancher-compose and rancher os (by Rancher)
- openshift (by Red Hat)
- henge (by Red Hat) [Deprecated in favour of kompose]
- kompose (by skippbox)
- compose2kube (by kelseyhightower)
- amazon-ecs-cli (by Amazon AWS)
- libkermit (by vdemeester)
Usage
package main
import (
"log"
"golang.org/x/net/context"
"github.com/docker/libcompose/docker"
"github.com/docker/libcompose/docker/ctx"
"github.com/docker/libcompose/project"
"github.com/docker/libcompose/project/options"
)
func main() {
project, err := docker.NewProject(&ctx.Context{
Context: project.Context{
ComposeFiles: []string{"docker-compose.yml"},
ProjectName: "my-compose",
},
}, nil)
if err != nil {
log.Fatal(err)
}
err = project.Up(context.Background(), options.Up{})
if err != nil {
log.Fatal(err)
}
}
Building
You need either Docker and make
,
or go
in order to build libcompose.
docker
Building with You need Docker and make
and then run the binary
target. This
will create binary for all platform in the bundles
folder.
$ make binary
docker build -t "libcompose-dev:refactor-makefile" .
# […]
---> Making bundle: binary (in .)
Number of parallel builds: 4
--> darwin/386: github.com/docker/libcompose/cli/main
--> darwin/amd64: github.com/docker/libcompose/cli/main
--> linux/386: github.com/docker/libcompose/cli/main
--> linux/amd64: github.com/docker/libcompose/cli/main
--> linux/arm: github.com/docker/libcompose/cli/main
--> windows/386: github.com/docker/libcompose/cli/main
--> windows/amd64: github.com/docker/libcompose/cli/main
$ ls bundles
libcompose-cli_darwin-386* libcompose-cli_linux-amd64* libcompose-cli_windows-amd64.exe*
libcompose-cli_darwin-amd64* libcompose-cli_linux-arm*
libcompose-cli_linux-386* libcompose-cli_windows-386.exe*
go
Building with - You need
go
v1.11 or greater - you need to set export
GO111MODULE=on
environment variable - If your working copy is not in your
GOPATH
, you need to set it accordingly.
$ go generate
# Generate some stuff
$ go build -o libcompose ./cli/main
Running
A partial implementation of the libcompose-cli CLI is also implemented in Go. The primary purpose of this code is so one can easily test the behavior of libcompose.
Run one of these:
libcompose-cli_darwin-386
libcompose-cli_linux-amd64
libcompose-cli_windows-amd64.exe
libcompose-cli_darwin-amd64
libcompose-cli_linux-arm
libcompose-cli_linux-386
libcompose-cli_windows-386.exe
Tests (unit & integration)
You can run unit tests using the test-unit
target and the
integration test using the test-integration
target. If you don't use
Docker and make
to build libcompose
, you can use go test
and the
following scripts : hack/test-unit
and hack/test-integration
.
$ make test-unit
docker build -t "libcompose-dev:refactor-makefile" .
#[…]
---> Making bundle: test-unit (in .)
+ go test -cover -coverprofile=cover.out ./docker
ok github.com/docker/libcompose/docker 0.019s coverage: 4.6% of statements
+ go test -cover -coverprofile=cover.out ./project
ok github.com/docker/libcompose/project 0.010s coverage: 8.4% of statements
+ go test -cover -coverprofile=cover.out ./version
ok github.com/docker/libcompose/version 0.002s coverage: 0.0% of statements
Test success
Current status
The project is still being kickstarted... But it does a lot. Please try it out and help us find bugs.
Contributing
Want to hack on libcompose? Docker's contributions guidelines apply.
If you have comments, questions, or want to use your knowledge to help other, come join the conversation on IRC. You can reach us at #libcompose on Freenode.