Skip to content

Commit 4e6c980

Browse files
committed
Adopt modern arg passing for build process of both docker and singularity
1 parent b7eb47a commit 4e6c980

6 files changed

Lines changed: 33 additions & 107 deletions

File tree

docker-compose.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ services:
22
todo-service-name:
33
build:
44
dockerfile: ./docker/${IMAGE_TAG}/Dockerfile
5+
args:
6+
BASE_IMAGE: ${BASE_IMAGE}
7+
IMAGE_USER: ${IMAGE_USER}
8+
HOME_FOLDER: ${HOME_FOLDER}
9+
TIME_ZONE: ${TIME_ZONE}
510
x-bake:
611
contexts:
712
home-folder-config: ./docker/build-context/home-folder-config

docker/latest/Dockerfile

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Do not add --platform=linux/blabla since this is intended for multiplatform builds
2+
ARG BASE_IMAGE=ubuntu
23
FROM ${BASE_IMAGE}
4+
5+
ARG IMAGE_USER
6+
ARG HOME_FOLDER
7+
ARG TIME_ZONE
8+
39
ENV HOME=${HOME_FOLDER}
410
WORKDIR ${HOME_FOLDER}/
511

@@ -106,7 +112,7 @@ RUN wget "https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-$(uname -m
106112
rm ~/miniconda.sh
107113

108114
# Add conda to PATH
109-
ENV PATH=${PATH}:/opt/conda/bin
115+
ENV PATH=/opt/conda/bin:${PATH}
110116

111117
# Init conda for zsh
112118
RUN conda init zsh

scripts/build_docker_image.sh

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,10 @@
1010

1111
set -euo pipefail
1212

13-
before_env="$(mktemp)"
14-
after_env="$(mktemp)"
15-
tmp_dockerfile="$(mktemp)"
16-
cleanup() { rm -f "${before_env}" "${after_env}" "${tmp_dockerfile}"; }
17-
trap cleanup EXIT
18-
19-
env | sort >"${before_env}"
20-
2113
set -a
2214
. "$(dirname "$0")"/variables.sh
2315
set +a
2416

25-
env | sort >"${after_env}"
26-
27-
diff_env="$(
28-
awk -F= '
29-
NR==FNR { before[$1]=$0; next }
30-
{
31-
name=$1
32-
if (!(name in before) || before[name] != $0)
33-
printf " ${%s}", name
34-
}
35-
' "${before_env}" "${after_env}"
36-
)"
37-
diff_env="${diff_env# }" # trim leading space
38-
3917
# Determine the local platform
4018
if [[ "$(uname -m)" == "x86_64" ]]; then
4119
LOCAL_PLATFORM="linux/amd64"
@@ -58,13 +36,5 @@ else
5836
docker buildx use "${BUILDER}"
5937
fi
6038

61-
# environment variable substitution trick
62-
envsubst "${diff_env}" <"$(dirname "$0")/../docker/${IMAGE_TAG}/Dockerfile" >"${tmp_dockerfile}"
63-
64-
echo ">>> Substituted dockerfile:"
65-
echo "----------------------------------------"
66-
cat "${tmp_dockerfile}"
67-
echo "----------------------------------------"
68-
6939
# Build the Docker image for only the local platform, push.sh will push multi-platform version
70-
docker buildx bake --file "$(dirname "$0")"/../docker-compose.yml --load --set "*.platform=${LOCAL_PLATFORM}" --set "*.dockerfile=${tmp_dockerfile}"
40+
docker buildx bake --file "$(dirname "$0")"/../docker-compose.yml --load --set "*.platform=${LOCAL_PLATFORM}"

scripts/pull_singularity_image.sh

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,42 +10,19 @@
1010

1111
set -euo pipefail
1212

13-
before_env="$(mktemp)"
14-
after_env="$(mktemp)"
15-
tmp_def="$(mktemp)"
16-
cleanup() { rm -f "${before_env}" "${after_env}" "${tmp_def}"; }
17-
trap cleanup EXIT
18-
19-
env | sort >"${before_env}"
20-
2113
set -a
2214
. "$(dirname "$0")"/variables.sh
2315
set +a
2416

25-
after_env="$(mktemp)"
26-
trap 'rm -f "$after_env"' RETURN
27-
env | sort >"${after_env}"
28-
29-
diff_env="$(
30-
awk -F= '
31-
NR==FNR { before[$1]=$0; next }
32-
{
33-
name=$1
34-
if (!(name in before) || before[name] != $0)
35-
printf " ${%s}", name
36-
}
37-
' "${before_env}" "${after_env}"
38-
)"
39-
diff_env="${diff_env# }" # trim leading space
40-
41-
envsubst "${diff_env}" <"$(dirname "$0")/../singularity/default.def" >"${tmp_def}"
42-
43-
echo ">>> Substituted def file:"
44-
echo "----------------------------------------"
45-
cat "${tmp_def}"
46-
echo "----------------------------------------"
47-
4817
singularity build \
4918
--fix-perms \
19+
--warn-unused-build-args \
20+
--build-arg DOCKER_USER="${DOCKER_USER}" \
21+
--build-arg IMAGE_NAME="${IMAGE_NAME}" \
22+
--build-arg IMAGE_USER="${IMAGE_USER}" \
23+
--build-arg IMAGE_TAG="${IMAGE_TAG}" \
24+
--build-arg HOME_FOLDER="${HOME_FOLDER}" \
25+
--build-arg CODE_FOLDER="${CODE_FOLDER}" \
26+
--build-arg TIME_ZONE="${TIME_ZONE}" \
5027
"$(dirname "$0")/../${IMAGE_NAME}_${IMAGE_TAG}.sif" \
51-
"${tmp_def}"
28+
"$(dirname "$0")/../singularity/default.def"

scripts/push_docker_image.sh

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,10 @@
1010

1111
set -euo pipefail
1212

13-
before_env="$(mktemp)"
14-
after_env="$(mktemp)"
15-
tmp_dockerfile="$(mktemp)"
16-
cleanup() { rm -f "${before_env}" "${after_env}" "${tmp_dockerfile}"; }
17-
trap cleanup EXIT
18-
19-
env | sort >"${before_env}"
20-
2113
set -a
2214
. "$(dirname "$0")"/variables.sh
2315
set +a
2416

25-
env | sort >"${after_env}"
26-
27-
diff_env="$(
28-
awk -F= '
29-
NR==FNR { before[$1]=$0; next }
30-
{
31-
name=$1
32-
if (!(name in before) || before[name] != $0)
33-
printf " ${%s}", name
34-
}
35-
' "${before_env}" "${after_env}"
36-
)"
37-
diff_env="${diff_env# }" # trim leading space
38-
3917
# Check if the builder already exists
4018
if ! docker buildx inspect "${BUILDER}" &>/dev/null; then
4119
echo "Creating Docker Buildx builder '${BUILDER}'..."
@@ -48,14 +26,6 @@ else
4826
docker buildx use "${BUILDER}"
4927
fi
5028

51-
# environment variable substitution trick
52-
envsubst "${diff_env}" <"$(dirname "$0")/../docker/${IMAGE_TAG}/Dockerfile" >"${tmp_dockerfile}"
53-
54-
echo ">>> Substituted dockerfile:"
55-
echo "----------------------------------------"
56-
cat "${tmp_dockerfile}"
57-
echo "----------------------------------------"
58-
5929
# docker push "${DOCKER_USER}"/"${IMAGE_NAME}":"${IMAGE_TAG}"
6030

61-
docker buildx bake --file "$(dirname "$0")"/../docker-compose.yml --push --set "*.dockerfile=${tmp_dockerfile}"
31+
docker buildx bake --file "$(dirname "$0")"/../docker-compose.yml --push

singularity/default.def

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
Bootstrap: docker
2-
From: ${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}
2+
From: {{DOCKER_USER}}/{{IMAGE_NAME}}:{{IMAGE_TAG}}
33

44
%labels
5-
Image ${IMAGE_NAME}:${IMAGE_TAG}
6-
Source docker://${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}
5+
Image {{IMAGE_NAME}}:{{IMAGE_TAG}}
6+
Source docker://{{DOCKER_USER}}/{{IMAGE_NAME}}:{{IMAGE_TAG}}
77

88
%environment
9-
# ---- Runtime env (applies inside the container at exec/start) ----
10-
export HOME="${HOME_FOLDER}"
11-
export DEBIAN_FRONTEND=noninteractive
9+
# ---- Runtime env (applies inside the instance at start/exec) ----
10+
export HOME={{HOME_FOLDER}}
1211

1312
%runscript
14-
# Default behavior: pass through to the invoked command
15-
exec "$@"
13+
# works only when starting with 'singularity run ...'
14+
# Source zshrc if it exists
15+
[ -f ~/.zshrc ] && source ~/.zshrc
16+
17+
cd "{{HOME_FOLDER}}/{{CODE_FOLDER}}" 2>/dev/null || cd "{{HOME_FOLDER}}" || true
1618

17-
%startscript
18-
# When `instance start` runs, ensure HOME is correct and cd to project if present
19-
export HOME="${HOME_FOLDER}"
20-
cd "${HOME_FOLDER}/${CODE_FOLDER}" 2>/dev/null || cd "${HOME_FOLDER}" || true
2119
exec "$@"

0 commit comments

Comments
 (0)