Define and run multi-container applications with Docker
Go to file
Guillaume Tardif a9a6d3bf1d Signed-off-by: Guillaume Tardif <guillaume.tardif@docker.com> 2020-08-26 10:50:12 +02:00
.dependabot Run dependabot daily instead of weekly 2020-06-09 09:45:57 +02:00
.github Merge pull request #523 from docker/test_triggers 2020-08-21 09:49:34 +02:00
aci Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
backend Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
cli Merge pull request #485 from docker/repo-rename 2020-08-25 15:58:51 +02:00
client Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
compose Apply linter recommendations 2020-08-19 08:16:19 +02:00
config Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
containers Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
context Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
docs Update or add license header which are not valid 2020-08-17 16:55:25 +02:00
ecs Fix last references to /docker/api 2020-08-25 16:26:36 +02:00
errdefs errdefs: Move to gotest.tools 2020-08-04 13:45:39 +02:00
example Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
formatter formatter,multierror,progress: Move to gotest.tools 2020-08-04 13:53:54 +02:00
local Merge pull request #485 from docker/repo-rename 2020-08-25 15:58:51 +02:00
metrics Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
progress Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
prompt Update or add license header which are not valid 2020-08-17 16:55:25 +02:00
protos Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
scripts/validate Add a script to check if go.mod and go.sum are up-to-date 2020-08-18 14:57:53 +02:00
secrets Apply linter recommendations 2020-08-19 08:16:19 +02:00
server Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
tests Merge pull request #485 from docker/repo-rename 2020-08-25 15:58:51 +02:00
utils Update or add license header which are not valid 2020-08-17 16:55:25 +02:00
.dockerignore Add .git to .dockerignore 2020-05-29 11:29:28 +02:00
.gitattributes Removed test requiring linux containers 2020-06-11 12:58:58 +02:00
.gitignore
.golangci.yml Extract interface / types to allow unit tests / mock 2020-05-15 10:15:56 +02:00
CHANGELOG.md Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
CONTRIBUTING.md Add issue template, Contributing guide and maintainers list 2020-08-18 09:53:57 +02:00
Dockerfile Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
LICENSE Add LICENSE and NOTICE files 2020-08-17 10:20:49 +02:00
MAINTAINERS Signed-off-by: Guillaume Tardif <guillaume.tardif@docker.com> 2020-08-26 10:50:12 +02:00
Makefile First ECS E2E test 2020-08-19 19:13:23 +02:00
NOTICE Add LICENSE and NOTICE files 2020-08-17 10:20:49 +02:00
README.md Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +02:00
builder.Makefile Add import restrictions check 2020-08-19 12:31:30 +02:00
go.mod Merge pull request #485 from docker/repo-rename 2020-08-25 15:58:51 +02:00
go.sum Update go.sum after dependabot PR 2020-08-24 21:28:34 +00:00
import-restrictions.yaml Rename docker/api -> docker/compose-cli 2020-08-21 17:28:39 +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.15
  • 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.30.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 com.docker.cli.

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

Building the project

$ make

This will make the cli with all backends enabled. make cross on the other hand will cross-compile the cli without the example and local backend. We use make cross to build for our release, hence the exclusion of those backends. You can still cross-compile with all backends enabled: BUILD_TAGS=example,local make cross.

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

Tests

Unit tests

make test

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

e2e tests

make e2e-local

This requires a local Docker Engine running

Local ACI E2E tests:

AZURE_TENANT_ID="xxx" AZURE_CLIENT_ID="yyy" AZURE_CLIENT_SECRET="yyy" make e2e-aci

This requires azure service principal credentials to login to azure. To get the values to be set in local environment variables, you can create a new service principal once you're logged in azure (with docker login azure)

az ad sp create-for-rbac --name 'MyTestServicePrincipal' --sdk-auth

Running the ACI e2e tests will override your local login, the service principal credentials use a token that cannot be refreshed automatically. You might need to run again docker login azure to properly use the command line after running ACI e2e tests.

You can also run a single ACI test from the test suite:

AZURE_TENANT_ID="xxx" AZURE_CLIENT_ID="yyy" AZURE_CLIENT_SECRET="yyy" make E2E_TEST=TestContainerRun e2e-aci

Local ECS E2E tests:

TEST_AWS_PROFILE=myProfile TEST_AWS_REGION=eu-west-3 make e2e-ecs

This requires a valid AWS profile defined in ~/.aws/credentials.

Release

To create a new release:

  • check that the CI is green on the main branch's commit you want to release
  • simply create a new tag of the form vx.y.z, following existing tags, and push the tag

Pushing the tag will automatically create a new release and make binaries (mac, win, linux) available for download.

Note: Linux binaries are not automatically copied to /docker/aci-integration-beta, if you want to make the linux binary publicly available, you'll need to manually create a release in aci-integration-beta and upload the binary. For Desktop integration, you need to make a PR in /docker/pinata and update the cli release number here