run.sh 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/bin/bash
  2. set -eo pipefail
  3. dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
  4. image="$1"
  5. case "${image##*/}" in
  6. docker:*dind*)
  7. dockerImage="$image"
  8. registryImage='registry'
  9. ;;
  10. registry:*|registry)
  11. registryImage="$image"
  12. dockerImage='docker:dind'
  13. ;;
  14. *)
  15. echo >&2 "error: unable to determine whether '$image' is registry or docker:dind"
  16. exit 1
  17. ;;
  18. esac
  19. rhostname='reg.example.com'
  20. rnamespace="${rhostname}:5000"
  21. rcname="docker-registry-container-$RANDOM-$RANDOM"
  22. rcid="$(
  23. docker run -d -it \
  24. --hostname "$rhostname" \
  25. --name "$rcname" \
  26. "$registryImage"
  27. )"
  28. trap "docker rm -vf $rcid > /dev/null" EXIT
  29. dcname="docker-daemon-container-$RANDOM-$RANDOM"
  30. dcid="$(
  31. docker run -d -it \
  32. --privileged \
  33. --link "$rcid":"$rhostname" \
  34. --name "$dcname" \
  35. "$dockerImage" \
  36. --insecure-registry "$rnamespace"
  37. )"
  38. trap "docker rm -vf $rcid $dcid > /dev/null" EXIT
  39. docker_() {
  40. docker run --rm -i \
  41. --link "$dcid":docker \
  42. --entrypoint docker-entrypoint.sh \
  43. "$dockerImage" \
  44. "$@"
  45. }
  46. . "$dir/../../retry.sh" 'docker_ version'
  47. [ "$(docker_ images -q | wc -l)" = '0' ]
  48. docker_ pull busybox
  49. [ "$(docker_ images -q | wc -l)" = '1' ]
  50. docker_ tag busybox "$rnamespace/busybox"
  51. docker_ push "$rnamespace/busybox"
  52. docker_ rmi busybox "$rnamespace/busybox"
  53. [ "$(docker_ images -q | wc -l)" = '0' ]
  54. docker_ pull "$rnamespace/busybox"
  55. [ "$(docker_ images -q | wc -l)" = '1' ]
  56. docker_ run --rm "$rnamespace/busybox" true