docker-import 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/bin/bash
  2. TAR=$1
  3. TARGET=$2
  4. if [[ -z "$TARGET" ]]; then
  5. echo "Usage: $0 <tar_file> <docker_image_url>"
  6. echo ""
  7. echo " Import docker multi-arch images in <tar_file> exported by docker-export and push to registry specified by <docker_image_url>"
  8. echo " Example: $0 docs-ee-v3.10.10.tar registry.cn-beijing.aliyuncs.com/examplerepo/docs-ee:v3.10.10"
  9. echo ""
  10. exit 1
  11. fi
  12. WORK_DIR=`mktemp -d -p "."`
  13. if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
  14. echo "Could not create temp dir"
  15. exit 1
  16. fi
  17. function cleanup {
  18. rm -rf "$WORK_DIR"
  19. echo "Deleted temp working directory $WORK_DIR"
  20. }
  21. # register the cleanup function to be called on the EXIT signal
  22. trap cleanup EXIT
  23. tar xvf $TAR --strip-components=1 -C $WORK_DIR
  24. echo "cd $WORK_DIR"
  25. cd $WORK_DIR
  26. IMGCNT=$(ls img* | wc -l)
  27. if [ "$IMGCNT" -eq "0" ]; then
  28. echo "Not a recognized package, give up ..."
  29. exit 1
  30. fi
  31. if [ "$IMGCNT" -eq "1" ]; then
  32. echo "This is a single image package"
  33. IMG=$(docker load < $f | tail -n 1 | awk '{print $3}')
  34. echo "Loading $IMG..."
  35. docker tag $IMG $TARGET
  36. docker push $TARGET
  37. else
  38. for f in $(ls img*)
  39. do
  40. echo $f
  41. IMG=$(docker load < $f | tail -n 1 | awk '{print $3}')
  42. echo "Loading $IMG..."
  43. ARCH=$(echo -n $IMG | rev | cut -d - -f 1 | rev)
  44. TIMG="$TARGET-$ARCH"
  45. echo "tag $IMG to $TIMG ..."
  46. docker tag $IMG $TIMG
  47. docker push $TIMG
  48. echo "$TIMG $ARCH" >> imglist
  49. done
  50. # create manifest
  51. cat imglist | awk '{print $1}' | xargs docker manifest create $TARGET
  52. cat imglist | awk '{print "docker manifest annotate '$TARGET' " $1 " --arch " $2 " --os linux"}'
  53. docker manifest push $TARGET
  54. fi
  55. echo $TARGET