docker_build.sh 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  4. ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
  5. REGISTRY="${REGISTRY:-ghcr.io/gyj2032-byte}"
  6. IMAGE_PREFIX="${IMAGE_PREFIX:-stylist}"
  7. PLATFORM="${PLATFORM:-linux/amd64}"
  8. NODE_IMAGE="${NODE_IMAGE:-node:20-alpine}"
  9. NGINX_IMAGE="${NGINX_IMAGE:-nginx:1.27-alpine}"
  10. if [ "$#" -gt 1 ]; then
  11. echo "Usage: $0 [tag]" >&2
  12. exit 2
  13. fi
  14. if [ "$#" -eq 1 ]; then
  15. TAG="$1"
  16. else
  17. TAG="$(git -C "$ROOT_DIR" rev-parse --short HEAD 2>/dev/null || date +%Y%m%d%H%M%S)"
  18. fi
  19. BACKEND_IMAGE="$REGISTRY/${IMAGE_PREFIX}-backend"
  20. FRONTEND_IMAGE="$REGISTRY/${IMAGE_PREFIX}-frontend"
  21. if ! command -v docker >/dev/null 2>&1; then
  22. echo "docker is required but was not found in PATH." >&2
  23. exit 1
  24. fi
  25. if ! docker buildx version >/dev/null 2>&1; then
  26. echo "docker buildx is required but is not available." >&2
  27. exit 1
  28. fi
  29. echo "Building and pushing Linux images:"
  30. echo " $BACKEND_IMAGE:$TAG"
  31. echo " $BACKEND_IMAGE:latest"
  32. echo " $FRONTEND_IMAGE:$TAG"
  33. echo " $FRONTEND_IMAGE:latest"
  34. echo "Platform: $PLATFORM"
  35. buildx_build() {
  36. if [ -n "${BUILDER:-}" ]; then
  37. docker buildx build --builder "$BUILDER" "$@"
  38. else
  39. docker buildx build "$@"
  40. fi
  41. }
  42. buildx_build \
  43. --platform "$PLATFORM" \
  44. --build-arg NODE_IMAGE="$NODE_IMAGE" \
  45. -f "$ROOT_DIR/docker/backend.Dockerfile" \
  46. -t "$BACKEND_IMAGE:$TAG" \
  47. -t "$BACKEND_IMAGE:latest" \
  48. --push "$ROOT_DIR"
  49. buildx_build \
  50. --platform "$PLATFORM" \
  51. --build-arg NODE_IMAGE="$NODE_IMAGE" \
  52. --build-arg NGINX_IMAGE="$NGINX_IMAGE" \
  53. -f "$ROOT_DIR/docker/frontend.Dockerfile" \
  54. -t "$FRONTEND_IMAGE:$TAG" \
  55. -t "$FRONTEND_IMAGE:latest" \
  56. --push "$ROOT_DIR"
  57. cat <<EOF
  58. Pushed:
  59. $BACKEND_IMAGE:$TAG
  60. $BACKEND_IMAGE:latest
  61. $FRONTEND_IMAGE:$TAG
  62. $FRONTEND_IMAGE:latest
  63. EOF