docker-export 967 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/bin/bash
  2. set -e
  3. IMG=$1
  4. NAME=$2
  5. if [[ -z "$IMG" ]]; then
  6. echo "Usage: $0 <dockerimgurl> [output_file]"
  7. echo ""
  8. echo " Export docker multi-arch images specified by <dockerimageurl> to a local tar file"
  9. echo ""
  10. exit 1
  11. fi
  12. if [[ -z "$NAME" ]]; then
  13. NAME=$(echo -n $IMG | cut -d / -f 3)
  14. NAME="${NAME/:/-}"
  15. fi
  16. echo "Export docker iamge to $NAME"
  17. if [[ -d $NAME ]]; then
  18. echo "directory $NAME already exists!"
  19. exit 1
  20. fi
  21. mkdir $NAME
  22. IMGCNT=0
  23. for arch in $(docker manifest inspect $IMG | grep -w "\"architecture\"" | awk '{print $2}' | cut -f 2 -d \")
  24. do
  25. echo "export to linux/$arch"
  26. docker pull --platform "linux/$arch" $IMG
  27. docker tag $IMG "$IMG-$arch"
  28. docker save "$IMG-$arch" | gzip > $NAME/img-$arch.tgz
  29. docker image rm $IMG "$IMG-$arch"
  30. IMGCNT=$((IMGCNT+1))
  31. done
  32. if [ "$IMGCNT" -eq "0" ]; then
  33. echo "This is an ordinary image"
  34. docker pull $IMG
  35. docker save $IMG | gzip > $NAME/img.tgz
  36. docker image rm $IMG
  37. fi
  38. tar cvf $NAME.tar $NAME