build-docker.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #!/bin/bash
  2. # shellcheck disable=SC2086
  3. # This script is for users to build docker images locally. It is most useful for users wishing to edit the
  4. # base-deps, or ray images. This script is *not* tested.
  5. GPU=""
  6. BASE_IMAGE="ubuntu:22.04"
  7. WHEEL_URL="https://s3-us-west-2.amazonaws.com/ray-wheels/latest/ray-3.0.0.dev0-cp39-cp39-manylinux2014_x86_64.whl"
  8. CPP_WHEEL_URL="https://s3-us-west-2.amazonaws.com/ray-wheels/latest/ray_cpp-3.0.0.dev0-cp39-cp39-manylinux2014_x86_64.whl"
  9. PYTHON_VERSION="3.9"
  10. BUILD_ARGS=()
  11. while [[ $# -gt 0 ]]; do
  12. case "$1" in
  13. --gpu)
  14. GPU="-gpu"
  15. BASE_IMAGE="nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04"
  16. ;;
  17. --base-image)
  18. # Override for the base image.
  19. shift
  20. BASE_IMAGE="$1"
  21. ;;
  22. --no-cache-build)
  23. BUILD_ARGS+=("--no-cache")
  24. ;;
  25. --shas-only)
  26. # output the SHA sum of each build. This is useful for scripting tests,
  27. # especially when builds of different versions are running on the same machine.
  28. # It also can facilitate cleanup.
  29. OUTPUT_SHA=YES
  30. BUILD_ARGS+=("-q")
  31. ;;
  32. --python-version)
  33. # Python version to install. e.g. 3.9
  34. # Changing python versions may require a different wheel.
  35. # If not provided defaults to 3.9
  36. shift
  37. PYTHON_VERSION="$1"
  38. ;;
  39. *)
  40. echo "Usage: build-docker.sh [ --gpu ] [ --base-image ] [ --no-cache-build ] [ --shas-only ] [ --build-development-image ] [ --build-examples ] [ --python-version ]"
  41. exit 1
  42. esac
  43. shift
  44. done
  45. export DOCKER_BUILDKIT=1
  46. # Build base-deps image
  47. if [[ "$OUTPUT_SHA" != "YES" ]]; then
  48. echo "=== Building base-deps image ===" >/dev/stderr
  49. fi
  50. BUILD_CMD=(
  51. docker build "${BUILD_ARGS[@]}"
  52. --build-arg BASE_IMAG="$BASE_IMAGE"
  53. --build-arg PYTHON_VERSION="${PYTHON_VERSION}"
  54. -t "rayproject/base-deps:dev$GPU" "docker/base-deps"
  55. )
  56. if [[ "$OUTPUT_SHA" == "YES" ]]; then
  57. IMAGE_SHA="$("${BUILD_CMD[@]}")"
  58. echo "rayproject/base-deps:dev$GPU SHA:$IMAGE_SHA"
  59. else
  60. "${BUILD_CMD[@]}"
  61. fi
  62. # Build ray image
  63. if [[ "$OUTPUT_SHA" != "YES" ]]; then
  64. echo "=== Building ray image ===" >/dev/stderr
  65. fi
  66. RAY_BUILD_DIR="$(mktemp -d)"
  67. mkdir -p "$RAY_BUILD_DIR/.whl"
  68. wget --quiet "$WHEEL_URL" -P "$RAY_BUILD_DIR/.whl"
  69. wget --quiet "$CPP_WHEEL_URL" -P "$RAY_BUILD_DIR/.whl"
  70. cp python/requirements_compiled.txt "$RAY_BUILD_DIR"
  71. cp docker/ray/Dockerfile "$RAY_BUILD_DIR"
  72. WHEEL="$(basename "$WHEEL_DIR"/.whl/ray-*.whl)"
  73. BUILD_CMD=(
  74. docker build "${BUILD_ARGS[@]}"
  75. --build-arg FULL_BASE_IMAGE="rayproject/base-deps:dev$GPU"
  76. --build-arg WHEEL_PATH=".whl/${WHEEL}"
  77. -t "rayproject/ray:dev$GPU" "$RAY_BUILD_DIR"
  78. )
  79. if [[ "$OUTPUT_SHA" == "YES" ]]; then
  80. IMAGE_SHA="$("${BUILD_CMD[@]}")"
  81. echo "rayproject/ray:dev$GPU SHA:$IMAGE_SHA"
  82. else
  83. "${BUILD_CMD[@]}"
  84. fi
  85. rm -rf "$WHEEL_DIR"