run.sh 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. if ! docker image inspect "$registryImage" &> /dev/null; then
  10. docker pull "$registryImage" > /dev/null
  11. fi
  12. ;;
  13. registry:*|registry)
  14. registryImage="$image"
  15. dockerImage='docker:dind'
  16. if ! docker image inspect "$dockerImage" &> /dev/null; then
  17. docker pull "$dockerImage" > /dev/null
  18. fi
  19. ;;
  20. *)
  21. echo >&2 "error: unable to determine whether '$image' is registry or docker:dind"
  22. exit 1
  23. ;;
  24. esac
  25. rhostname='reg.example.com'
  26. rnamespace="${rhostname}:5000"
  27. rcname="docker-registry-container-$RANDOM-$RANDOM"
  28. rcid="$(
  29. docker run -d -it \
  30. --hostname "$rhostname" \
  31. --name "$rcname" \
  32. "$registryImage"
  33. )"
  34. trap "docker rm -vf $rcid > /dev/null" EXIT
  35. dcname="docker-daemon-container-$RANDOM-$RANDOM"
  36. dcid="$(
  37. docker run -d -it \
  38. --privileged \
  39. --link "$rcid":"$rhostname" \
  40. --name "$dcname" \
  41. -e DOCKER_TLS_CERTDIR=/certs -v /certs \
  42. "$dockerImage" \
  43. --insecure-registry "$rnamespace"
  44. )"
  45. trap "docker rm -vf $rcid $dcid > /dev/null" EXIT
  46. docker_() {
  47. docker run --rm -i \
  48. --link "$dcid":docker \
  49. -e DOCKER_TLS_CERTDIR=/certs --volumes-from "$dcid:ro" \
  50. --entrypoint docker-entrypoint.sh \
  51. "$dockerImage" \
  52. "$@"
  53. }
  54. . "$dir/../../retry.sh" --tries 30 'docker_ version'
  55. [ "$(docker_ images -q | wc -l)" = '0' ]
  56. docker_ pull busybox
  57. [ "$(docker_ images -q | wc -l)" = '1' ]
  58. docker_ tag busybox "$rnamespace/busybox"
  59. docker_ push "$rnamespace/busybox"
  60. docker_ rmi busybox "$rnamespace/busybox"
  61. [ "$(docker_ images -q | wc -l)" = '0' ]
  62. docker_ pull "$rnamespace/busybox"
  63. [ "$(docker_ images -q | wc -l)" = '1' ]
  64. docker_ run --rm "$rnamespace/busybox" true