# libcompose **Repository Path**: mirrors_docker/libcompose ## Basic Information - **Project Name**: libcompose - **Description**: *Unmaintained/Deprecated* An experimental go library providing Compose-like functionality - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-08 - **Last Updated**: 2025-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### :warning: Deprecation Notice: This project and repository is now deprecated and is no longer under active development. Please use [compose-go](https://github.com/compose-spec/compose-go) instead. # libcompose [![GoDoc](https://godoc.org/github.com/docker/libcompose?status.png)](https://godoc.org/github.com/docker/libcompose) [![Build Status](https://jenkins.dockerproject.org/job/docker/job/libcompose/branch/master/badge/icon)](https://jenkins.dockerproject.org/job/docker/job/libcompose/branch/master/) 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. The `v2` parsing is incomplete and `v3` parsing is missing. - The official compose Go parser implementation is on [`docker/cli`](https://github.com/docker/cli/tree/master/cli/compose) but only support `v3` 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` or `go mod` for dependencies (removing the `vendor` folder) - *(bonus)* extract the [`docker/cli`](https://github.com/docker/cli/tree/master/cli/compose) code here and vendor this library into `docker/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](https://github.com/docker/compose) command-line tool. If you're looking to use Compose, head over to the [Compose installation instructions](http://docs.docker.com/compose/install/) to get started with it.** Here is a list of known project that uses `libcompose`: - [rancher-compose](https://github.com/rancher/rancher-compose) and [rancher os](https://github.com/rancher/os) (by [Rancher](https://github.com/rancher)) - [openshift](https://github.com/openshift/origin) (by [Red Hat](https://github.com/openshift)) - [henge](https://github.com/redhat-developer/henge) (by [Red Hat](https://github.com/redhat-developer)) [Deprecated in favour of kompose] - [kompose](https://github.com/skippbox/kompose) (by [skippbox](https://github.com/skippbox)) - [compose2kube](https://github.com/kelseyhightower/compose2kube) (by [kelseyhightower](https://github.com/kelseyhightower)) - [amazon-ecs-cli](https://github.com/aws/amazon-ecs-cli) (by [Amazon AWS](https://github.com/aws)) - [libkermit](https://github.com/libkermit/docker) (by [vdemeester](https://github.com/vdemeester)) ## Usage ```go 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](http://github.com/docker/docker) and `make`, or `go` in order to build libcompose. ### Building with `docker` You need Docker and ``make`` and then run the ``binary`` target. This will create binary for all platform in the `bundles` folder. ```bash $ 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* ``` ### Building with `go` - 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. ```bash $ 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`. ```bash $ 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](https://github.com/docker/libcompose/blob/master/CONTRIBUTING.md) 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.