fd35494a25
The Golang built-in gzip library is serialized, and fairly slow at decompressing. It also only decompresses on demand, versus pipelining decompression. This change switches to using the pigz external command for gzip decompression, as opposed to using the built-in golang one. This code is not vendored, but will be used if it autodetected as part of the OS. This also switches to using context, versus a manually managed channel to manage cancellations, and synchronization. There is a little bit of weirdness around manually having to cancel in the error cases. Signed-off-by: Sargun Dhillon <sargun@sargun.me>
72 lines
2.4 KiB
Text
72 lines
2.4 KiB
Text
## Step 1: Build tests
|
|
FROM golang:1.9.2-alpine3.6 as builder
|
|
|
|
RUN apk add --update \
|
|
bash \
|
|
btrfs-progs-dev \
|
|
build-base \
|
|
curl \
|
|
lvm2-dev \
|
|
jq \
|
|
&& rm -rf /var/cache/apk/*
|
|
|
|
RUN mkdir -p /go/src/github.com/docker/docker/
|
|
WORKDIR /go/src/github.com/docker/docker/
|
|
|
|
# Generate frozen images
|
|
COPY contrib/download-frozen-image-v2.sh contrib/download-frozen-image-v2.sh
|
|
RUN contrib/download-frozen-image-v2.sh /output/docker-frozen-images \
|
|
buildpack-deps:jessie@sha256:dd86dced7c9cd2a724e779730f0a53f93b7ef42228d4344b25ce9a42a1486251 \
|
|
busybox:latest@sha256:bbc3a03235220b170ba48a157dd097dd1379299370e1ed99ce976df0355d24f0 \
|
|
debian:jessie@sha256:287a20c5f73087ab406e6b364833e3fb7b3ae63ca0eb3486555dc27ed32c6e60 \
|
|
hello-world:latest@sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c
|
|
|
|
# Download Docker CLI binary
|
|
COPY hack/dockerfile hack/dockerfile
|
|
RUN hack/dockerfile/install-binaries.sh dockercli
|
|
|
|
# Set tag and add sources
|
|
ARG DOCKER_GITCOMMIT
|
|
ENV DOCKER_GITCOMMIT=$DOCKER_GITCOMMIT
|
|
ADD . .
|
|
|
|
# Build DockerSuite.TestBuild* dependency
|
|
RUN CGO_ENABLED=0 go build -o /output/httpserver github.com/docker/docker/contrib/httpserver
|
|
|
|
# Build the integration tests and copy the resulting binaries to /output/tests
|
|
RUN hack/make.sh build-integration-test-binary
|
|
RUN mkdir -p /output/tests && find . -name test.main -exec cp --parents '{}' /output/tests \;
|
|
|
|
## Step 2: Generate testing image
|
|
FROM alpine:3.6 as runner
|
|
|
|
# GNU tar is used for generating the emptyfs image
|
|
RUN apk add --update \
|
|
bash \
|
|
ca-certificates \
|
|
g++ \
|
|
git \
|
|
iptables \
|
|
pigz \
|
|
tar \
|
|
xz \
|
|
&& rm -rf /var/cache/apk/*
|
|
|
|
# Add an unprivileged user to be used for tests which need it
|
|
RUN addgroup docker && adduser -D -G docker unprivilegeduser -s /bin/ash
|
|
|
|
COPY contrib/httpserver/Dockerfile /tests/contrib/httpserver/Dockerfile
|
|
COPY contrib/syscall-test /tests/contrib/syscall-test
|
|
COPY integration-cli/fixtures /tests/integration-cli/fixtures
|
|
|
|
COPY hack/test/e2e-run.sh /scripts/run.sh
|
|
COPY hack/make/.ensure-emptyfs /scripts/ensure-emptyfs.sh
|
|
|
|
COPY --from=builder /output/docker-frozen-images /docker-frozen-images
|
|
COPY --from=builder /output/httpserver /tests/contrib/httpserver/httpserver
|
|
COPY --from=builder /output/tests /tests
|
|
COPY --from=builder /usr/local/bin/docker /usr/bin/docker
|
|
|
|
ENV DOCKER_REMOTE_DAEMON=1 DOCKER_INTEGRATION_DAEMON_DEST=/
|
|
|
|
ENTRYPOINT ["/scripts/run.sh"]
|