2022-09-08 19:27:41 +00:00
.PHONY : all binary dynbinary build cross help install manpages run shell test test -docker -py test -integration test -unit validate validate -% win
2013-11-14 05:34:25 +00:00
2019-06-07 17:10:31 +00:00
DOCKER ?= docker
2022-11-25 10:46:51 +00:00
BUILDX ?= $( DOCKER) buildx
2019-06-07 17:10:31 +00:00
2016-03-24 16:12:40 +00:00
# set the graph driver as the current graphdriver if not set
2016-04-06 21:45:32 +00:00
DOCKER_GRAPHDRIVER := $( if $( DOCKER_GRAPHDRIVER) ,$( DOCKER_GRAPHDRIVER) ,$( shell docker info 2>& 1 | grep "Storage Driver" | sed 's/.*: //' ) )
2016-11-15 15:23:48 +00:00
export DOCKER_GRAPHDRIVER
2016-03-24 16:12:40 +00:00
2016-11-16 10:49:32 +00:00
DOCKER_GITCOMMIT := $( shell git rev-parse --short HEAD || echo unsupported)
export DOCKER_GITCOMMIT
2019-01-30 21:16:16 +00:00
# allow overriding the repository and branch that validation scripts are running
# against these are used in hack/validate/.validate to check what changed in the PR.
export VALIDATE_REPO
export VALIDATE_BRANCH
2019-02-04 19:05:10 +00:00
export VALIDATE_ORIGIN_BRANCH
2019-01-30 21:16:16 +00:00
2014-11-13 23:04:13 +00:00
# env vars passed through directly to Docker's build scripts
2016-02-19 22:42:51 +00:00
# to allow things like `make KEEPBUNDLE=1 binary` easily
2016-07-01 09:18:42 +00:00
# `project/PACKAGERS.md` have some limited documentation of some of these
2017-11-15 21:54:56 +00:00
#
# DOCKER_LDFLAGS can be used to pass additional parameters to -ldflags
# option of "go build". For example, a built-in graphdriver priority list
# can be changed during build time like this:
#
2022-05-24 15:17:08 +00:00
# make DOCKER_LDFLAGS="-X github.com/docker/docker/daemon/graphdriver.priority=overlay2,zfs" dynbinary
2017-11-15 21:54:56 +00:00
#
2014-11-13 23:04:13 +00:00
DOCKER_ENVS := \
-e BUILDFLAGS \
2016-02-04 14:41:48 +00:00
-e KEEPBUNDLE \
2016-08-10 02:19:01 +00:00
-e DOCKER_BUILD_ARGS \
2016-01-26 21:17:05 +00:00
-e DOCKER_BUILD_GOGC \
2018-12-14 01:26:10 +00:00
-e DOCKER_BUILD_OPTS \
2016-01-15 23:37:46 +00:00
-e DOCKER_BUILD_PKGS \
2018-05-16 00:09:20 +00:00
-e DOCKER_BUILDKIT \
2017-06-23 16:05:38 +00:00
-e DOCKER_BASH_COMPLETION_PATH \
2017-04-17 23:18:46 +00:00
-e DOCKER_CLI_PATH \
2023-04-19 12:48:47 +00:00
-e DOCKERCLI_VERSION \
-e DOCKERCLI_REPOSITORY \
-e DOCKERCLI_INTEGRATION_VERSION \
-e DOCKERCLI_INTEGRATION_REPOSITORY \
2015-05-07 12:22:44 +00:00
-e DOCKER_DEBUG \
2015-05-19 22:09:58 +00:00
-e DOCKER_EXPERIMENTAL \
2016-04-14 09:37:42 +00:00
-e DOCKER_GITCOMMIT \
2016-11-15 15:23:48 +00:00
-e DOCKER_GRAPHDRIVER \
2017-11-15 21:54:56 +00:00
-e DOCKER_LDFLAGS \
2016-07-07 20:01:44 +00:00
-e DOCKER_PORT \
2015-11-21 16:31:25 +00:00
-e DOCKER_REMAP_ROOT \
2020-02-18 09:43:56 +00:00
-e DOCKER_ROOTLESS \
2015-04-15 06:39:15 +00:00
-e DOCKER_STORAGE_OPTS \
2019-04-16 15:28:49 +00:00
-e DOCKER_TEST_HOST \
2015-05-06 22:39:29 +00:00
-e DOCKER_USERLANDPROXY \
2018-06-01 17:19:20 +00:00
-e DOCKERD_ARGS \
2022-02-20 18:21:10 +00:00
-e DELVE_PORT \
2022-08-30 11:34:30 +00:00
-e GITHUB_ACTIONS \
2019-10-07 13:20:03 +00:00
-e TEST_FORCE_VALIDATE \
2017-08-30 16:01:01 +00:00
-e TEST_INTEGRATION_DIR \
2022-10-17 12:29:05 +00:00
-e TEST_INTEGRATION_USE_SNAPSHOTTER \
2019-07-29 22:00:55 +00:00
-e TEST_SKIP_INTEGRATION \
-e TEST_SKIP_INTEGRATION_CLI \
2022-08-26 18:19:00 +00:00
-e TESTCOVERAGE \
2019-04-16 15:28:49 +00:00
-e TESTDEBUG \
2014-11-13 23:04:13 +00:00
-e TESTDIRS \
-e TESTFLAGS \
2019-07-29 22:00:55 +00:00
-e TESTFLAGS_INTEGRATION \
-e TESTFLAGS_INTEGRATION_CLI \
2019-08-02 20:32:36 +00:00
-e TEST_FILTER \
2016-07-09 03:52:33 +00:00
-e TIMEOUT \
2019-01-30 21:16:16 +00:00
-e VALIDATE_REPO \
-e VALIDATE_BRANCH \
2019-02-04 19:05:10 +00:00
-e VALIDATE_ORIGIN_BRANCH \
2017-12-05 14:29:37 +00:00
-e VERSION \
2018-07-11 22:25:38 +00:00
-e PLATFORM \
2018-08-18 00:05:21 +00:00
-e DEFAULT_PRODUCT_LICENSE \
2022-04-14 17:52:23 +00:00
-e PRODUCT \
-e PACKAGER_NAME
2014-11-13 23:04:13 +00:00
# note: we _cannot_ add "-e DOCKER_BUILDTAGS" here because even if it's unset in the shell, that would shadow the "ENV DOCKER_BUILDTAGS" set in our Dockerfile, which is very important for our official builds
2015-02-13 22:50:42 +00:00
# to allow `make BIND_DIR=. shell` or `make BIND_DIR= test`
2014-07-07 16:50:48 +00:00
# (default to no bind mount if DOCKER_HOST is set)
2015-02-13 22:50:42 +00:00
# note: BINDDIR is supported for backwards-compatibility here
BIND_DIR := $( if $( BINDDIR) ,$( BINDDIR) ,$( if $( DOCKER_HOST) ,,bundles) )
2018-10-06 18:06:45 +00:00
# DOCKER_MOUNT can be overriden, but use at your own risk!
i f n d e f D O C K E R _ M O U N T
2015-02-13 22:50:42 +00:00
DOCKER_MOUNT := $( if $( BIND_DIR) ,-v " $( CURDIR) / $( BIND_DIR) :/go/src/github.com/docker/docker/ $( BIND_DIR) " )
2019-06-03 23:05:23 +00:00
DOCKER_MOUNT := $( if $( DOCKER_BINDDIR_MOUNT_OPTS) ,$( DOCKER_MOUNT) :$( DOCKER_BINDDIR_MOUNT_OPTS) ,$( DOCKER_MOUNT) )
2014-11-13 23:04:13 +00:00
2016-09-22 20:49:28 +00:00
# This allows the test suite to be able to run without worrying about the underlying fs used by the container running the daemon (e.g. aufs-on-aufs), so long as the host running the container is running a supported fs.
# The volume will be cleaned up when the container is removed due to `--rm`.
# Note that `BIND_DIR` will already be set to `bundles` if `DOCKER_HOST` is not set (see above BIND_DIR line), in such case this will do nothing since `DOCKER_MOUNT` will already be set.
2018-03-23 06:39:03 +00:00
DOCKER_MOUNT := $( if $( DOCKER_MOUNT) ,$( DOCKER_MOUNT) ,-v /go/src/github.com/docker/docker/bundles) -v " $( CURDIR) /.git:/go/src/github.com/docker/docker/.git "
2016-09-22 20:49:28 +00:00
2021-12-23 11:06:34 +00:00
DOCKER_MOUNT_CACHE := -v docker-dev-cache:/root/.cache -v docker-mod-cache:/go/pkg/mod/
2017-04-17 23:18:46 +00:00
DOCKER_MOUNT_CLI := $( if $( DOCKER_CLI_PATH) ,-v $( shell dirname $( DOCKER_CLI_PATH) ) :/usr/local/cli,)
2017-06-23 16:05:38 +00:00
DOCKER_MOUNT_BASH_COMPLETION := $( if $( DOCKER_BASH_COMPLETION_PATH) ,-v $( shell dirname $( DOCKER_BASH_COMPLETION_PATH) ) :/usr/local/completion/bash,)
2018-09-18 20:28:49 +00:00
DOCKER_MOUNT := $( DOCKER_MOUNT) $( DOCKER_MOUNT_CACHE) $( DOCKER_MOUNT_CLI) $( DOCKER_MOUNT_BASH_COMPLETION)
2018-10-06 18:06:45 +00:00
e n d i f # ifndef DOCKER_MOUNT
# This allows to set the docker-dev container name
DOCKER_CONTAINER_NAME := $( if $( CONTAINER_NAME) ,--name $( CONTAINER_NAME) ,)
2016-06-27 09:19:48 +00:00
Makefile: do not tag docker-dev image with GIT_BRANCH
When building the dev image, the Makefile generates a tag-name for the image,
based on the current git branch. As a result of this naming, old images will
collect on a developer's machine (especially when building from different
branches, for example when reviewing pull requests):
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-dev HEAD 9785a8fb82f5 30 hours ago 2.13GB
docker-dev master 9785a8fb82f5 30 hours ago 2.13GB
docker-dev seccomp-closer-to-oci 9785a8fb82f5 30 hours ago 2.13GB
docker-dev move-stackdump 06882c142bfd 2 days ago 2.13GB
docker-dev add-dns-to-docker-info 2961ed1b99bd 10 days ago 2.13GB
docker-dev add-platform-info 2961ed1b99bd 10 days ago 2.13GB
docker-dev rata-seccomp-new-fields 2961ed1b99bd 10 days ago 2.13GB
docker-dev swagger-wip 2961ed1b99bd 10 days ago 2.13GB
docker-dev system-df-types 2961ed1b99bd 10 days ago 2.13GB
docker-dev use-oci-platform 2961ed1b99bd 10 days ago 2.13GB
docker-dev update-swagger-fork 3eeedecca85a 2 weeks ago 2.13GB
docker-dev remove-lcow-step5-alternative 51f9720bbc19 2 weeks ago 2.13GB
docker-dev update-s390x-ubuntu-2004 51f9720bbc19 2 weeks ago 2.13GB
docker-dev fix-image-shared-size 09e9aa46694a 2 weeks ago 2.13GB
docker-dev remove-discovery 11823223ae83 3 weeks ago 2.13GB
docker-dev daemon-config 355643e371b0 4 weeks ago 2.12GB
docker-dev jenkins-windows-containerd 68199214b860 4 weeks ago 2.11GB
docker-dev unfork-buildkit 68199214b860 4 weeks ago 2.11GB
docker-dev warn-on-non-matching-platform bc014b94017f 5 weeks ago 2.11GB
docker-dev remove-lcow 3a43c0900282 6 weeks ago 2.11GB
docker-dev remove-lcow-part5 3a43c0900282 6 weeks ago 2.11GB
docker-dev remove-lcow-step3 3a43c0900282 6 weeks ago 2.11GB
docker-dev remove-lcow-step4 3a43c0900282 6 weeks ago 2.11GB
docker-dev seccomp-unconfined-daemon 3a43c0900282 6 weeks ago 2.11GB
docker-dev update-authors 3a43c0900282 6 weeks ago 2.11GB
docker-dev payall4u-fix-creating-sandbox-when-disable-bridge 114c0f2ceb17 6 weeks ago 2.12GB
docker-dev catch-almost-all f437d2bc512b 8 weeks ago 2.12GB
docker-dev bin-criu c72894ae66f3 2 months ago 2.12GB
docker-dev bump-golang-1-14 395932141809 2 months ago 2.14GB
docker-dev upstream-systemd-units d0cb07f9473c 2 months ago 2.12GB
docker-dev bump-criu 6ed9e8fcf59f 2 months ago 2.12GB
This images are a bit of a pain to clean up, and because they are tagged,
`docker image prune` or `docker system prune` doesn't help (unless `--all` is
used).
Looking at the background of this naming, a found that it was originally added
in a95712899e33f267a3061fa94d05189e7c371eaa, after a discussion on PR 3471.
At the time, the image name was used to check if the image needed building, and
otherwise building was skipped in the makefile.
This is no longer the case; the image is built unconditionally, and the build-
cache helps (where possible) speed up rebuilding the image.
In _theory_ having unique names would allow for multiple dev containers (from
different branches) to be started in parallel, but in most situations, the
source-code will be mounted (`BIND_MOUNT=.`), so I'm not sure if that should
be a compelling reason to keep the current naming.
This patch removes the unique tag, and will always tag the image locally as
`docker-dev:latest`.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-07-17 15:48:37 +00:00
DOCKER_IMAGE := docker-dev
2016-07-07 20:01:44 +00:00
DOCKER_PORT_FORWARD := $( if $( DOCKER_PORT) ,-p " $( DOCKER_PORT) " ,)
2022-02-20 18:21:10 +00:00
DELVE_PORT_FORWARD := $( if $( DELVE_PORT) ,-p " $( DELVE_PORT) " ,)
2014-03-29 01:40:16 +00:00
2022-08-27 13:05:22 +00:00
DOCKER_FLAGS := $( DOCKER) run --rm --privileged $( DOCKER_CONTAINER_NAME) $( DOCKER_ENVS) $( DOCKER_MOUNT) $( DOCKER_PORT_FORWARD) $( DELVE_PORT_FORWARD)
2014-11-13 23:04:13 +00:00
2016-12-02 17:37:56 +00:00
SWAGGER_DOCS_PORT ?= 9000
2017-04-17 23:18:46 +00:00
d e f i n e \ n
e n d e f
2015-10-21 03:10:49 +00:00
# if this session isn't interactive, then we don't want to allocate a
# TTY, which would fail, but if it is interactive, we do want to attach
# so that the user can send e.g. ^C through.
INTERACTIVE := $( shell [ -t 0 ] && echo 1 || echo 0)
i f e q ( $( INTERACTIVE ) , 1 )
DOCKER_FLAGS += -t
e n d i f
2014-11-13 23:04:13 +00:00
2022-08-27 13:05:22 +00:00
# on GitHub Runners input device is not a TTY but we allocate a pseudo-one,
# otherwise keep STDIN open even if not attached if not a GitHub Runner.
i f e q ( $( GITHUB_ACTIONS ) , t r u e )
DOCKER_FLAGS += -t
e l s e
DOCKER_FLAGS += -i
e n d i f
2015-10-21 03:10:49 +00:00
DOCKER_RUN_DOCKER := $( DOCKER_FLAGS) " $( DOCKER_IMAGE) "
2015-02-25 00:37:36 +00:00
2019-10-14 21:17:52 +00:00
DOCKER_BUILD_ARGS += --build-arg= GO_VERSION
2023-07-17 15:52:05 +00:00
DOCKER_BUILD_ARGS += --build-arg= APT_MIRROR
2023-04-19 12:48:47 +00:00
DOCKER_BUILD_ARGS += --build-arg= DOCKERCLI_VERSION
DOCKER_BUILD_ARGS += --build-arg= DOCKERCLI_REPOSITORY
DOCKER_BUILD_ARGS += --build-arg= DOCKERCLI_INTEGRATION_VERSION
DOCKER_BUILD_ARGS += --build-arg= DOCKERCLI_INTEGRATION_REPOSITORY
2020-02-10 17:55:16 +00:00
i f d e f D O C K E R _ S Y S T E M D
DOCKER_BUILD_ARGS += --build-arg= SYSTEMD = true
e n d i f
2023-01-03 18:58:05 +00:00
BUILD_OPTS := ${ DOCKER_BUILD_ARGS } ${ DOCKER_BUILD_OPTS }
2019-10-14 21:17:52 +00:00
BUILD_CMD := $( BUILDX) build
2023-01-01 16:47:17 +00:00
BAKE_CMD := $( BUILDX) bake
2019-10-16 17:09:10 +00:00
2013-12-03 22:51:43 +00:00
default : binary
2020-05-01 14:48:07 +00:00
all : build ## validate all checks, build linux binaries, run all tests,\ncross build non-linux binaries, and generate archives
2016-10-12 19:25:49 +00:00
$( DOCKER_RUN_DOCKER) bash -c 'hack/validate/default && hack/make.sh'
2013-12-03 22:51:43 +00:00
2022-11-25 10:46:51 +00:00
binary : bundles ## build statically linked linux binaries
2023-01-01 16:47:17 +00:00
$( BAKE_CMD) binary
2020-05-01 14:48:07 +00:00
2022-11-25 10:46:51 +00:00
dynbinary : bundles ## build dynamically linked linux binaries
2023-01-01 16:47:17 +00:00
$( BAKE_CMD) dynbinary
2020-05-01 14:48:07 +00:00
2023-01-01 16:47:17 +00:00
cross : bundles ## cross build the binaries
$( BAKE_CMD) binary-cross
2019-04-06 00:20:06 +00:00
2015-11-21 16:31:25 +00:00
bundles :
mkdir bundles
2018-09-18 20:28:49 +00:00
.PHONY : clean
clean : clean -cache
2016-12-05 15:10:06 +00:00
2018-09-18 20:28:49 +00:00
.PHONY : clean -cache
2021-12-23 11:06:34 +00:00
clean-cache : ## remove the docker volumes that are used for caching in the dev-container
docker volume rm -f docker-dev-cache docker-mod-cache
2016-12-05 15:10:06 +00:00
2016-08-29 18:06:45 +00:00
help : ## this help
2019-01-10 11:56:26 +00:00
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9_-]+:.*?## / {gsub("\\\\n",sprintf("\n%22c",""), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $( MAKEFILE_LIST)
2016-08-29 18:06:45 +00:00
2016-05-24 01:44:43 +00:00
install : ## install the linux binaries
KEEPBUNDLE = 1 hack/make.sh install-binary
2016-07-07 20:01:44 +00:00
run : build ## run the docker daemon in a container
$( DOCKER_RUN_DOCKER) sh -c "KEEPBUNDLE=1 hack/make.sh install-binary run"
2019-10-14 21:17:52 +00:00
2020-04-02 22:27:31 +00:00
.PHONY : build
2019-10-08 18:17:15 +00:00
i f e q ( $( BIND_DIR ) , . )
2022-12-26 16:55:57 +00:00
build : shell_target := --target =dev -base
2019-10-08 18:17:15 +00:00
e l s e
2022-12-26 16:55:57 +00:00
build : shell_target := --target =dev
2019-10-08 18:17:15 +00:00
e n d i f
2022-11-25 10:46:51 +00:00
build : bundles
2023-01-01 16:47:17 +00:00
$( BUILD_CMD) $( BUILD_OPTS) $( shell_target) --load -t " $( DOCKER_IMAGE) " .
2019-10-14 21:17:52 +00:00
2020-04-02 22:27:31 +00:00
shell : build ## start a shell inside the build env
2015-11-21 16:31:25 +00:00
$( DOCKER_RUN_DOCKER) bash
2017-11-20 10:56:27 +00:00
test : build test -unit ## run the unit, integration and docker-py tests
2023-01-01 16:47:17 +00:00
$( DOCKER_RUN_DOCKER) hack/make.sh dynbinary test-integration test-docker-py
2014-04-29 22:49:03 +00:00
2016-04-06 20:45:21 +00:00
test-docker-py : build ## run the docker-py tests
2015-11-21 16:31:25 +00:00
$( DOCKER_RUN_DOCKER) hack/make.sh dynbinary test-docker-py
2013-11-14 05:34:25 +00:00
2017-06-17 00:18:44 +00:00
test-integration-cli : test -integration ## (DEPRECATED) use test-integration
2017-05-23 20:32:34 +00:00
2019-07-29 22:00:55 +00:00
i f n e q ( $( and $ ( TEST_SKIP_INTEGRATION ) ,$ ( TEST_SKIP_INTEGRATION_CLI ) ) , )
test-integration :
@echo Both integrations suites skipped per environment variables
e l s e
2017-05-23 20:32:34 +00:00
test-integration : build ## run the integration tests
$( DOCKER_RUN_DOCKER) hack/make.sh dynbinary test-integration
2019-07-29 22:00:55 +00:00
e n d i f
2014-02-25 16:17:48 +00:00
2019-01-07 17:05:54 +00:00
test-integration-flaky : build ## run the stress test for all new integration tests
$( DOCKER_RUN_DOCKER) hack/make.sh dynbinary test-integration-flaky
2016-04-06 20:45:21 +00:00
test-unit : build ## run the unit tests
2017-08-16 14:02:04 +00:00
$( DOCKER_RUN_DOCKER) hack/test/unit
2014-12-19 07:20:59 +00:00
2016-08-17 08:25:14 +00:00
validate : build ## validate DCO, Seccomp profile generation, gofmt,\n./pkg/ isolation, golint, tests, tomls, go vet and vendor
2016-10-12 19:25:49 +00:00
$( DOCKER_RUN_DOCKER) hack/validate/all
2016-04-06 20:45:21 +00:00
2022-12-26 09:36:35 +00:00
validate-generate-files :
$( BUILD_CMD) --target "validate" \
--output "type=cacheonly" \
--file "./hack/dockerfiles/generate-files.Dockerfile" .
2022-09-08 19:27:41 +00:00
validate-% : build ## validate specific check
$( DOCKER_RUN_DOCKER) hack/validate/$*
2023-01-01 16:47:17 +00:00
win : bundles ## cross build the binary for windows
$( BAKE_CMD) --set *.platform= windows/amd64 binary
2016-10-03 18:14:53 +00:00
.PHONY : swagger -gen
swagger-gen :
2016-11-02 14:48:34 +00:00
docker run --rm -v $( PWD) :/go/src/github.com/docker/docker \
-w /go/src/github.com/docker/docker \
2016-10-04 15:28:23 +00:00
--entrypoint hack/generate-swagger-api.sh \
2016-11-02 14:48:34 +00:00
-e GOPATH = /go \
2016-12-02 00:36:10 +00:00
quay.io/goswagger/swagger:0.7.4
2016-12-02 17:37:56 +00:00
.PHONY : swagger -docs
swagger-docs : ## preview the API documentation
@echo " API docs preview will be running at http://localhost: $( SWAGGER_DOCS_PORT) "
@docker run --rm -v $( PWD) /api/swagger.yaml:/usr/share/nginx/html/swagger.yaml \
-e 'REDOC_OPTIONS=hide-hostname="true" lazy-rendering' \
-p $( SWAGGER_DOCS_PORT) :80 \
2020-05-02 15:46:40 +00:00
bfirsh/redoc:1.14.0
2022-12-26 09:36:35 +00:00
.PHONY : generate -files
generate-files :
$( eval $@ _TMP_OUT := $( shell mktemp -d -t moby-output.XXXXXXXXXX) )
$( BUILD_CMD) --target "update" \
--output " type=local,dest= $( $@ _TMP_OUT) " \
--file "./hack/dockerfiles/generate-files.Dockerfile" .
cp -R " $( $@ _TMP_OUT) " /. .
rm -rf " $( $@ _TMP_OUT) " /*