76 lines
1.7 KiB
Bash
Executable File
76 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
set -eo pipefail
|
|
|
|
dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
|
|
|
|
image="$1"
|
|
case "${image##*/}" in
|
|
docker:*dind*)
|
|
dockerImage="$image"
|
|
registryImage='registry'
|
|
if ! docker image inspect "$registryImage" &> /dev/null; then
|
|
docker pull "$registryImage" > /dev/null
|
|
fi
|
|
;;
|
|
registry:*|registry)
|
|
registryImage="$image"
|
|
dockerImage='docker:dind'
|
|
if ! docker image inspect "$dockerImage" &> /dev/null; then
|
|
docker pull "$dockerImage" > /dev/null
|
|
fi
|
|
;;
|
|
*)
|
|
echo >&2 "error: unable to determine whether '$image' is registry or docker:dind"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
rhostname='reg.example.com'
|
|
rnamespace="${rhostname}:5000"
|
|
|
|
rcname="docker-registry-container-$RANDOM-$RANDOM"
|
|
rcid="$(
|
|
docker run -d -it \
|
|
--hostname "$rhostname" \
|
|
--name "$rcname" \
|
|
"$registryImage"
|
|
)"
|
|
trap "docker rm -vf $rcid > /dev/null" EXIT
|
|
|
|
dcname="docker-daemon-container-$RANDOM-$RANDOM"
|
|
dcid="$(
|
|
docker run -d -it \
|
|
--privileged \
|
|
--link "$rcid":"$rhostname" \
|
|
--name "$dcname" \
|
|
-e DOCKER_TLS_CERTDIR=/certs -v /certs \
|
|
"$dockerImage" \
|
|
--insecure-registry "$rnamespace"
|
|
)"
|
|
trap "docker rm -vf $rcid $dcid > /dev/null" EXIT
|
|
|
|
docker_() {
|
|
docker run --rm -i \
|
|
--link "$dcid":docker \
|
|
-e DOCKER_TLS_CERTDIR=/certs --volumes-from "$dcid:ro" \
|
|
--entrypoint docker-entrypoint.sh \
|
|
"$dockerImage" \
|
|
"$@"
|
|
}
|
|
|
|
. "$dir/../../retry.sh" --tries 30 'docker_ version'
|
|
|
|
[ "$(docker_ images -q | wc -l)" = '0' ]
|
|
docker_ pull busybox
|
|
[ "$(docker_ images -q | wc -l)" = '1' ]
|
|
|
|
docker_ tag busybox "$rnamespace/busybox"
|
|
docker_ push "$rnamespace/busybox"
|
|
|
|
docker_ rmi busybox "$rnamespace/busybox"
|
|
[ "$(docker_ images -q | wc -l)" = '0' ]
|
|
docker_ pull "$rnamespace/busybox"
|
|
[ "$(docker_ images -q | wc -l)" = '1' ]
|
|
|
|
docker_ run --rm "$rnamespace/busybox" true
|