Define and run multi-container applications with Docker
Go to file
Guillaume Lours b6a7b985f5
Merge pull request #543 from docker/dependabot/go_modules/gopkg.in/ini.v1-1.60.1
build(deps): bump gopkg.in/ini.v1 from 1.60.0 to 1.60.1
2020-08-24 23:53:56 +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 Revert "Debug for CI failing tests (green locally)" 2020-08-21 12:45:01 +02:00
backend integrate functionality from ecs-plugin 2020-08-19 17:49:21 +02:00
cli Merge pull request #528 from docker/secrets 2020-08-21 14:52:36 +02:00
client Return a default implementation when nil 2020-08-20 14:32:03 +02:00
compose Apply linter recommendations 2020-08-19 08:16:19 +02:00
config config: Move to gotest.tools 2020-08-04 13:27:12 +02:00
containers Implement `docker start` for ACI 2020-08-12 14:50:47 +02:00
context context: Move to gotest.tools 2020-08-04 13:39:00 +02:00
docs Update or add license header which are not valid 2020-08-17 16:55:25 +02:00
ecs Remove version in test compose files 2020-08-24 10:15:42 +02:00
errdefs errdefs: Move to gotest.tools 2020-08-04 13:45:39 +02:00
example integrate functionality from ecs-plugin 2020-08-19 17:49:21 +02:00
formatter formatter,multierror,progress: Move to gotest.tools 2020-08-04 13:53:54 +02:00
local Better renaming 2020-08-24 16:09:20 +02:00
metrics Validate run restart option value. Default value is “none”, instead of “no”, this is more in line with compose values, and changes only the default so should not have too much impact on legacy usage. 2020-08-04 17:11:21 +02:00
progress Validate run restart option value. Default value is “none”, instead of “no”, this is more in line with compose values, and changes only the default so should not have too much impact on legacy usage. 2020-08-04 17:11:21 +02:00
prompt Update or add license header which are not valid 2020-08-17 16:55:25 +02:00
protos Add start to gRPC 2020-08-12 14:50:47 +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 Update or add license header which are not valid 2020-08-17 16:55:25 +02:00
tests Merge pull request #537 from docker/e2e_better_logs 2020-08-24 17:12:15 +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 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
CHANGELOG.md Changelog updates 2020-06-24 16:49:11 +02:00
CONTRIBUTING.md Add issue template, Contributing guide and maintainers list 2020-08-18 09:53:57 +02:00
Dockerfile Add import restrictions check 2020-08-19 12:31:30 +02:00
LICENSE Add LICENSE and NOTICE files 2020-08-17 10:20:49 +02:00
MAINTAINERS Add issue template, Contributing guide and maintainers list 2020-08-18 09:53:57 +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 Allow running ECS E2E tests locally 2020-08-20 09:59:24 +02:00
builder.Makefile Add import restrictions check 2020-08-19 12:31:30 +02:00
go.mod build(deps): bump gopkg.in/ini.v1 from 1.60.0 to 1.60.1 2020-08-24 21:28:02 +00:00
go.sum Update go.sum after dependabot PR 2020-08-24 21:28:34 +00:00
import-restrictions.yaml Add import restrictions check 2020-08-19 12:31:30 +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