浏览代码

Add docker build scripts

Breandan Dezendorf 7 小时之前
父节点
当前提交
1e2c56a69a
共有 5 个文件被更改,包括 114 次插入36 次删除
  1. 23 9
      dezendorf/applications/gopy/build.sh
  2. 23 9
      dezendorf/applications/subtitles/build.sh
  3. 22 0
      docker/README.md
  4. 24 9
      docker/codeserver/build.sh
  5. 22 9
      docker/whisparr/build.sh

+ 23 - 9
dezendorf/applications/gopy/build.sh

@@ -1,15 +1,29 @@
-TAG=$(git rev-parse --short HEAD)
+#!/usr/bin/env bash
+set -euo pipefail
+
+TAG="$(git rev-parse --short HEAD)"
 NAME="docker.dezendorf.net/gopy"
 YAML="../../homelab/k3s/gopy/gopy.yaml"
-docker build --no-cache -t ${NAME}:${TAG} . < Dockerfile
-docker push ${NAME}:${TAG}
-docker push ${NAME}:latest
+PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}"
 
-echo "Built and pushed:"
-echo "  ${NAME}:${TAG}"
-echo "  ${NAME}:latest"
+if ! docker buildx version >/dev/null 2>&1; then
+  echo "docker buildx is required for multi-arch builds" >&2
+  exit 1
+fi
 
-sed -i -e "s#$NAME:.*#$NAME:$TAG#g" ${YAML}
-git add ${YAML}
+docker buildx build \
+  --no-cache \
+  --platform "${PLATFORMS}" \
+  --tag "${NAME}:${TAG}" \
+  --tag "${NAME}:latest" \
+  --push \
+  -f Dockerfile \
+  .
 
+echo "Built and pushed multi-arch images:"
+echo "  ${NAME}:${TAG}"
+echo "  ${NAME}:latest"
+echo "  platforms=${PLATFORMS}"
 
+sed -i -e "s#${NAME}:.*#${NAME}:${TAG}#g" "${YAML}"
+git add "${YAML}"

+ 23 - 9
dezendorf/applications/subtitles/build.sh

@@ -1,15 +1,29 @@
-TAG=$(git rev-parse --short HEAD)
+#!/usr/bin/env bash
+set -euo pipefail
+
+TAG="$(git rev-parse --short HEAD)"
 NAME="docker.dezendorf.net/subtitles"
 YAML="../../homelab/k3s/subtitles/subtitles.yaml"
-docker build --no-cache -t ${NAME}:${TAG} . < Dockerfile
-docker push ${NAME}:${TAG}
-docker push ${NAME}:latest
+PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}"
 
-echo "Built and pushed:"
-echo "  ${NAME}:${TAG}"
-echo "  ${NAME}:latest"
+if ! docker buildx version >/dev/null 2>&1; then
+  echo "docker buildx is required for multi-arch builds" >&2
+  exit 1
+fi
 
-sed -i -e "s#$NAME:.*#$NAME:$TAG#g" ${YAML}
-git add ${YAML}
+docker buildx build \
+  --no-cache \
+  --platform "${PLATFORMS}" \
+  --tag "${NAME}:${TAG}" \
+  --tag "${NAME}:latest" \
+  --push \
+  -f Dockerfile \
+  .
 
+echo "Built and pushed multi-arch images:"
+echo "  ${NAME}:${TAG}"
+echo "  ${NAME}:latest"
+echo "  platforms=${PLATFORMS}"
 
+sed -i -e "s#${NAME}:.*#${NAME}:${TAG}#g" "${YAML}"
+git add "${YAML}"

+ 22 - 0
docker/README.md

@@ -0,0 +1,22 @@
+# Docker Image Builds
+
+This monorepo builds multi-architecture Docker images with Buildx.
+Prerequisite: Docker CLI with the `buildx` plugin installed.
+
+Default platforms for release scripts:
+- `linux/amd64`
+- `linux/arm64`
+
+Run from each image directory:
+
+```bash
+./build.sh
+```
+
+Override platforms when needed:
+
+```bash
+PLATFORMS=linux/amd64 ./build.sh
+```
+
+All scripts publish both `${IMAGE}:${GIT_SHA}` and `${IMAGE}:latest` as a multi-platform manifest list.

+ 24 - 9
docker/codeserver/build.sh

@@ -1,15 +1,30 @@
-TAG=$(git rev-parse --short HEAD)
+#!/usr/bin/env bash
+set -euo pipefail
+
+TAG="$(git rev-parse --short HEAD)"
 NAME="docker.dezendorf.net/code-server"
 YAML="../../dezendorf/homelab/k3s/codeserver/codeserver.yaml"
-docker build --no-cache -t ${NAME}:${TAG} . < Dockerfile
-docker push ${NAME}:${TAG}
-docker push ${NAME}:latest
+PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}"
+
+if ! docker buildx version >/dev/null 2>&1; then
+  echo "docker buildx is required for multi-arch builds" >&2
+  exit 1
+fi
 
-echo "Built and pushed:"
+docker buildx build \
+  --no-cache \
+  --platform "${PLATFORMS}" \
+  --tag "${NAME}:${TAG}" \
+  --tag "${NAME}:latest" \
+  --push \
+  -f Dockerfile \
+  .
+
+echo "Built and pushed multi-arch images:"
 echo "  ${NAME}:${TAG}"
 echo "  ${NAME}:latest"
+echo "  platforms=${PLATFORMS}"
 
-sed -i -e "s#$NAME:.*#$NAME:$TAG#g" ${YAML}
-git add ${YAML}
-git commit -m "releasing $NAME:$TAG"
-
+sed -i -e "s#${NAME}:.*#${NAME}:${TAG}#g" "${YAML}"
+git add "${YAML}"
+git commit -m "releasing ${NAME}:${TAG}"

+ 22 - 9
docker/whisparr/build.sh

@@ -1,15 +1,28 @@
-TAG=$(git rev-parse --short HEAD)
+#!/usr/bin/env bash
+set -euo pipefail
+
+TAG="$(git rev-parse --short HEAD)"
 NAME="docker.dezendorf.net/whisparr"
 YAML="../../dezendorf/homelab/k3s/media/whisparr.yaml"
-docker build -t ${NAME}:${TAG} . < Dockerfile
-docker push ${NAME}:${TAG}
-docker push ${NAME}:latest
+PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}"
 
-echo "Built and pushed:"
-echo "  ${NAME}:${TAG}"
-echo "  ${NAME}:latest"
+if ! docker buildx version >/dev/null 2>&1; then
+  echo "docker buildx is required for multi-arch builds" >&2
+  exit 1
+fi
 
-sed -i -e "s#$NAME:.*#$NAME:$TAG#g" ${YAML}
-git add ${YAML}
+docker buildx build \
+  --platform "${PLATFORMS}" \
+  --tag "${NAME}:${TAG}" \
+  --tag "${NAME}:latest" \
+  --push \
+  -f Dockerfile \
+  .
 
+echo "Built and pushed multi-arch images:"
+echo "  ${NAME}:${TAG}"
+echo "  ${NAME}:latest"
+echo "  platforms=${PLATFORMS}"
 
+sed -i -e "s#${NAME}:.*#${NAME}:${TAG}#g" "${YAML}"
+git add "${YAML}"