build: Refactor to use BuildKit

Signed-off-by: Chris Crone <christopher.crone@docker.com>
This commit is contained in:
Chris Crone 2020-10-20 17:53:47 +02:00 committed by Ulysses Souza
parent 675c9674e1
commit f825cec2fc
5 changed files with 27 additions and 19 deletions

View File

@ -5,7 +5,7 @@ ARG BUILD_DEBIAN_VERSION=slim-stretch
ARG RUNTIME_ALPINE_VERSION=3.11.5 ARG RUNTIME_ALPINE_VERSION=3.11.5
ARG RUNTIME_DEBIAN_VERSION=stretch-20200414-slim ARG RUNTIME_DEBIAN_VERSION=stretch-20200414-slim
ARG BUILD_PLATFORM=alpine ARG DISTRO=alpine
FROM docker:${DOCKER_VERSION} AS docker-cli FROM docker:${DOCKER_VERSION} AS docker-cli
@ -40,15 +40,14 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
openssl \ openssl \
zlib1g-dev zlib1g-dev
FROM build-${BUILD_PLATFORM} AS build FROM build-${DISTRO} AS build
COPY docker-compose-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["sh", "/usr/local/bin/docker-compose-entrypoint.sh"] ENTRYPOINT ["sh", "/usr/local/bin/docker-compose-entrypoint.sh"]
COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker
WORKDIR /code/ WORKDIR /code/
COPY docker-compose-entrypoint.sh /usr/local/bin/
COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker
RUN pip install \ RUN pip install \
virtualenv==20.0.30 \ virtualenv==20.0.30 \
tox==3.19.0 tox==3.19.0
COPY requirements-dev.txt . COPY requirements-dev.txt .
COPY requirements-indirect.txt . COPY requirements-indirect.txt .
COPY requirements.txt . COPY requirements.txt .
@ -64,9 +63,14 @@ ARG GIT_COMMIT=unknown
ENV DOCKER_COMPOSE_GITSHA=$GIT_COMMIT ENV DOCKER_COMPOSE_GITSHA=$GIT_COMMIT
RUN script/build/linux-entrypoint RUN script/build/linux-entrypoint
FROM scratch AS bin
ARG TARGETARCH
ARG TARGETOS
COPY --from=build /usr/local/bin/docker-compose /docker-compose-${TARGETOS}-${TARGETARCH}
FROM alpine:${RUNTIME_ALPINE_VERSION} AS runtime-alpine FROM alpine:${RUNTIME_ALPINE_VERSION} AS runtime-alpine
FROM debian:${RUNTIME_DEBIAN_VERSION} AS runtime-debian FROM debian:${RUNTIME_DEBIAN_VERSION} AS runtime-debian
FROM runtime-${BUILD_PLATFORM} AS runtime FROM runtime-${DISTRO} AS runtime
COPY docker-compose-entrypoint.sh /usr/local/bin/ COPY docker-compose-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["sh", "/usr/local/bin/docker-compose-entrypoint.sh"] ENTRYPOINT ["sh", "/usr/local/bin/docker-compose-entrypoint.sh"]
COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker

5
Jenkinsfile vendored
View File

@ -13,6 +13,9 @@ pipeline {
timeout(time: 2, unit: 'HOURS') timeout(time: 2, unit: 'HOURS')
timestamps() timestamps()
} }
environment {
DOCKER_BUILDKIT="1"
}
stages { stages {
stage('Build test images') { stage('Build test images') {
@ -69,7 +72,7 @@ def buildImage(baseImage) {
ansiColor('xterm') { ansiColor('xterm') {
sh """docker build -t ${imageName} \\ sh """docker build -t ${imageName} \\
--target build \\ --target build \\
--build-arg BUILD_PLATFORM="${baseImage}" \\ --build-arg DISTRO="${baseImage}" \\
--build-arg GIT_COMMIT="${scmvar.GIT_COMMIT}" \\ --build-arg GIT_COMMIT="${scmvar.GIT_COMMIT}" \\
.\\ .\\
""" """

View File

@ -13,6 +13,9 @@ pipeline {
timeout(time: 2, unit: 'HOURS') timeout(time: 2, unit: 'HOURS')
timestamps() timestamps()
} }
environment {
DOCKER_BUILDKIT="1"
}
stages { stages {
stage('Build test images') { stage('Build test images') {
@ -229,7 +232,7 @@ def buildImage(baseImage) {
ansiColor('xterm') { ansiColor('xterm') {
sh """docker build -t ${imageName} \\ sh """docker build -t ${imageName} \\
--target build \\ --target build \\
--build-arg BUILD_PLATFORM="${baseImage}" \\ --build-arg DISTRO="${baseImage}" \\
--build-arg GIT_COMMIT="${scmvar.GIT_COMMIT}" \\ --build-arg GIT_COMMIT="${scmvar.GIT_COMMIT}" \\
.\\ .\\
""" """
@ -276,7 +279,7 @@ def buildRuntimeImage(baseImage) {
def imageName = "docker/compose:${baseImage}-${env.BRANCH_NAME}" def imageName = "docker/compose:${baseImage}-${env.BRANCH_NAME}"
ansiColor('xterm') { ansiColor('xterm') {
sh """docker build -t ${imageName} \\ sh """docker build -t ${imageName} \\
--build-arg BUILD_PLATFORM="${baseImage}" \\ --build-arg DISTRO="${baseImage}" \\
--build-arg GIT_COMMIT="${scmvar.GIT_COMMIT.take(7)}" \\ --build-arg GIT_COMMIT="${scmvar.GIT_COMMIT.take(7)}" \\
. .
""" """

View File

@ -5,14 +5,12 @@ set -ex
./script/clean ./script/clean
DOCKER_COMPOSE_GITSHA="$(script/build/write-git-sha)" DOCKER_COMPOSE_GITSHA="$(script/build/write-git-sha)"
TAG="docker/compose:tmp-glibc-linux-binary-${DOCKER_COMPOSE_GITSHA}"
docker build -t "${TAG}" . \ docker build . \
--build-arg BUILD_PLATFORM=debian \ --target bin \
--build-arg GIT_COMMIT="${DOCKER_COMPOSE_GITSHA}" --build-arg DISTRO=debian \
TMP_CONTAINER=$(docker create "${TAG}") --build-arg GIT_COMMIT="${DOCKER_COMPOSE_GITSHA}" \
mkdir -p dist --output dist/
ARCH=$(uname -m) ARCH=$(uname -m)
docker cp "${TMP_CONTAINER}":/usr/local/bin/docker-compose "dist/docker-compose-Linux-${ARCH}" # Ensure that we output the binary with the same name as we did before
docker container rm -f "${TMP_CONTAINER}" mv dist/docker-compose-linux-amd64 "dist/docker-compose-Linux-${ARCH}"
docker image rm -f "${TAG}"

View File

@ -13,6 +13,6 @@ IMAGE="docker/compose-tests"
DOCKER_COMPOSE_GITSHA="$(script/build/write-git-sha)" DOCKER_COMPOSE_GITSHA="$(script/build/write-git-sha)"
docker build -t "${IMAGE}:${TAG}" . \ docker build -t "${IMAGE}:${TAG}" . \
--target build \ --target build \
--build-arg BUILD_PLATFORM="debian" \ --build-arg DISTRO="debian" \
--build-arg GIT_COMMIT="${DOCKER_COMPOSE_GITSHA}" --build-arg GIT_COMMIT="${DOCKER_COMPOSE_GITSHA}"
docker tag "${IMAGE}":"${TAG}" "${IMAGE}":latest docker tag "${IMAGE}":"${TAG}" "${IMAGE}":latest