Commit 14246b
2025-07-06 21:26:59 Tebby Dog: Init| /dev/null .. 2-code/docker-shortcuts.md | |
| @@ 0,0 1,160 @@ | |
| + | # Docker-Shortcuts |
| + | |
| + | # Description |
| + | |
| + | This script automates the process of building and pushing a Docker image to DockerHub, while incrementally tracking the version number. It uses the directory name as the default local image name, but allows for customization through command-line arguments. |
| + | |
| + | The script builds the Docker image with a version tag in the format `MM.DD.YY.<counter>`, where `<counter>` is an incremental value stored in a file. The image is then tagged with additional tags on DockerHub (`latest` and `tebwritescode/<image_name>:<date>.<counter>`). |
| + | |
| + | # Usage** |
| + | |
| + | To use this script, save it to a file (e.g., `build_and_push_docker_image.sh`) and make it executable by running `chmod +x build_and_push_docker_image.sh`. |
| + | |
| + | You can run the script in three different modes: |
| + | |
| + | 1. **No arguments**: The script will use the directory name as both the local image name and Docker image name. |
| + | ```bash |
| + | dcp |
| + | ``` |
| + | 2. **One argument**: The script will use the parent directory name for the local image name, but allow you to specify a custom Docker image name using the first command-line argument. |
| + | ```bash |
| + | dcp <DOCKER_IMAGE_NAME> |
| + | ``` |
| + | 3. **Two arguments**: You can specify both the local image name and the Docker image name as separate command-line arguments. |
| + | ```bash |
| + | dcp <LOCAL_IMAGE_NAME> <DOCKER_IMAGE_NAME> |
| + | ``` |
| + | |
| + | # Example Output |
| + | |
| + | When you run the script, it will output something like this: |
| + | ``` |
| + | Docker image built with tag: myimage:02.14.21.1 |
| + | Docker image tagged: tebwritescode/myimage:02.14.21.1 |
| + | Docker image tagged: tebwritescode/myimage:latest |
| + | Docker image pushed: tebwritescode/myimage:02.14.21.1 |
| + | Docker image pushed: tebwritescode/myimage:latest |
| + | |
| + | Local Image Name: myimage |
| + | Docker Image Name: myimage |
| + | ``` |
| + | Note that the exact output may vary depending on your directory name and DockerHub credentials. |
| + | |
| + | # Assumptions |
| + | |
| + | This script assumes you have Docker installed on your system, as well as the `docker` command in your PATH. Additionally, it requires a valid DockerHub account with access to the repository where you want to push your image. |
| + | |
| + | # Downloading the Script |
| + | |
| + | Create folders |
| + | mkdir /opt/dcp |
| + | mkdir /opt/dcp/counters |
| + | |
| + | You can download this script by running: |
| + | ```bash |
| + | curl -sSO https://github.com/tebwritescode/dcp/blob/14d5d8d8126f94e9867152339f1ee644ee9e1c1e/dcp.sh > /opt/dcp/dcp.sh && chmod +x /opt/dcp/dcp.sh |
| + | ``` |
| + | |
| + | Or copy-pasta |
| + | |
| + | ```bash |
| + | #!/bin/bash |
| + | |
| + | # Check how many arguments were passed |
| + | if [ $# -eq 0 ]; then |
| + | # No arguments passed |
| + | IMAGE_NAME=$(basename "$PWD") |
| + | DOCKER_IMAGE_NAME=$(basename "$PWD") |
| + | elif [ $# -eq 1 ]; then |
| + | # One argument passed |
| + | IMAGE_NAME=$(basename "$PWD") |
| + | DOCKER_IMAGE_NAME=$1 |
| + | elif [ $# -eq 2 ]; then |
| + | # Two arguments passed |
| + | IMAGE_NAME=$1 |
| + | DOCKER_IMAGE_NAME=$2 |
| + | else |
| + | echo "Error: Too many arguments passed." |
| + | echo "Usage: $0 - Use parent directory name for both local and docker image name." |
| + | echo "$0 <DOCKER_IMAGE_NAME> - Use parent directory name for local image name and use <DOCKER_IMAGE_NAME> as docker image name/" |
| + | echo "$0 <IMAGE_NAME> <DOCKER_IMAGE_NAME> - Use <IMAGE_NAME> for local image name and use <DOCKER_IMAGE_NAME> as docker image name/" |
| + | exit 1 |
| + | fi |
| + | |
| + | # Get today's date in the format MM.DD.YY |
| + | DATE=$(date +"%m.%d.%y") |
| + | |
| + | # Define the file where the counter will be stored |
| + | COUNTER_FILE="/opt/dcp/counters/build_counter_${DOCKER_IMAGE_NAME}_${DATE}.txt" |
| + | |
| + | # Check if the counter file exists, if not, create it and set the counter to 0 |
| + | if [ ! -f "$COUNTER_FILE" ]; then |
| + | rm -fv build_counter_${DOCKER_IMAGE_NAME}_*.txt |
| + | echo "0" > "$COUNTER_FILE" |
| + | fi |
| + | |
| + | # Read the current counter value |
| + | COUNTER=$(cat "$COUNTER_FILE") |
| + | |
| + | # Increment the counter by 1 |
| + | NEW_COUNTER=$((COUNTER + 1)) |
| + | |
| + | # Update the counter in the file |
| + | echo "$NEW_COUNTER" > "$COUNTER_FILE" |
| + | |
| + | # Build the Docker image with the version tag in the format MM.DD.YY.<counter> |
| + | if ! /usr/bin/docker build -t "$IMAGE_NAME":"$DATE"."$NEW_COUNTER" .; then |
| + | echo "Docker build failed." |
| + | exit 1 |
| + | fi |
| + | |
| + | # Print the image tag for reference |
| + | echo "Docker image built with tag: $IMAGE_NAME:$DATE.$NEW_COUNTER" |
| + | |
| + | # Tag the image for DockerHub |
| + | /usr/bin/docker tag "$IMAGE_NAME:$DATE.$NEW_COUNTER" tebwritescode/"$DOCKER_IMAGE_NAME:$DATE.$NEW_COUNTER" |
| + | /usr/bin/docker tag "$IMAGE_NAME:$DATE.$NEW_COUNTER" tebwritescode/"$DOCKER_IMAGE_NAME:latest" |
| + | |
| + | # Print the image tag for reference |
| + | echo "Docker image tagged: tebwritescode/$DOCKER_IMAGE_NAME:$DATE.$NEW_COUNTER" |
| + | echo "Docker image tagged: tebwritescode/$DOCKER_IMAGE_NAME:latest" |
| + | |
| + | # Push the Docker image to DockerHub |
| + | if ! /usr/bin/docker push tebwritescode/"$DOCKER_IMAGE_NAME:$DATE.$NEW_COUNTER"; then |
| + | echo "Docker push failed for $NEW_COUNTER." |
| + | exit 1 |
| + | fi |
| + | |
| + | if ! /usr/bin/docker push tebwritescode/"$DOCKER_IMAGE_NAME:latest"; then |
| + | echo "Docker push failed for 'latest'." |
| + | exit 1 |
| + | fi |
| + | |
| + | # Output the assigned values (optional) |
| + | echo "Local Image Name: $IMAGE_NAME" |
| + | echo "Docker Image Name: $DOCKER_IMAGE_NAME" |
| + | |
| + | # Print the image push for reference |
| + | echo "Docker image pushed: tebwritescode/$DOCKER_IMAGE_NAME:$DATE.$NEW_COUNTER" |
| + | echo "Docker image pushed: tebwritescode/$DOCKER_IMAGE_NAME:latest" |
| + | ``` |
| + | |
| + | # Setting up an Alias |
| + | |
| + | To make it easier to use this script, you can set up an alias by adding the following line to your shell configuration file (e.g., `~/.bashrc` or `~/.zshrc`): |
| + | ```bash |
| + | alias dcp='/opt/dcp/dcp.sh' |
| + | ``` |
| + | Once you've added this alias, you can simply run `dcp` instead of typing out the full script name. |
| + | |
| + | # Using the Alias |
| + | |
| + | To use the `dcp` alias, simply type: |
| + | ```bash |
| + | dcp [optional arguments] |
| + | ``` |
| + | For example: |
| + | ```bash |
| + | dcp myimage latest |
| + | ``` |
| + | This will build and push a Docker image with the tag `tebwritescode/myimage:latest`. |