Skip to content

Commit

Permalink
feat: check docker version to determine whether using docker buildkit (
Browse files Browse the repository at this point in the history
…#749)

* feat: check docker version to determine whether using docker buildkit

* feat: use docker buildkit only if docker_version >=19.03 && SSH_AUTH_SOCK env set

* fix: set dockerfile syntax to enable --mount=type=ssh support on v19.03
  • Loading branch information
snakorse authored Apr 3, 2023
1 parent d7359a7 commit 5518b55
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 8 deletions.
14 changes: 11 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,17 @@ else
endif

ifndef DOCKER_BUILD_USE_BUILDKIT
ifdef SSH_AUTH_SOCK
DOCKER_BUILD_USE_BUILDKIT = true
else
DOCKER_BUILD_USE_BUILDKIT = true

# docker BuildKit supported start from 19.03
docker_version := $(shell docker version --format '{{.Server.Version}}')
least_version := "19.03"
ifeq ($(shell printf "$(least_version)\n$(docker_version)" | sort -V | tail -n 1),$(least_version))
DOCKER_BUILD_USE_BUILDKIT = false
endif

# check if SSH_AUTH_SOCK env set which means ssh-agent running
ifndef SSH_AUTH_SOCK
DOCKER_BUILD_USE_BUILDKIT = false
endif
endif
Expand Down
30 changes: 25 additions & 5 deletions scripts/docker_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,25 @@ function arch() {
fi
}

function check_docker_buildkit_support {
support="true"

# docker BuildKit supported start from 19.03
docker_version=$(docker version --format '{{.Server.Version}}' | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+')
least_version="19.03"
if [[ $(printf "%s\n%s" "$least_version" "$docker_version" | sort -V | tail -n 1) == "$least_version" ]]; then
support="false"
fi

# check if SSH_AUTH_SOCK env set which means ssh-agent running
ssh_agent_running="${SSH_AUTH_SOCK:-}"
if [[ -z "$ssh_agent_running" ]]; then
support="false"
fi

echo "$support"
}

# Currently, there are 4 supported docker categories, which are goc, build, development and production.
#
# goc: build goc server with Dockerfile_doc
Expand All @@ -40,7 +59,7 @@ GENERATED_HOME=$2
VERSION=${3:-1.4.0}
REPOSITORY=${4:-aliyun/ilogtail}
PUSH=${5:-false}
USE_DOCKER_BUILDKIT=${6:-${DOCKER_BUILD_USE_BUILDKIT:-$(if [[ -n "${SSH_AUTH_SOCK}" ]];then echo "true";else echo "false";fi)}}
USE_DOCKER_BUILDKIT=${6:-${DOCKER_BUILD_USE_BUILDKIT:-$(check_docker_buildkit_support)}}

HOST_OS=`uname -s`
ROOTDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && cd .. && pwd)
Expand Down Expand Up @@ -71,15 +90,16 @@ else
REMOVE_SSH_MOUNT='sed s/--mount=type=ssh//'
fi

echo "# syntax=docker/dockerfile:1.5" > $GEN_DOCKERFILE;
if [[ $CATEGORY = "goc" || $CATEGORY = "build" ]]; then
cat $ROOTDIR/docker/Dockerfile_$CATEGORY | grep -v "^#" | sed "s/$CN_REGION/$REG_REGION/" | $REMOVE_SSH_MOUNT > $GEN_DOCKERFILE;
cat $ROOTDIR/docker/Dockerfile_$CATEGORY | grep -v "^#" | sed "s/$CN_REGION/$REG_REGION/" | $REMOVE_SSH_MOUNT >> $GEN_DOCKERFILE;
elif [[ $CATEGORY = "development" ]]; then
cat $ROOTDIR/docker/Dockerfile_build | grep -v "^#" | sed "s/$CN_REGION/$REG_REGION/" | $REMOVE_SSH_MOUNT > $GEN_DOCKERFILE;
cat $ROOTDIR/docker/Dockerfile_build | grep -v "^#" | sed "s/$CN_REGION/$REG_REGION/" | $REMOVE_SSH_MOUNT >> $GEN_DOCKERFILE;
cat $ROOTDIR/docker/Dockerfile_development_part |grep -v "^#" | sed "s/$CN_REGION/$REG_REGION/" >> $GEN_DOCKERFILE;
elif [[ $CATEGORY = "production" ]]; then
cat $ROOTDIR/docker/Dockerfile_production | grep -v "^#" | sed 's/ --platform=$TARGETPLATFORM//' > $GEN_DOCKERFILE;
cat $ROOTDIR/docker/Dockerfile_production | grep -v "^#" | sed 's/ --platform=$TARGETPLATFORM//' >> $GEN_DOCKERFILE;
elif [[ $CATEGORY = "multi-arch-production" ]]; then
cat $ROOTDIR/docker/Dockerfile_production | grep -v "^#" > $GEN_DOCKERFILE;
cat $ROOTDIR/docker/Dockerfile_production | grep -v "^#" >> $GEN_DOCKERFILE;
fi

echo "=============DOCKERFILE=================="
Expand Down

0 comments on commit 5518b55

Please sign in to comment.