Define and run multi-container applications with Docker
Go to file
Djordje Lukic 11339761ca Change the way a context is stored
Initially we stored the context data in the `Metadata` of the context
but in hindsight this data would be better of in the `Endpoints` because
that's what it is used for.

Before:
```json
{
  "Name": "aci",
  "Metadata": {
    "Type": "aci",
    "Data": {
      "key": "value"
    }
  },
  "Endpoints": {
      "docker": {}
  }
}
```

After:
```json
{
  "Name": "aci",
  "Type": "aci",
  "Metadata": {},
  "Endpoints": {
      "aci": {
          "key": "value"
      },
      "docker": {}
  }
}
```

With this change the contexts that we create are more in line with the contexts the docker cli creates.

It also makes the code less complicated since we don't need to marsal twice any more. The API is nicer too:

```go
// Get a context:
c, err := store.Get(contextName)

// Get the stored endpoint:
var aciContext store.AciContext
if err := contextStore.GetEndpoint(currentContext, &aciContext); err != nil {
	return nil, err
}
```
2020-05-22 16:32:43 +02:00
.github Change the way a context is stored 2020-05-22 16:32:43 +02:00
azure Change the way a context is stored 2020-05-22 16:32:43 +02:00
backend Use alpine as base image 2020-05-20 18:39:10 +02:00
cli Change the way a context is stored 2020-05-22 16:32:43 +02:00
client Change the way a context is stored 2020-05-22 16:32:43 +02:00
compose Use alpine as base image 2020-05-20 18:39:10 +02:00
containers Implement gRPC logging 2020-05-22 10:16:04 +02:00
context Change the way a context is stored 2020-05-22 16:32:43 +02:00
docs/cli Move CLI UX docs into folder 2020-05-14 13:29:11 +02:00
errdefs Change the way a context is stored 2020-05-22 16:32:43 +02:00
example Add tests for ps --all 2020-05-18 15:31:59 +02:00
moby Implement gRPC logging 2020-05-22 10:16:04 +02:00
multierror Add multierror 2020-05-13 18:37:41 +02:00
server Refactor the interceptors 2020-05-22 10:16:04 +02:00
tests Change the way a context is stored 2020-05-22 16:32:43 +02:00
.dockerignore Update dockerignore 2020-05-20 15:56:32 +02:00
.gitignore Remove non-project path 2020-04-24 14:04:27 +02:00
.golangci.yml Extract interface / types to allow unit tests / mock 2020-05-15 10:15:56 +02:00
Dockerfile Add buildkit cache when running unit tests 2020-05-22 13:26:30 +02:00
Makefile Use docker build for lint 2020-05-22 13:14:44 +02:00
README.md delegate Moby to docker-classic binary, link docker-classic in e2e tests 2020-05-20 14:23:29 +02:00
builder.Makefile Use alpine as base image 2020-05-20 18:39:10 +02:00
go.mod Implement gRPC logging 2020-05-22 10:16:04 +02:00
go.sum Implement gRPC logging 2020-05-22 10:16:04 +02:00

README.md

Docker API

Actions Status

Dev Setup

The recommended way is to use the main Makefile that runs everything inside a container.

If you don't have or want to use Docker for building you need to make sure you have all the needed tools installed locally:

  • go 1.14
  • protoc
  • go get github.com/golang/protobuf/protoc-gen-go@v1.4.1
  • go get golang.org/x/tools/cmd/goimports
  • go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.26.0

And then you can call the same make targets but you need to pass it the builder.Makefile (make -f builder.Makefile).

The new CLI delegates to the classic docker for default contexts ; delegation is done to docker-classic.

  • make classic-link will create a docker-classic link in /usr/local/bin if you don't already have it from Docker Desktop

Building the project

$ make

If you make changes to the .proto files, make sure to make protos to generate go code.

Tests

To run unit tests:

make test

If you need to update a golden file simply do go test ./... -test.update-golden.