|
|
|
#!/bin/bash
|
|
|
|
#
|
|
|
|
# This script will build the docker image and push it to a specified Docker registry.
|
|
|
|
#
|
|
|
|
# Usage: buildAndPush.sh imageName [registry]
|
|
|
|
#
|
|
|
|
# Docker image names should look like "username/appname" and must be all lower case.
|
|
|
|
# If pushing to a local registry, specify it as "localhost:5000/username/appname".
|
|
|
|
# If no registry is provided, it defaults to Docker Hub.
|
|
|
|
|
|
|
|
IMAGE_NAME=$1
|
|
|
|
REGISTRY=${2:-"docker.io"} # 默认使用 docker.io (Docker Hub),如果指定 registry 则使用指定的
|
|
|
|
|
|
|
|
if [ -z "$IMAGE_NAME" ]; then
|
|
|
|
echo "Error: Image name not provided"
|
|
|
|
echo "Usage: buildAndPush.sh imageName [registry]"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Using $IMAGE_NAME as the image name"
|
|
|
|
echo "Using $REGISTRY as the registry"
|
|
|
|
|
|
|
|
# Build the Docker image
|
|
|
|
BUILD_LOG=$(mktemp)
|
|
|
|
docker build --progress=plain -t $IMAGE_NAME . > $BUILD_LOG 2>&1
|
|
|
|
BUILD_EXIT_CODE=$?
|
|
|
|
|
|
|
|
if [ $BUILD_EXIT_CODE -ne 0 ]; then
|
|
|
|
echo "Docker build failed with exit code $BUILD_EXIT_CODE"
|
|
|
|
echo "Build log:"
|
|
|
|
cat $BUILD_LOG
|
|
|
|
rm $BUILD_LOG
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
rm $BUILD_LOG
|
|
|
|
|
|
|
|
# Tag the image for the local registry
|
|
|
|
if [ "$REGISTRY" != "docker.io" ]; then
|
|
|
|
FULL_IMAGE_NAME="$REGISTRY/$IMAGE_NAME"
|
|
|
|
docker tag $IMAGE_NAME $FULL_IMAGE_NAME
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Docker tagging failed"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
IMAGE_NAME="$FULL_IMAGE_NAME"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Push the Docker image
|
|
|
|
docker push $IMAGE_NAME
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Docker push failed"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Docker image successfully pushed to $IMAGE_NAME"
|