From e6d06f71607ac96b402a64ed56e07abba219b3bd Mon Sep 17 00:00:00 2001 From: Mohammad Nasirifar Date: Thu, 13 Dec 2018 20:26:10 -0500 Subject: [PATCH] Use BuildKit to skip source code COPY if BIND_DIR set build the final stage of the Dockerfile (including COPY ...) if no BIND_DIR is used. if BIND_DIR is used, build the dev stage, thus skipping the COPY. Original author: @thaJeztah Signed-off-by: Mohammad Nasirifar (cherry picked from commit e6d7df2e5d313800414b955e10a26d6687e7a1bf) Signed-off-by: Sebastiaan van Stijn Upstream-commit: e5a039169f389120be3fbc2a9db45ef8bc99eae5 Component: engine --- components/engine/Dockerfile | 2 ++ components/engine/Makefile | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/components/engine/Dockerfile b/components/engine/Dockerfile index 15ccf0f829..a2dcbb8624 100644 --- a/components/engine/Dockerfile +++ b/components/engine/Dockerfile @@ -245,5 +245,7 @@ WORKDIR /go/src/github.com/docker/docker VOLUME /var/lib/docker # Wrap all commands in the "docker-in-docker" script to allow nested containers ENTRYPOINT ["hack/dind"] + +FROM dev AS final # Upload docker source COPY . /go/src/github.com/docker/docker diff --git a/components/engine/Makefile b/components/engine/Makefile index 741b05c4ab..8c2c66030e 100644 --- a/components/engine/Makefile +++ b/components/engine/Makefile @@ -34,6 +34,7 @@ DOCKER_ENVS := \ -e KEEPBUNDLE \ -e DOCKER_BUILD_ARGS \ -e DOCKER_BUILD_GOGC \ + -e DOCKER_BUILD_OPTS \ -e DOCKER_BUILD_PKGS \ -e DOCKER_BUILDKIT \ -e DOCKER_BASH_COMPLETION_PATH \ @@ -116,6 +117,9 @@ INTERACTIVE := $(shell [ -t 0 ] && echo 1 || echo 0) ifeq ($(INTERACTIVE), 1) DOCKER_FLAGS += -t endif +ifeq ($(BIND_DIR), .) + DOCKER_BUILD_OPTS += --target=dev +endif DOCKER_RUN_DOCKER := $(DOCKER_FLAGS) "$(DOCKER_IMAGE)" @@ -132,7 +136,7 @@ dynbinary: build ## build the linux dynbinaries build: bundles $(warning The docker client CLI has moved to github.com/docker/cli. For a dev-test cycle involving the CLI, run:${\n} DOCKER_CLI_PATH=/host/path/to/cli/binary make shell ${\n} then change the cli and compile into a binary at the same location.${\n}) - docker build ${BUILD_APT_MIRROR} ${DOCKER_BUILD_ARGS} -t "$(DOCKER_IMAGE)" -f "$(DOCKERFILE)" . + docker build ${BUILD_APT_MIRROR} ${DOCKER_BUILD_ARGS} ${DOCKER_BUILD_OPTS} -t "$(DOCKER_IMAGE)" -f "$(DOCKERFILE)" . bundles: mkdir bundles