2024-03-19 17:22:35 +00:00
|
|
|
# syntax=docker/dockerfile:1.7
|
2013-09-07 02:58:05 +00:00
|
|
|
|
2024-04-03 17:06:56 +00:00
|
|
|
ARG GO_VERSION=1.21.9
|
2023-06-22 14:03:24 +00:00
|
|
|
ARG BASE_DEBIAN_DISTRO="bookworm"
|
2022-11-19 01:36:13 +00:00
|
|
|
ARG GOLANG_IMAGE="golang:${GO_VERSION}-${BASE_DEBIAN_DISTRO}"
|
2024-03-15 18:59:48 +00:00
|
|
|
ARG XX_VERSION=1.4.0
|
2022-11-19 01:36:13 +00:00
|
|
|
|
|
|
|
ARG VPNKIT_VERSION=0.5.0
|
2023-04-19 12:48:47 +00:00
|
|
|
|
|
|
|
ARG DOCKERCLI_REPOSITORY="https://github.com/docker/cli.git"
|
2024-03-21 10:39:15 +00:00
|
|
|
ARG DOCKERCLI_VERSION=v26.0.0
|
2023-04-19 12:48:47 +00:00
|
|
|
# cli version used for integration-cli tests
|
|
|
|
ARG DOCKERCLI_INTEGRATION_REPOSITORY="https://github.com/docker/cli.git"
|
|
|
|
ARG DOCKERCLI_INTEGRATION_VERSION=v17.06.2-ce
|
2024-03-14 11:38:06 +00:00
|
|
|
ARG BUILDX_VERSION=0.13.1
|
2024-03-16 13:21:48 +00:00
|
|
|
ARG COMPOSE_VERSION=v2.25.0
|
2022-11-19 01:36:13 +00:00
|
|
|
|
2020-02-10 17:55:16 +00:00
|
|
|
ARG SYSTEMD="false"
|
2022-12-04 01:32:45 +00:00
|
|
|
ARG DOCKER_STATIC=1
|
2020-09-18 22:40:45 +00:00
|
|
|
|
2023-08-24 12:48:19 +00:00
|
|
|
# REGISTRY_VERSION specifies the version of the registry to download from
|
|
|
|
# https://hub.docker.com/r/distribution/distribution. This version of
|
|
|
|
# the registry is used to test schema 2 manifests. Generally, the version
|
|
|
|
# specified here should match a current release.
|
2023-10-02 18:26:56 +00:00
|
|
|
ARG REGISTRY_VERSION=2.8.3
|
2023-08-24 12:48:19 +00:00
|
|
|
|
2024-03-19 17:22:35 +00:00
|
|
|
# delve is currently only supported on linux/amd64 and linux/arm64;
|
|
|
|
# https://github.com/go-delve/delve/blob/v1.8.1/pkg/proc/native/support_sentinel.go#L1-L6
|
|
|
|
ARG DELVE_SUPPORTED=${TARGETPLATFORM#linux/amd64} DELVE_SUPPORTED=${DELVE_SUPPORTED#linux/arm64}
|
|
|
|
ARG DELVE_SUPPORTED=${DELVE_SUPPORTED:+"unsupported"}
|
|
|
|
ARG DELVE_SUPPORTED=${DELVE_SUPPORTED:-"supported"}
|
|
|
|
|
2022-11-19 01:36:13 +00:00
|
|
|
# cross compilation helper
|
|
|
|
FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
|
2019-04-06 00:20:06 +00:00
|
|
|
|
2022-11-19 01:36:28 +00:00
|
|
|
# dummy stage to make sure the image is built for deps that don't support some
|
|
|
|
# architectures
|
|
|
|
FROM --platform=$BUILDPLATFORM busybox AS build-dummy
|
|
|
|
RUN mkdir -p /build
|
|
|
|
FROM scratch AS binary-dummy
|
|
|
|
COPY --from=build-dummy /build /build
|
|
|
|
|
2022-11-19 01:36:13 +00:00
|
|
|
# base
|
|
|
|
FROM --platform=$BUILDPLATFORM ${GOLANG_IMAGE} AS base
|
|
|
|
COPY --from=xx / /
|
2019-05-22 23:49:55 +00:00
|
|
|
RUN echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
|
2022-11-19 01:36:13 +00:00
|
|
|
RUN apt-get update && apt-get install --no-install-recommends -y file
|
2019-09-11 07:36:53 +00:00
|
|
|
ENV GO111MODULE=off
|
2023-09-22 14:58:14 +00:00
|
|
|
ENV GOTOOLCHAIN=local
|
2016-11-20 22:14:51 +00:00
|
|
|
|
2017-09-29 21:09:14 +00:00
|
|
|
FROM base AS criu
|
2021-09-27 11:34:41 +00:00
|
|
|
ADD --chmod=0644 https://download.opensuse.org/repositories/devel:/tools:/criu/Debian_11/Release.key /etc/apt/trusted.gpg.d/criu.gpg.asc
|
2019-05-22 23:49:55 +00:00
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-criu-aptlib,target=/var/lib/apt \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,sharing=locked,id=moby-criu-aptcache,target=/var/cache/apt \
|
2023-12-05 13:08:04 +00:00
|
|
|
echo 'deb https://download.opensuse.org/repositories/devel:/tools:/criu/Debian_12/ /' > /etc/apt/sources.list.d/criu.list \
|
2020-12-02 01:02:42 +00:00
|
|
|
&& apt-get update \
|
|
|
|
&& apt-get install -y --no-install-recommends criu \
|
2023-12-05 13:08:04 +00:00
|
|
|
&& install -D /usr/sbin/criu /build/criu \
|
|
|
|
&& /build/criu --version
|
2017-09-29 21:09:14 +00:00
|
|
|
|
2022-11-19 14:46:35 +00:00
|
|
|
# registry
|
|
|
|
FROM base AS registry-src
|
|
|
|
WORKDIR /usr/src/registry
|
|
|
|
RUN git init . && git remote add origin "https://github.com/distribution/distribution.git"
|
|
|
|
|
2018-02-27 08:20:55 +00:00
|
|
|
FROM base AS registry
|
2020-01-10 13:07:01 +00:00
|
|
|
WORKDIR /go/src/github.com/docker/distribution
|
2023-08-24 12:48:19 +00:00
|
|
|
|
2022-03-01 06:26:35 +00:00
|
|
|
# REGISTRY_VERSION_SCHEMA1 specifies the version of the registry to build and
|
2021-08-23 11:57:40 +00:00
|
|
|
# install from the https://github.com/docker/distribution repository. This is
|
|
|
|
# an older (pre v2.3.0) version of the registry that only supports schema1
|
|
|
|
# manifests. This version of the registry is not working on arm64, so installation
|
|
|
|
# is skipped on that architecture.
|
2021-09-24 14:47:18 +00:00
|
|
|
ARG REGISTRY_VERSION_SCHEMA1=v2.1.0
|
2022-11-19 14:46:35 +00:00
|
|
|
ARG TARGETPLATFORM
|
|
|
|
RUN --mount=from=registry-src,src=/usr/src/registry,rw \
|
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=registry-build-$TARGETPLATFORM \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,target=/go/pkg/mod \
|
2022-11-19 14:46:35 +00:00
|
|
|
--mount=type=tmpfs,target=/go/src <<EOT
|
|
|
|
set -ex
|
|
|
|
export GOPATH="/go/src/github.com/docker/distribution/Godeps/_workspace:$GOPATH"
|
2023-08-24 12:48:19 +00:00
|
|
|
# Make the /build directory no matter what so that it doesn't fail on arm64 or
|
|
|
|
# any other platform where we don't build this registry
|
|
|
|
mkdir /build
|
2022-11-19 14:46:35 +00:00
|
|
|
case $TARGETPLATFORM in
|
|
|
|
linux/amd64|linux/arm/v7|linux/ppc64le|linux/s390x)
|
|
|
|
git fetch -q --depth 1 origin "${REGISTRY_VERSION_SCHEMA1}" +refs/tags/*:refs/tags/*
|
|
|
|
git checkout -q FETCH_HEAD
|
|
|
|
CGO_ENABLED=0 xx-go build -o /build/registry-v2-schema1 -v ./cmd/registry
|
|
|
|
xx-verify /build/registry-v2-schema1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
EOT
|
2015-01-21 03:40:19 +00:00
|
|
|
|
2023-08-24 12:48:19 +00:00
|
|
|
FROM distribution/distribution:$REGISTRY_VERSION AS registry-v2
|
|
|
|
RUN mkdir /build && mv /bin/registry /build/registry-v2
|
|
|
|
|
2022-11-26 15:37:23 +00:00
|
|
|
# go-swagger
|
|
|
|
FROM base AS swagger-src
|
|
|
|
WORKDIR /usr/src/swagger
|
|
|
|
# Currently uses a fork from https://github.com/kolyshkin/go-swagger/tree/golang-1.13-fix
|
|
|
|
# TODO: move to under moby/ or fix upstream go-swagger to work for us.
|
|
|
|
RUN git init . && git remote add origin "https://github.com/kolyshkin/go-swagger.git"
|
2021-08-23 11:57:40 +00:00
|
|
|
# GO_SWAGGER_COMMIT specifies the version of the go-swagger binary to build and
|
|
|
|
# install. Go-swagger is used in CI for validating swagger.yaml in hack/validate/swagger-gen
|
2022-11-26 15:37:23 +00:00
|
|
|
ARG GO_SWAGGER_COMMIT=c56166c036004ba7a3a321e5951ba472b9ae298c
|
|
|
|
RUN git fetch -q --depth 1 origin "${GO_SWAGGER_COMMIT}" && git checkout -q FETCH_HEAD
|
|
|
|
|
|
|
|
FROM base AS swagger
|
|
|
|
WORKDIR /go/src/github.com/go-swagger/go-swagger
|
|
|
|
ARG TARGETPLATFORM
|
|
|
|
RUN --mount=from=swagger-src,src=/usr/src/swagger,rw \
|
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=swagger-build-$TARGETPLATFORM \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,target=/go/pkg/mod \
|
2022-11-26 15:37:23 +00:00
|
|
|
--mount=type=tmpfs,target=/go/src/ <<EOT
|
|
|
|
set -e
|
|
|
|
xx-go build -o /build/swagger ./cmd/swagger
|
|
|
|
xx-verify /build/swagger
|
|
|
|
EOT
|
2016-11-03 17:15:27 +00:00
|
|
|
|
2022-09-08 14:13:41 +00:00
|
|
|
# frozen-images
|
|
|
|
# See also frozenImages in "testutil/environment/protect.go" (which needs to
|
|
|
|
# be updated when adding images to this list)
|
2020-09-18 22:40:45 +00:00
|
|
|
FROM debian:${BASE_DEBIAN_DISTRO} AS frozen-images
|
2019-05-22 23:49:55 +00:00
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-frozen-images-aptlib,target=/var/lib/apt \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,sharing=locked,id=moby-frozen-images-aptcache,target=/var/cache/apt \
|
|
|
|
apt-get update && apt-get install -y --no-install-recommends \
|
|
|
|
ca-certificates \
|
2020-09-18 22:40:45 +00:00
|
|
|
curl \
|
2019-10-05 20:41:27 +00:00
|
|
|
jq
|
2015-03-07 01:12:41 +00:00
|
|
|
# Get useful and necessary Hub images so we can "docker load" locally instead of pulling
|
2017-09-29 21:09:14 +00:00
|
|
|
COPY contrib/download-frozen-image-v2.sh /
|
2020-09-29 22:39:49 +00:00
|
|
|
ARG TARGETARCH
|
2022-09-08 14:13:41 +00:00
|
|
|
ARG TARGETVARIANT
|
2018-04-13 18:45:57 +00:00
|
|
|
RUN /download-frozen-image-v2.sh /build \
|
2020-06-30 03:06:03 +00:00
|
|
|
busybox:latest@sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209 \
|
|
|
|
busybox:glibc@sha256:1f81263701cddf6402afe9f33fca0266d9fff379e59b1748f33d3072da71ee85 \
|
2023-06-22 14:04:26 +00:00
|
|
|
debian:bookworm-slim@sha256:2bc5c236e9b262645a323e9088dfa3bb1ecb16cc75811daf40a23a824d665be9 \
|
2020-10-15 23:01:17 +00:00
|
|
|
hello-world:latest@sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9 \
|
|
|
|
arm32v7/hello-world:latest@sha256:50b8560ad574c779908da71f7ce370c0a2471c098d44d1c8f6b513c5a55eeeb1
|
2015-02-28 05:53:36 +00:00
|
|
|
|
2022-11-26 15:41:16 +00:00
|
|
|
# delve
|
|
|
|
FROM base AS delve-src
|
|
|
|
WORKDIR /usr/src/delve
|
|
|
|
RUN git init . && git remote add origin "https://github.com/go-delve/delve.git"
|
2022-02-20 18:21:10 +00:00
|
|
|
# DELVE_VERSION specifies the version of the Delve debugger binary
|
|
|
|
# from the https://github.com/go-delve/delve repository.
|
|
|
|
# It can be used to run Docker with a possibility of
|
|
|
|
# attaching debugger to it.
|
2023-10-09 11:13:43 +00:00
|
|
|
ARG DELVE_VERSION=v1.21.1
|
2022-11-26 15:41:16 +00:00
|
|
|
RUN git fetch -q --depth 1 origin "${DELVE_VERSION}" +refs/tags/*:refs/tags/* && git checkout -q FETCH_HEAD
|
|
|
|
|
2024-03-19 17:22:35 +00:00
|
|
|
FROM base AS delve-supported
|
2022-11-26 15:41:16 +00:00
|
|
|
WORKDIR /usr/src/delve
|
|
|
|
ARG TARGETPLATFORM
|
|
|
|
RUN --mount=from=delve-src,src=/usr/src/delve,rw \
|
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=delve-build-$TARGETPLATFORM \
|
|
|
|
--mount=type=cache,target=/go/pkg/mod <<EOT
|
|
|
|
set -e
|
|
|
|
GO111MODULE=on xx-go build -o /build/dlv ./cmd/dlv
|
|
|
|
xx-verify /build/dlv
|
|
|
|
EOT
|
|
|
|
|
2024-03-19 17:22:35 +00:00
|
|
|
FROM binary-dummy AS delve-unsupported
|
|
|
|
FROM delve-${DELVE_SUPPORTED} AS delve
|
2022-02-20 18:21:10 +00:00
|
|
|
|
validate/toml: switch to github.com/pelletier/go-toml
The github.com/BurntSushi/toml project is no longer maintained,
and containerd is switching to this project instead, so start
moving our code as well.
This patch only changes the binary used during validation (tbh,
we could probably remove this validation step, but leaving that
for now).
I manually verified that the hack/verify/toml still works by adding a commit
that makes the MAINTAINERS file invalid;
diff --git a/MAINTAINERS b/MAINTAINERS
index b739e7e20c..81ababd8de 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -23,7 +23,7 @@
# a subsystem, they are responsible for doing so and holding the
# subsystem maintainers accountable. If ownership is unclear, they are the de facto owners.
- people = [
+ people =
"akihirosuda",
"anusha",
"coolljt0725",
Running `hack/verify/toml` was able to detect the broken format;
hack/validate/toml
(27, 4): keys cannot contain , characterThese files are not valid TOML:
- MAINTAINERS
Please reformat the above files as valid TOML
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-04-02 14:02:34 +00:00
|
|
|
FROM base AS tomll
|
2021-08-23 11:57:40 +00:00
|
|
|
# GOTOML_VERSION specifies the version of the tomll binary to build and install
|
|
|
|
# from the https://github.com/pelletier/go-toml repository. This binary is used
|
|
|
|
# in CI in the hack/validate/toml script.
|
|
|
|
#
|
|
|
|
# When updating this version, consider updating the github.com/pelletier/go-toml
|
2021-12-15 19:35:04 +00:00
|
|
|
# dependency in vendor.mod accordingly.
|
2021-08-23 11:57:40 +00:00
|
|
|
ARG GOTOML_VERSION=v1.8.1
|
2019-05-22 23:49:55 +00:00
|
|
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,target=/go/pkg/mod \
|
2021-08-23 11:57:40 +00:00
|
|
|
GOBIN=/build/ GO111MODULE=on go install "github.com/pelletier/go-toml/cmd/tomll@${GOTOML_VERSION}" \
|
|
|
|
&& /build/tomll --help
|
2017-09-29 21:09:14 +00:00
|
|
|
|
2022-04-14 17:52:23 +00:00
|
|
|
FROM base AS gowinres
|
|
|
|
# GOWINRES_VERSION defines go-winres tool version
|
2023-10-23 10:12:43 +00:00
|
|
|
ARG GOWINRES_VERSION=v0.3.1
|
2022-04-14 17:52:23 +00:00
|
|
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
|
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
|
|
GOBIN=/build/ GO111MODULE=on go install "github.com/tc-hib/go-winres@${GOWINRES_VERSION}" \
|
|
|
|
&& /build/go-winres --help
|
|
|
|
|
2022-11-26 02:22:30 +00:00
|
|
|
# containerd
|
|
|
|
FROM base AS containerd-src
|
|
|
|
WORKDIR /usr/src/containerd
|
|
|
|
RUN git init . && git remote add origin "https://github.com/containerd/containerd.git"
|
|
|
|
# CONTAINERD_VERSION is used to build containerd binaries, and used for the
|
|
|
|
# integration tests. The distributed docker .deb and .rpm packages depend on a
|
|
|
|
# separate (containerd.io) package, which may be a different version as is
|
|
|
|
# specified here. The containerd golang package is also pinned in vendor.mod.
|
|
|
|
# When updating the binary version you may also need to update the vendor
|
|
|
|
# version to pick up bug fixes or new APIs, however, usually the Go packages
|
|
|
|
# are built from a commit from the master branch.
|
2024-04-08 11:00:44 +00:00
|
|
|
ARG CONTAINERD_VERSION=v1.7.15
|
2022-11-26 02:22:30 +00:00
|
|
|
RUN git fetch -q --depth 1 origin "${CONTAINERD_VERSION}" +refs/tags/*:refs/tags/* && git checkout -q FETCH_HEAD
|
|
|
|
|
|
|
|
FROM base AS containerd-build
|
|
|
|
WORKDIR /go/src/github.com/containerd/containerd
|
|
|
|
ARG TARGETPLATFORM
|
2019-05-22 23:49:55 +00:00
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-containerd-aptlib,target=/var/lib/apt \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,sharing=locked,id=moby-containerd-aptcache,target=/var/cache/apt \
|
2022-11-26 02:22:30 +00:00
|
|
|
apt-get update && xx-apt-get install -y --no-install-recommends \
|
2023-06-22 14:03:24 +00:00
|
|
|
gcc \
|
|
|
|
libbtrfs-dev \
|
|
|
|
libsecret-1-dev \
|
|
|
|
pkg-config
|
2022-11-26 02:22:30 +00:00
|
|
|
ARG DOCKER_STATIC
|
|
|
|
RUN --mount=from=containerd-src,src=/usr/src/containerd,rw \
|
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=containerd-build-$TARGETPLATFORM <<EOT
|
|
|
|
set -e
|
|
|
|
export CC=$(xx-info)-gcc
|
|
|
|
export CGO_ENABLED=$([ "$DOCKER_STATIC" = "1" ] && echo "0" || echo "1")
|
|
|
|
xx-go --wrap
|
|
|
|
make $([ "$DOCKER_STATIC" = "1" ] && echo "STATIC=1") binaries
|
|
|
|
xx-verify $([ "$DOCKER_STATIC" = "1" ] && echo "--static") bin/containerd
|
|
|
|
xx-verify $([ "$DOCKER_STATIC" = "1" ] && echo "--static") bin/containerd-shim-runc-v2
|
|
|
|
xx-verify $([ "$DOCKER_STATIC" = "1" ] && echo "--static") bin/ctr
|
|
|
|
mkdir /build
|
|
|
|
mv bin/containerd bin/containerd-shim-runc-v2 bin/ctr /build
|
|
|
|
EOT
|
|
|
|
|
|
|
|
FROM containerd-build AS containerd-linux
|
|
|
|
FROM binary-dummy AS containerd-windows
|
|
|
|
FROM containerd-${TARGETOS} AS containerd
|
2017-09-29 21:09:14 +00:00
|
|
|
|
2019-08-05 10:32:43 +00:00
|
|
|
FROM base AS golangci_lint
|
2024-01-03 12:41:37 +00:00
|
|
|
ARG GOLANGCI_LINT_VERSION=v1.55.2
|
2019-05-22 23:49:55 +00:00
|
|
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,target=/go/pkg/mod \
|
2021-08-23 11:57:40 +00:00
|
|
|
GOBIN=/build/ GO111MODULE=on go install "github.com/golangci/golangci-lint/cmd/golangci-lint@${GOLANGCI_LINT_VERSION}" \
|
|
|
|
&& /build/golangci-lint --version
|
2017-09-29 21:09:14 +00:00
|
|
|
|
2019-07-31 00:07:30 +00:00
|
|
|
FROM base AS gotestsum
|
2022-11-17 16:05:20 +00:00
|
|
|
ARG GOTESTSUM_VERSION=v1.8.2
|
2019-05-22 23:49:55 +00:00
|
|
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,target=/go/pkg/mod \
|
2021-08-23 11:57:40 +00:00
|
|
|
GOBIN=/build/ GO111MODULE=on go install "gotest.tools/gotestsum@${GOTESTSUM_VERSION}" \
|
|
|
|
&& /build/gotestsum --version
|
2019-07-31 00:07:30 +00:00
|
|
|
|
2020-02-29 15:31:43 +00:00
|
|
|
FROM base AS shfmt
|
2024-03-17 12:36:43 +00:00
|
|
|
ARG SHFMT_VERSION=v3.8.0
|
2020-02-29 15:31:43 +00:00
|
|
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
|
|
|
--mount=type=cache,target=/go/pkg/mod \
|
2021-08-23 11:57:40 +00:00
|
|
|
GOBIN=/build/ GO111MODULE=on go install "mvdan.cc/sh/v3/cmd/shfmt@${SHFMT_VERSION}" \
|
|
|
|
&& /build/shfmt --version
|
2020-02-29 15:31:43 +00:00
|
|
|
|
2024-03-01 13:51:18 +00:00
|
|
|
FROM base AS gopls
|
|
|
|
RUN --mount=type=cache,target=/root/.cache/go-build \
|
|
|
|
--mount=type=cache,target=/go/pkg/mod \
|
|
|
|
GOBIN=/build/ GO111MODULE=on go install "golang.org/x/tools/gopls@latest" \
|
|
|
|
&& /build/gopls version
|
|
|
|
|
2022-11-19 13:47:26 +00:00
|
|
|
FROM base AS dockercli
|
|
|
|
WORKDIR /go/src/github.com/docker/cli
|
2023-04-19 12:48:47 +00:00
|
|
|
ARG DOCKERCLI_REPOSITORY
|
2022-11-19 13:47:26 +00:00
|
|
|
ARG DOCKERCLI_VERSION
|
|
|
|
ARG TARGETPLATFORM
|
2023-07-17 15:50:27 +00:00
|
|
|
RUN --mount=source=hack/dockerfile/cli.sh,target=/download-or-build-cli.sh \
|
|
|
|
--mount=type=cache,id=dockercli-git-$TARGETPLATFORM,sharing=locked,target=./.git \
|
2023-04-19 12:48:47 +00:00
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=dockercli-build-$TARGETPLATFORM \
|
Dockerfile: make cli stages more resilient against unclean termination
The Dockerfile in this repository performs many stages in parallel. If any of
those stages fails to build (which could be due to networking congestion),
other stages are also (forcibly?) terminated, which can cause an unclean
shutdown.
In some case, this can cause `git` to be terminated, leaving a `.lock` file
behind in the cache mount. Retrying the build now will fail, and the only
workaround is to clean the build-cache (which causes many stages to be
built again, potentially triggering the problem again).
> [dockercli-integration 3/3] RUN --mount=type=cache,id=dockercli-integration-git-linux/arm64/v8,target=./.git --mount=type=cache,target=/root/.cache/go-build,id=dockercli-integration-build-linux/arm64/v8 /download-or-build-cli.sh v17.06.2-ce https://github.com/docker/cli.git /build:
#0 1.575 fatal: Unable to create '/go/src/github.com/docker/cli/.git/shallow.lock': File exists.
#0 1.575
#0 1.575 Another git process seems to be running in this repository, e.g.
#0 1.575 an editor opened by 'git commit'. Please make sure all processes
#0 1.575 are terminated then try again. If it still fails, a git process
#0 1.575 may have crashed in this repository earlier:
#0 1.575 remove the file manually to continue.
This patch:
- Updates the Dockerfile to remove `.lock` files (`shallow.lock`, `index.lock`)
that may have been left behind from previous builds. I put this code in the
Dockerfile itself (not the script), as the script may be used in other
situations outside of the Dockerfile (for which we cannot guarantee no other
git session is active).
- Adds a `docker --version` step to the stage; this is mostly to verify the
build was successful (and to be consistent with other stages).
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-06-16 12:10:24 +00:00
|
|
|
rm -f ./.git/*.lock \
|
|
|
|
&& /download-or-build-cli.sh ${DOCKERCLI_VERSION} ${DOCKERCLI_REPOSITORY} /build \
|
|
|
|
&& /build/docker --version
|
2023-04-19 12:48:47 +00:00
|
|
|
|
|
|
|
FROM base AS dockercli-integration
|
|
|
|
WORKDIR /go/src/github.com/docker/cli
|
|
|
|
ARG DOCKERCLI_INTEGRATION_REPOSITORY
|
|
|
|
ARG DOCKERCLI_INTEGRATION_VERSION
|
|
|
|
ARG TARGETPLATFORM
|
2023-07-17 15:50:27 +00:00
|
|
|
RUN --mount=source=hack/dockerfile/cli.sh,target=/download-or-build-cli.sh \
|
|
|
|
--mount=type=cache,id=dockercli-git-$TARGETPLATFORM,sharing=locked,target=./.git \
|
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=dockercli-build-$TARGETPLATFORM \
|
Dockerfile: make cli stages more resilient against unclean termination
The Dockerfile in this repository performs many stages in parallel. If any of
those stages fails to build (which could be due to networking congestion),
other stages are also (forcibly?) terminated, which can cause an unclean
shutdown.
In some case, this can cause `git` to be terminated, leaving a `.lock` file
behind in the cache mount. Retrying the build now will fail, and the only
workaround is to clean the build-cache (which causes many stages to be
built again, potentially triggering the problem again).
> [dockercli-integration 3/3] RUN --mount=type=cache,id=dockercli-integration-git-linux/arm64/v8,target=./.git --mount=type=cache,target=/root/.cache/go-build,id=dockercli-integration-build-linux/arm64/v8 /download-or-build-cli.sh v17.06.2-ce https://github.com/docker/cli.git /build:
#0 1.575 fatal: Unable to create '/go/src/github.com/docker/cli/.git/shallow.lock': File exists.
#0 1.575
#0 1.575 Another git process seems to be running in this repository, e.g.
#0 1.575 an editor opened by 'git commit'. Please make sure all processes
#0 1.575 are terminated then try again. If it still fails, a git process
#0 1.575 may have crashed in this repository earlier:
#0 1.575 remove the file manually to continue.
This patch:
- Updates the Dockerfile to remove `.lock` files (`shallow.lock`, `index.lock`)
that may have been left behind from previous builds. I put this code in the
Dockerfile itself (not the script), as the script may be used in other
situations outside of the Dockerfile (for which we cannot guarantee no other
git session is active).
- Adds a `docker --version` step to the stage; this is mostly to verify the
build was successful (and to be consistent with other stages).
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2023-06-16 12:10:24 +00:00
|
|
|
rm -f ./.git/*.lock \
|
|
|
|
&& /download-or-build-cli.sh ${DOCKERCLI_INTEGRATION_VERSION} ${DOCKERCLI_INTEGRATION_REPOSITORY} /build \
|
|
|
|
&& /build/docker --version
|
2017-09-29 21:09:14 +00:00
|
|
|
|
2022-11-19 01:22:09 +00:00
|
|
|
# runc
|
|
|
|
FROM base AS runc-src
|
|
|
|
WORKDIR /usr/src/runc
|
|
|
|
RUN git init . && git remote add origin "https://github.com/opencontainers/runc.git"
|
|
|
|
# RUNC_VERSION should match the version that is used by the containerd version
|
|
|
|
# that is used. If you need to update runc, open a pull request in the containerd
|
|
|
|
# project first, and update both after that is merged. When updating RUNC_VERSION,
|
|
|
|
# consider updating runc in vendor.mod accordingly.
|
2024-01-31 12:02:58 +00:00
|
|
|
ARG RUNC_VERSION=v1.1.12
|
2022-11-19 01:22:09 +00:00
|
|
|
RUN git fetch -q --depth 1 origin "${RUNC_VERSION}" +refs/tags/*:refs/tags/* && git checkout -q FETCH_HEAD
|
|
|
|
|
|
|
|
FROM base AS runc-build
|
|
|
|
WORKDIR /go/src/github.com/opencontainers/runc
|
|
|
|
ARG TARGETPLATFORM
|
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-runc-aptlib,target=/var/lib/apt \
|
|
|
|
--mount=type=cache,sharing=locked,id=moby-runc-aptcache,target=/var/cache/apt \
|
|
|
|
apt-get update && xx-apt-get install -y --no-install-recommends \
|
2023-06-22 14:03:24 +00:00
|
|
|
dpkg-dev \
|
|
|
|
gcc \
|
|
|
|
libc6-dev \
|
|
|
|
libseccomp-dev \
|
|
|
|
pkg-config
|
2022-11-19 01:22:09 +00:00
|
|
|
ARG DOCKER_STATIC
|
|
|
|
RUN --mount=from=runc-src,src=/usr/src/runc,rw \
|
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=runc-build-$TARGETPLATFORM <<EOT
|
|
|
|
set -e
|
|
|
|
xx-go --wrap
|
|
|
|
CGO_ENABLED=1 make "$([ "$DOCKER_STATIC" = "1" ] && echo "static" || echo "runc")"
|
|
|
|
xx-verify $([ "$DOCKER_STATIC" = "1" ] && echo "--static") runc
|
|
|
|
mkdir /build
|
|
|
|
mv runc /build/
|
|
|
|
EOT
|
|
|
|
|
|
|
|
FROM runc-build AS runc-linux
|
|
|
|
FROM binary-dummy AS runc-windows
|
|
|
|
FROM runc-${TARGETOS} AS runc
|
2017-09-29 21:09:14 +00:00
|
|
|
|
2022-11-19 01:33:28 +00:00
|
|
|
# tini
|
|
|
|
FROM base AS tini-src
|
|
|
|
WORKDIR /usr/src/tini
|
|
|
|
RUN git init . && git remote add origin "https://github.com/krallin/tini.git"
|
|
|
|
# TINI_VERSION specifies the version of tini (docker-init) to build. This
|
|
|
|
# binary is used when starting containers with the `--init` option.
|
|
|
|
ARG TINI_VERSION=v0.19.0
|
|
|
|
RUN git fetch -q --depth 1 origin "${TINI_VERSION}" +refs/tags/*:refs/tags/* && git checkout -q FETCH_HEAD
|
|
|
|
|
|
|
|
FROM base AS tini-build
|
|
|
|
WORKDIR /go/src/github.com/krallin/tini
|
2019-05-22 23:49:55 +00:00
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-tini-aptlib,target=/var/lib/apt \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,sharing=locked,id=moby-tini-aptcache,target=/var/cache/apt \
|
2022-11-19 01:33:28 +00:00
|
|
|
apt-get update && apt-get install -y --no-install-recommends cmake
|
|
|
|
ARG TARGETPLATFORM
|
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-tini-aptlib,target=/var/lib/apt \
|
|
|
|
--mount=type=cache,sharing=locked,id=moby-tini-aptcache,target=/var/cache/apt \
|
|
|
|
xx-apt-get install -y --no-install-recommends \
|
2023-06-22 14:03:24 +00:00
|
|
|
gcc \
|
|
|
|
libc6-dev \
|
|
|
|
pkg-config
|
2022-11-19 01:33:28 +00:00
|
|
|
RUN --mount=from=tini-src,src=/usr/src/tini,rw \
|
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=tini-build-$TARGETPLATFORM <<EOT
|
|
|
|
set -e
|
|
|
|
CC=$(xx-info)-gcc cmake .
|
|
|
|
make tini-static
|
|
|
|
xx-verify --static tini-static
|
|
|
|
mkdir /build
|
|
|
|
mv tini-static /build/docker-init
|
|
|
|
EOT
|
|
|
|
|
|
|
|
FROM tini-build AS tini-linux
|
|
|
|
FROM binary-dummy AS tini-windows
|
|
|
|
FROM tini-${TARGETOS} AS tini
|
2017-09-29 21:09:14 +00:00
|
|
|
|
2022-11-19 02:27:58 +00:00
|
|
|
# rootlesskit
|
|
|
|
FROM base AS rootlesskit-src
|
|
|
|
WORKDIR /usr/src/rootlesskit
|
|
|
|
RUN git init . && git remote add origin "https://github.com/rootless-containers/rootlesskit.git"
|
2024-01-09 08:54:47 +00:00
|
|
|
# When updating, also update vendor.mod and hack/dockerfile/install/rootlesskit.installer accordingly.
|
2024-03-05 22:38:55 +00:00
|
|
|
ARG ROOTLESSKIT_VERSION=v2.0.2
|
2022-11-19 02:27:58 +00:00
|
|
|
RUN git fetch -q --depth 1 origin "${ROOTLESSKIT_VERSION}" +refs/tags/*:refs/tags/* && git checkout -q FETCH_HEAD
|
|
|
|
|
|
|
|
FROM base AS rootlesskit-build
|
|
|
|
WORKDIR /go/src/github.com/rootless-containers/rootlesskit
|
|
|
|
ARG TARGETPLATFORM
|
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-rootlesskit-aptlib,target=/var/lib/apt \
|
|
|
|
--mount=type=cache,sharing=locked,id=moby-rootlesskit-aptcache,target=/var/cache/apt \
|
|
|
|
apt-get update && xx-apt-get install -y --no-install-recommends \
|
2023-06-22 14:03:24 +00:00
|
|
|
gcc \
|
|
|
|
libc6-dev \
|
|
|
|
pkg-config
|
2022-11-19 02:27:58 +00:00
|
|
|
ENV GO111MODULE=on
|
|
|
|
ARG DOCKER_STATIC
|
|
|
|
RUN --mount=from=rootlesskit-src,src=/usr/src/rootlesskit,rw \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,target=/go/pkg/mod \
|
2022-11-19 02:27:58 +00:00
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=rootlesskit-build-$TARGETPLATFORM <<EOT
|
|
|
|
set -e
|
|
|
|
export CGO_ENABLED=$([ "$DOCKER_STATIC" = "1" ] && echo "0" || echo "1")
|
|
|
|
xx-go build -o /build/rootlesskit -ldflags="$([ "$DOCKER_STATIC" != "1" ] && echo "-linkmode=external")" ./cmd/rootlesskit
|
|
|
|
xx-verify $([ "$DOCKER_STATIC" = "1" ] && echo "--static") /build/rootlesskit
|
|
|
|
xx-go build -o /build/rootlesskit-docker-proxy -ldflags="$([ "$DOCKER_STATIC" != "1" ] && echo "-linkmode=external")" ./cmd/rootlesskit-docker-proxy
|
|
|
|
xx-verify $([ "$DOCKER_STATIC" = "1" ] && echo "--static") /build/rootlesskit-docker-proxy
|
|
|
|
EOT
|
2023-07-17 15:50:27 +00:00
|
|
|
COPY --link ./contrib/dockerd-rootless.sh /build/
|
|
|
|
COPY --link ./contrib/dockerd-rootless-setuptool.sh /build/
|
2022-11-19 02:27:58 +00:00
|
|
|
|
|
|
|
FROM rootlesskit-build AS rootlesskit-linux
|
|
|
|
FROM binary-dummy AS rootlesskit-windows
|
|
|
|
FROM rootlesskit-${TARGETOS} AS rootlesskit
|
2017-09-29 21:09:14 +00:00
|
|
|
|
2022-06-10 21:19:40 +00:00
|
|
|
FROM base AS crun
|
2023-12-28 09:50:28 +00:00
|
|
|
ARG CRUN_VERSION=1.12
|
2022-06-10 21:19:40 +00:00
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-crun-aptlib,target=/var/lib/apt \
|
|
|
|
--mount=type=cache,sharing=locked,id=moby-crun-aptcache,target=/var/cache/apt \
|
|
|
|
apt-get update && apt-get install -y --no-install-recommends \
|
|
|
|
autoconf \
|
|
|
|
automake \
|
|
|
|
build-essential \
|
|
|
|
libcap-dev \
|
|
|
|
libprotobuf-c-dev \
|
|
|
|
libseccomp-dev \
|
|
|
|
libsystemd-dev \
|
|
|
|
libtool \
|
|
|
|
libudev-dev \
|
|
|
|
libyajl-dev \
|
|
|
|
python3 \
|
|
|
|
;
|
|
|
|
RUN --mount=type=tmpfs,target=/tmp/crun-build \
|
|
|
|
git clone https://github.com/containers/crun.git /tmp/crun-build && \
|
|
|
|
cd /tmp/crun-build && \
|
|
|
|
git checkout -q "${CRUN_VERSION}" && \
|
|
|
|
./autogen.sh && \
|
|
|
|
./configure --bindir=/build && \
|
|
|
|
make -j install
|
|
|
|
|
2022-11-17 23:23:20 +00:00
|
|
|
# vpnkit
|
|
|
|
# use dummy scratch stage to avoid build to fail for unsupported platforms
|
|
|
|
FROM scratch AS vpnkit-windows
|
|
|
|
FROM scratch AS vpnkit-linux-386
|
|
|
|
FROM scratch AS vpnkit-linux-arm
|
|
|
|
FROM scratch AS vpnkit-linux-ppc64le
|
|
|
|
FROM scratch AS vpnkit-linux-riscv64
|
|
|
|
FROM scratch AS vpnkit-linux-s390x
|
|
|
|
FROM djs55/vpnkit:${VPNKIT_VERSION} AS vpnkit-linux-amd64
|
|
|
|
FROM djs55/vpnkit:${VPNKIT_VERSION} AS vpnkit-linux-arm64
|
|
|
|
FROM vpnkit-linux-${TARGETARCH} AS vpnkit-linux
|
|
|
|
FROM vpnkit-${TARGETOS} AS vpnkit
|
2019-10-05 20:46:49 +00:00
|
|
|
|
2022-11-26 15:33:32 +00:00
|
|
|
# containerutility
|
|
|
|
FROM base AS containerutil-src
|
|
|
|
WORKDIR /usr/src/containerutil
|
|
|
|
RUN git init . && git remote add origin "https://github.com/docker-archive/windows-container-utility.git"
|
|
|
|
ARG CONTAINERUTILITY_VERSION=aa1ba87e99b68e0113bd27ec26c60b88f9d4ccd9
|
|
|
|
RUN git fetch -q --depth 1 origin "${CONTAINERUTILITY_VERSION}" +refs/tags/*:refs/tags/* && git checkout -q FETCH_HEAD
|
|
|
|
|
|
|
|
FROM base AS containerutil-build
|
|
|
|
WORKDIR /usr/src/containerutil
|
|
|
|
ARG TARGETPLATFORM
|
2023-06-22 14:03:24 +00:00
|
|
|
RUN xx-apt-get install -y --no-install-recommends \
|
|
|
|
gcc \
|
|
|
|
g++ \
|
|
|
|
libc6-dev \
|
|
|
|
pkg-config
|
2022-11-26 15:33:32 +00:00
|
|
|
RUN --mount=from=containerutil-src,src=/usr/src/containerutil,rw \
|
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=containerutil-build-$TARGETPLATFORM <<EOT
|
|
|
|
set -e
|
|
|
|
CC="$(xx-info)-gcc" CXX="$(xx-info)-g++" make
|
|
|
|
xx-verify --static containerutility.exe
|
|
|
|
mkdir /build
|
|
|
|
mv containerutility.exe /build/
|
|
|
|
EOT
|
|
|
|
|
|
|
|
FROM binary-dummy AS containerutil-linux
|
|
|
|
FROM containerutil-build AS containerutil-windows-amd64
|
|
|
|
FROM containerutil-windows-${TARGETARCH} AS containerutil-windows
|
|
|
|
FROM containerutil-${TARGETOS} AS containerutil
|
2023-02-01 13:17:36 +00:00
|
|
|
FROM docker/buildx-bin:${BUILDX_VERSION} as buildx
|
2023-07-11 20:40:08 +00:00
|
|
|
FROM docker/compose-bin:${COMPOSE_VERSION} as compose
|
2022-11-26 15:33:32 +00:00
|
|
|
|
2023-01-01 16:47:17 +00:00
|
|
|
FROM base AS dev-systemd-false
|
2023-05-31 09:52:18 +00:00
|
|
|
COPY --link --from=frozen-images /build/ /docker-frozen-images
|
|
|
|
COPY --link --from=swagger /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=delve /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=tomll /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=gowinres /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=tini /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=registry /build/ /usr/local/bin/
|
2023-08-24 12:48:19 +00:00
|
|
|
COPY --link --from=registry-v2 /build/ /usr/local/bin/
|
2023-05-23 10:56:02 +00:00
|
|
|
|
|
|
|
# Skip the CRIU stage for now, as the opensuse package repository is sometimes
|
|
|
|
# unstable, and we're currently not using it in CI.
|
|
|
|
#
|
|
|
|
# FIXME(thaJeztah): re-enable this stage when https://github.com/moby/moby/issues/38963 is resolved (see https://github.com/moby/moby/pull/38984)
|
2023-05-31 09:52:18 +00:00
|
|
|
# COPY --link --from=criu /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=gotestsum /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=golangci_lint /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=shfmt /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=runc /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=containerd /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=rootlesskit /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=vpnkit / /usr/local/bin/
|
|
|
|
COPY --link --from=containerutil /build/ /usr/local/bin/
|
|
|
|
COPY --link --from=crun /build/ /usr/local/bin/
|
|
|
|
COPY --link hack/dockerfile/etc/docker/ /etc/docker/
|
2023-02-01 13:17:36 +00:00
|
|
|
COPY --link --from=buildx /buildx /usr/local/libexec/docker/cli-plugins/docker-buildx
|
2023-07-11 20:40:08 +00:00
|
|
|
COPY --link --from=compose /docker-compose /usr/libexec/docker/cli-plugins/docker-compose
|
2023-02-01 13:17:36 +00:00
|
|
|
|
2023-01-01 16:47:17 +00:00
|
|
|
ENV PATH=/usr/local/cli:$PATH
|
2023-04-19 12:48:47 +00:00
|
|
|
ENV TEST_CLIENT_BINARY=/usr/local/cli-integration/docker
|
2023-02-01 12:54:14 +00:00
|
|
|
ENV CONTAINERD_ADDRESS=/run/docker/containerd/containerd.sock
|
|
|
|
ENV CONTAINERD_NAMESPACE=moby
|
2023-01-01 16:47:17 +00:00
|
|
|
WORKDIR /go/src/github.com/docker/docker
|
|
|
|
VOLUME /var/lib/docker
|
|
|
|
VOLUME /home/unprivilegeduser/.local/share/docker
|
|
|
|
# Wrap all commands in the "docker-in-docker" script to allow nested containers
|
|
|
|
ENTRYPOINT ["hack/dind"]
|
|
|
|
|
|
|
|
FROM dev-systemd-false AS dev-systemd-true
|
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-dev-aptlib,target=/var/lib/apt \
|
|
|
|
--mount=type=cache,sharing=locked,id=moby-dev-aptcache,target=/var/cache/apt \
|
|
|
|
apt-get update && apt-get install -y --no-install-recommends \
|
|
|
|
dbus \
|
|
|
|
dbus-user-session \
|
|
|
|
systemd \
|
|
|
|
systemd-sysv
|
|
|
|
ENTRYPOINT ["hack/dind-systemd"]
|
|
|
|
|
2022-12-26 16:55:57 +00:00
|
|
|
FROM dev-systemd-${SYSTEMD} AS dev-base
|
2017-09-29 21:09:14 +00:00
|
|
|
RUN groupadd -r docker
|
2020-02-18 09:43:56 +00:00
|
|
|
RUN useradd --create-home --gid docker unprivilegeduser \
|
|
|
|
&& mkdir -p /home/unprivilegeduser/.local/share/docker \
|
|
|
|
&& chown -R unprivilegeduser /home/unprivilegeduser
|
2018-06-29 10:39:36 +00:00
|
|
|
# Let us use a .bashrc file
|
|
|
|
RUN ln -sfv /go/src/github.com/docker/docker/.bashrc ~/.bashrc
|
2017-06-24 21:51:06 +00:00
|
|
|
# Activate bash completion and include Docker's completion if mounted with DOCKER_BASH_COMPLETION_PATH
|
|
|
|
RUN echo "source /usr/share/bash-completion/bash_completion" >> /etc/bash.bashrc
|
2017-06-23 16:05:38 +00:00
|
|
|
RUN ln -s /usr/local/completion/bash/docker /etc/bash_completion.d/docker
|
2017-09-29 21:09:14 +00:00
|
|
|
RUN ldconfig
|
2023-02-06 14:22:09 +00:00
|
|
|
# Set dev environment as safe git directory to prevent "dubious ownership" errors
|
|
|
|
# when bind-mounting the source into the dev-container. See https://github.com/moby/moby/pull/44930
|
|
|
|
RUN git config --global --add safe.directory $GOPATH/src/github.com/docker/docker
|
2017-09-29 21:09:14 +00:00
|
|
|
# This should only install packages that are specifically needed for the dev environment and nothing else
|
|
|
|
# Do you really need to add another package here? Can it be done in a different build stage?
|
2019-05-22 23:49:55 +00:00
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-dev-aptlib,target=/var/lib/apt \
|
2019-10-05 20:41:27 +00:00
|
|
|
--mount=type=cache,sharing=locked,id=moby-dev-aptcache,target=/var/cache/apt \
|
|
|
|
apt-get update && apt-get install -y --no-install-recommends \
|
|
|
|
apparmor \
|
|
|
|
bash-completion \
|
2019-10-05 20:56:32 +00:00
|
|
|
bzip2 \
|
2021-08-19 19:16:01 +00:00
|
|
|
inetutils-ping \
|
|
|
|
iproute2 \
|
2019-10-05 20:41:27 +00:00
|
|
|
iptables \
|
|
|
|
jq \
|
|
|
|
libcap2-bin \
|
2019-10-05 20:56:32 +00:00
|
|
|
libnet1 \
|
|
|
|
libnl-3-200 \
|
|
|
|
libprotobuf-c1 \
|
2022-06-10 21:19:40 +00:00
|
|
|
libyajl2 \
|
2019-10-05 20:41:27 +00:00
|
|
|
net-tools \
|
2020-07-15 11:45:41 +00:00
|
|
|
patch \
|
2019-10-05 20:41:27 +00:00
|
|
|
pigz \
|
2020-02-18 09:43:56 +00:00
|
|
|
sudo \
|
2022-02-02 21:39:35 +00:00
|
|
|
systemd-journal-remote \
|
2019-10-05 20:41:27 +00:00
|
|
|
thin-provisioning-tools \
|
2020-02-18 09:43:56 +00:00
|
|
|
uidmap \
|
2019-10-05 20:41:27 +00:00
|
|
|
vim \
|
|
|
|
vim-common \
|
|
|
|
xfsprogs \
|
|
|
|
xz-utils \
|
2020-12-08 09:56:32 +00:00
|
|
|
zip \
|
|
|
|
zstd
|
2020-02-25 23:31:07 +00:00
|
|
|
# Switch to use iptables instead of nftables (to match the CI hosts)
|
|
|
|
# TODO use some kind of runtime auto-detection instead if/when nftables is supported (https://github.com/moby/moby/issues/26824)
|
2019-07-22 15:22:13 +00:00
|
|
|
RUN update-alternatives --set iptables /usr/sbin/iptables-legacy || true \
|
|
|
|
&& update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy || true \
|
|
|
|
&& update-alternatives --set arptables /usr/sbin/arptables-legacy || true
|
2020-02-10 17:55:16 +00:00
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-dev-aptlib,target=/var/lib/apt \
|
|
|
|
--mount=type=cache,sharing=locked,id=moby-dev-aptcache,target=/var/cache/apt \
|
2023-01-01 16:47:17 +00:00
|
|
|
apt-get update && apt-get install --no-install-recommends -y \
|
|
|
|
gcc \
|
|
|
|
pkg-config \
|
|
|
|
dpkg-dev \
|
|
|
|
libapparmor-dev \
|
|
|
|
libseccomp-dev \
|
|
|
|
libsecret-1-dev \
|
|
|
|
libsystemd-dev \
|
2023-06-22 14:03:24 +00:00
|
|
|
libudev-dev \
|
|
|
|
yamllint
|
2023-06-05 14:32:24 +00:00
|
|
|
COPY --link --from=dockercli /build/ /usr/local/cli
|
|
|
|
COPY --link --from=dockercli-integration /build/ /usr/local/cli-integration
|
2020-03-06 06:36:54 +00:00
|
|
|
|
2023-01-01 16:47:17 +00:00
|
|
|
FROM base AS build
|
|
|
|
COPY --from=gowinres /build/ /usr/local/bin/
|
|
|
|
WORKDIR /go/src/github.com/docker/docker
|
|
|
|
ENV GO111MODULE=off
|
|
|
|
ENV CGO_ENABLED=1
|
2023-01-18 17:41:16 +00:00
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-build-aptlib,target=/var/lib/apt \
|
|
|
|
--mount=type=cache,sharing=locked,id=moby-build-aptcache,target=/var/cache/apt \
|
|
|
|
apt-get update && apt-get install --no-install-recommends -y \
|
|
|
|
clang \
|
|
|
|
lld \
|
|
|
|
llvm
|
2023-01-01 16:47:17 +00:00
|
|
|
ARG TARGETPLATFORM
|
|
|
|
RUN --mount=type=cache,sharing=locked,id=moby-build-aptlib,target=/var/lib/apt \
|
|
|
|
--mount=type=cache,sharing=locked,id=moby-build-aptcache,target=/var/cache/apt \
|
|
|
|
xx-apt-get install --no-install-recommends -y \
|
2023-01-12 19:32:42 +00:00
|
|
|
dpkg-dev \
|
2023-01-01 16:47:17 +00:00
|
|
|
gcc \
|
|
|
|
libapparmor-dev \
|
|
|
|
libc6-dev \
|
|
|
|
libseccomp-dev \
|
|
|
|
libsecret-1-dev \
|
|
|
|
libsystemd-dev \
|
2023-06-22 14:03:24 +00:00
|
|
|
libudev-dev \
|
|
|
|
pkg-config
|
2023-01-01 16:47:17 +00:00
|
|
|
ARG DOCKER_BUILDTAGS
|
|
|
|
ARG DOCKER_DEBUG
|
2019-05-22 23:49:55 +00:00
|
|
|
ARG DOCKER_GITCOMMIT=HEAD
|
2023-01-01 16:47:17 +00:00
|
|
|
ARG DOCKER_LDFLAGS
|
|
|
|
ARG DOCKER_STATIC
|
2019-10-16 17:09:10 +00:00
|
|
|
ARG VERSION
|
|
|
|
ARG PLATFORM
|
|
|
|
ARG PRODUCT
|
|
|
|
ARG DEFAULT_PRODUCT_LICENSE
|
2022-04-14 17:52:23 +00:00
|
|
|
ARG PACKAGER_NAME
|
2023-01-01 16:47:17 +00:00
|
|
|
# PREFIX overrides DEST dir in make.sh script otherwise it fails because of
|
|
|
|
# read only mount in current work dir
|
|
|
|
ENV PREFIX=/tmp
|
2023-01-18 17:41:16 +00:00
|
|
|
RUN <<EOT
|
|
|
|
# in bullseye arm64 target does not link with lld so configure it to use ld instead
|
2023-01-19 15:34:34 +00:00
|
|
|
if [ "$(xx-info arch)" = "arm64" ]; then
|
2023-01-18 17:41:16 +00:00
|
|
|
XX_CC_PREFER_LINKER=ld xx-clang --setup-target-triple
|
|
|
|
fi
|
|
|
|
EOT
|
2023-04-11 00:31:23 +00:00
|
|
|
RUN --mount=type=bind,target=.,rw \
|
2022-04-14 17:52:23 +00:00
|
|
|
--mount=type=tmpfs,target=cli/winresources/dockerd \
|
|
|
|
--mount=type=tmpfs,target=cli/winresources/docker-proxy \
|
2023-01-01 16:47:17 +00:00
|
|
|
--mount=type=cache,target=/root/.cache/go-build,id=moby-build-$TARGETPLATFORM <<EOT
|
|
|
|
set -e
|
|
|
|
target=$([ "$DOCKER_STATIC" = "1" ] && echo "binary" || echo "dynbinary")
|
|
|
|
xx-go --wrap
|
2023-01-12 19:32:42 +00:00
|
|
|
PKG_CONFIG=$(xx-go env PKG_CONFIG) ./hack/make.sh $target
|
2022-12-27 01:45:43 +00:00
|
|
|
xx-verify $([ "$DOCKER_STATIC" = "1" ] && echo "--static") /tmp/bundles/${target}-daemon/dockerd$([ "$(xx-info os)" = "windows" ] && echo ".exe")
|
|
|
|
xx-verify $([ "$DOCKER_STATIC" = "1" ] && echo "--static") /tmp/bundles/${target}-daemon/docker-proxy$([ "$(xx-info os)" = "windows" ] && echo ".exe")
|
2023-01-01 16:47:17 +00:00
|
|
|
mkdir /build
|
|
|
|
mv /tmp/bundles/${target}-daemon/* /build/
|
|
|
|
EOT
|
2019-05-22 23:49:55 +00:00
|
|
|
|
2023-01-01 16:47:17 +00:00
|
|
|
# usage:
|
|
|
|
# > docker buildx bake binary
|
|
|
|
# > DOCKER_STATIC=0 docker buildx bake binary
|
|
|
|
# or
|
|
|
|
# > make binary
|
|
|
|
# > make dynbinary
|
2019-05-22 23:49:55 +00:00
|
|
|
FROM scratch AS binary
|
2023-01-01 16:47:17 +00:00
|
|
|
COPY --from=build /build/ /
|
2018-12-14 01:26:10 +00:00
|
|
|
|
2022-12-29 14:35:55 +00:00
|
|
|
# usage:
|
|
|
|
# > docker buildx bake all
|
|
|
|
FROM scratch AS all
|
2023-05-31 09:52:18 +00:00
|
|
|
COPY --link --from=tini /build/ /
|
|
|
|
COPY --link --from=runc /build/ /
|
|
|
|
COPY --link --from=containerd /build/ /
|
|
|
|
COPY --link --from=rootlesskit /build/ /
|
|
|
|
COPY --link --from=containerutil /build/ /
|
|
|
|
COPY --link --from=vpnkit / /
|
|
|
|
COPY --link --from=build /build /
|
2022-12-29 14:35:55 +00:00
|
|
|
|
2023-01-18 10:40:37 +00:00
|
|
|
# smoke tests
|
|
|
|
# usage:
|
|
|
|
# > docker buildx bake binary-smoketest
|
|
|
|
FROM --platform=$TARGETPLATFORM base AS smoketest
|
|
|
|
WORKDIR /usr/local/bin
|
|
|
|
COPY --from=build /build .
|
|
|
|
RUN <<EOT
|
|
|
|
set -ex
|
|
|
|
file dockerd
|
|
|
|
dockerd --version
|
|
|
|
file docker-proxy
|
|
|
|
docker-proxy --version
|
|
|
|
EOT
|
|
|
|
|
2024-03-01 13:51:18 +00:00
|
|
|
# devcontainer is a stage used by .devcontainer/devcontainer.json
|
|
|
|
FROM dev-base AS devcontainer
|
|
|
|
COPY --link . .
|
|
|
|
COPY --link --from=gopls /build/ /usr/local/bin/
|
|
|
|
|
2023-01-01 16:47:17 +00:00
|
|
|
# usage:
|
|
|
|
# > make shell
|
|
|
|
# > SYSTEMD=true make shell
|
2022-12-26 16:55:57 +00:00
|
|
|
FROM dev-base AS dev
|
2023-06-01 20:14:38 +00:00
|
|
|
COPY --link . .
|