Blame
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 1 | # Docker-Shortcuts | 
| 2 | ||||
| 0225d3 | Tebby Dog | 2025-07-06 22:33:00 | 3 | Skip the fairy-tale, just give me the code already --> [Click Here](https://teb.codes/2-Code/Docker/Docker-Shortcuts#downloading-the-script)  | 
| 4 | ||||
| 91bfc3 | Tebby Dog | 2025-07-06 21:29:21 | 5 | # Mandatory warning  | 
| 6 | Rule #1 of Coding Club: NEVER run code you don't understand.  | 
|||
| 2e8587 | Tebby Dog | 2025-07-06 21:29:34 | 7 | |
| 91bfc3 | Tebby Dog | 2025-07-06 21:29:21 | 8 | Rule #2 of Coding Club: SERIOUSLY, go back and read Rule #1.  | 
| 9 | ||||
| 10 | ```python  | 
|||
| 11 | def trust_random_code_from_the_internet():  | 
|||
| 12 |     print("✨ Found a magic snippet online that promises to solve all your problems!")  | 
|||
| 13 |     print("Step 1: Copy it.")  | 
|||
| 14 |     print("Step 2: Paste it.")  | 
|||
| 15 |     print("Step 3: Watch as your toaster mines Bitcoin and emails your secrets to '[email protected]' 😱")  | 
|||
| 16 | ||||
| 17 |     print("\nLet's not do that. 💡")  | 
|||
| 18 |     print("Instead, read the code. Understand it. Test it in a safe environment.")  | 
|||
| 19 |     print("Trust, but verify. Or even better — distrust by default!")  | 
|||
| 20 | ||||
| 21 | trust_random_code_from_the_internet()  | 
|||
| 22 | ```  | 
|||
| 23 | ||||
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 24 | # Description  | 
| 25 | ||||
| 26 | 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.  | 
|||
| 27 | ||||
| f5ad62 | Tebby Dog | 2025-07-06 23:35:18 | 28 | 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 `<dockerhub_repo>/<image_name>:<date>.<counter>`).  | 
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 29 | |
| 0a4c7d | Tebby Dog | 2025-07-06 23:35:37 | 30 | # Usage  | 
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 31 | |
| 32 | 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`.  | 
|||
| 33 | ||||
| 34 | You can run the script in three different modes:  | 
|||
| 35 | ||||
| 36 | 1. **No arguments**: The script will use the directory name as both the local image name and Docker image name.  | 
|||
| 37 | ```bash  | 
|||
| 38 | dcp  | 
|||
| 39 | ```  | 
|||
| 40 | 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.  | 
|||
| 41 | ```bash  | 
|||
| 42 | dcp <DOCKER_IMAGE_NAME>  | 
|||
| 43 | ```  | 
|||
| 44 | 3. **Two arguments**: You can specify both the local image name and the Docker image name as separate command-line arguments.  | 
|||
| 45 | ```bash  | 
|||
| 46 | dcp <LOCAL_IMAGE_NAME> <DOCKER_IMAGE_NAME>  | 
|||
| 47 | ```  | 
|||
| 48 | ||||
| 49 | # Example Output  | 
|||
| 50 | ||||
| 51 | When you run the script, it will output something like this:  | 
|||
| 52 | ```  | 
|||
| 53 | Docker image built with tag: myimage:02.14.21.1  | 
|||
| f5ad62 | Tebby Dog | 2025-07-06 23:35:18 | 54 | Docker image tagged: <dockerhub_repo>/myimage:02.14.21.1  | 
| 55 | Docker image tagged: <dockerhub_repo>/myimage:latest  | 
|||
| 56 | Docker image pushed: <dockerhub_repo>/myimage:02.14.21.1  | 
|||
| 57 | Docker image pushed: <dockerhub_repo>/myimage:latest  | 
|||
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 58 | |
| 59 | Local Image Name: myimage  | 
|||
| 60 | Docker Image Name: myimage  | 
|||
| 61 | ```  | 
|||
| 62 | Note that the exact output may vary depending on your directory name and DockerHub credentials.  | 
|||
| 63 | ||||
| 64 | # Assumptions  | 
|||
| 65 | ||||
| 66 | 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.  | 
|||
| 67 | ||||
| 68 | # Downloading the Script  | 
|||
| 69 | ||||
| 70 | Create folders  | 
|||
| 659c65 | Tebby Dog | 2025-07-06 21:27:48 | 71 | |
| 72 | ```bash  | 
|||
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 73 | mkdir /opt/dcp  | 
| 74 | mkdir /opt/dcp/counters  | 
|||
| 659c65 | Tebby Dog | 2025-07-06 21:27:48 | 75 | ```  | 
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 76 | |
| 77 | You can download this script by running:  | 
|||
| 78 | ```bash  | 
|||
| 79 | curl -sSO https://github.com/tebwritescode/dcp/blob/14d5d8d8126f94e9867152339f1ee644ee9e1c1e/dcp.sh > /opt/dcp/dcp.sh && chmod +x /opt/dcp/dcp.sh  | 
|||
| 80 | ```  | 
|||
| 81 | ||||
| f5ad62 | Tebby Dog | 2025-07-06 23:35:18 | 82 | Or copy-pasta, make sure to replace the <dockerhub_repo> instances with your own fuckin' repo  | 
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 83 | |
| 84 | ```bash  | 
|||
| 85 | #!/bin/bash  | 
|||
| 86 | ||||
| 87 | # Check how many arguments were passed  | 
|||
| 88 | if [ $# -eq 0 ]; then  | 
|||
| 89 |     # No arguments passed  | 
|||
| 90 |     IMAGE_NAME=$(basename "$PWD")  | 
|||
| 91 |     DOCKER_IMAGE_NAME=$(basename "$PWD")  | 
|||
| 92 | elif [ $# -eq 1 ]; then  | 
|||
| 93 |     # One argument passed  | 
|||
| 94 |     IMAGE_NAME=$(basename "$PWD")  | 
|||
| 95 |     DOCKER_IMAGE_NAME=$1  | 
|||
| 96 | elif [ $# -eq 2 ]; then  | 
|||
| 97 |     # Two arguments passed  | 
|||
| 98 |     IMAGE_NAME=$1  | 
|||
| 99 |     DOCKER_IMAGE_NAME=$2  | 
|||
| 100 | else  | 
|||
| 101 |     echo "Error: Too many arguments passed."  | 
|||
| 102 |     echo "Usage: $0 - Use parent directory name for both local and docker image name."  | 
|||
| 103 |     echo "$0 <DOCKER_IMAGE_NAME> - Use parent directory name for local image name and use <DOCKER_IMAGE_NAME> as docker image name/"  | 
|||
| 104 |     echo "$0 <IMAGE_NAME> <DOCKER_IMAGE_NAME> - Use <IMAGE_NAME> for local image name and use <DOCKER_IMAGE_NAME> as docker image name/"  | 
|||
| 105 |     exit 1  | 
|||
| 106 | fi  | 
|||
| 107 | ||||
| 108 | # Get today's date in the format MM.DD.YY  | 
|||
| 109 | DATE=$(date +"%m.%d.%y")  | 
|||
| 110 | ||||
| 111 | # Define the file where the counter will be stored  | 
|||
| 112 | COUNTER_FILE="/opt/dcp/counters/build_counter_${DOCKER_IMAGE_NAME}_${DATE}.txt"  | 
|||
| 113 | ||||
| 114 | # Check if the counter file exists, if not, create it and set the counter to 0  | 
|||
| 115 | if [ ! -f "$COUNTER_FILE" ]; then  | 
|||
| 116 |     rm -fv build_counter_${DOCKER_IMAGE_NAME}_*.txt  | 
|||
| 117 |     echo "0" > "$COUNTER_FILE"  | 
|||
| 118 | fi  | 
|||
| 119 | ||||
| 120 | # Read the current counter value  | 
|||
| 121 | COUNTER=$(cat "$COUNTER_FILE")  | 
|||
| 122 | ||||
| 123 | # Increment the counter by 1  | 
|||
| 124 | NEW_COUNTER=$((COUNTER + 1))  | 
|||
| 125 | ||||
| 126 | # Update the counter in the file  | 
|||
| 127 | echo "$NEW_COUNTER" > "$COUNTER_FILE"  | 
|||
| 128 | ||||
| 129 | # Build the Docker image with the version tag in the format MM.DD.YY.<counter>  | 
|||
| 130 | if ! /usr/bin/docker build -t "$IMAGE_NAME":"$DATE"."$NEW_COUNTER" .; then  | 
|||
| 131 |     echo "Docker build failed."  | 
|||
| 132 |     exit 1  | 
|||
| 133 | fi  | 
|||
| 134 | ||||
| 135 | # Print the image tag for reference  | 
|||
| 136 | echo "Docker image built with tag: $IMAGE_NAME:$DATE.$NEW_COUNTER"  | 
|||
| 137 | ||||
| 138 | # Tag the image for DockerHub  | 
|||
| f5ad62 | Tebby Dog | 2025-07-06 23:35:18 | 139 | /usr/bin/docker tag "$IMAGE_NAME:$DATE.$NEW_COUNTER" <dockerhub_repo>/"$DOCKER_IMAGE_NAME:$DATE.$NEW_COUNTER"  | 
| 140 | /usr/bin/docker tag "$IMAGE_NAME:$DATE.$NEW_COUNTER" <dockerhub_repo>/"$DOCKER_IMAGE_NAME:latest"  | 
|||
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 141 | |
| 142 | # Print the image tag for reference  | 
|||
| f5ad62 | Tebby Dog | 2025-07-06 23:35:18 | 143 | echo "Docker image tagged: <dockerhub_repo>/$DOCKER_IMAGE_NAME:$DATE.$NEW_COUNTER"  | 
| 144 | echo "Docker image tagged: <dockerhub_repo>/$DOCKER_IMAGE_NAME:latest"  | 
|||
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 145 | |
| 146 | # Push the Docker image to DockerHub  | 
|||
| f5ad62 | Tebby Dog | 2025-07-06 23:35:18 | 147 | if ! /usr/bin/docker push <dockerhub_repo>/"$DOCKER_IMAGE_NAME:$DATE.$NEW_COUNTER"; then  | 
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 148 |     echo "Docker push failed for $NEW_COUNTER."  | 
| 149 |     exit 1  | 
|||
| 150 | fi  | 
|||
| 151 | ||||
| f5ad62 | Tebby Dog | 2025-07-06 23:35:18 | 152 | if ! /usr/bin/docker push <dockerhub_repo>/"$DOCKER_IMAGE_NAME:latest"; then  | 
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 153 |     echo "Docker push failed for 'latest'."  | 
| 154 |     exit 1  | 
|||
| 155 | fi  | 
|||
| 156 | ||||
| 157 | # Output the assigned values (optional)  | 
|||
| 158 | echo "Local Image Name: $IMAGE_NAME"  | 
|||
| 159 | echo "Docker Image Name: $DOCKER_IMAGE_NAME"  | 
|||
| 160 | ||||
| 161 | # Print the image push for reference  | 
|||
| f5ad62 | Tebby Dog | 2025-07-06 23:35:18 | 162 | echo "Docker image pushed: <dockerhub_repo>/$DOCKER_IMAGE_NAME:$DATE.$NEW_COUNTER"  | 
| 163 | echo "Docker image pushed: <dockerhub_repo>/$DOCKER_IMAGE_NAME:latest"  | 
|||
| 14246b | Tebby Dog | 2025-07-06 21:26:59 | 164 | ```  | 
| 165 | ||||
| 166 | # Setting up an Alias  | 
|||
| 167 | ||||
| 168 | 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`):  | 
|||
| 169 | ```bash  | 
|||
| 170 | alias dcp='/opt/dcp/dcp.sh'  | 
|||
| 171 | ```  | 
|||
| 172 | Once you've added this alias, you can simply run `dcp` instead of typing out the full script name.  | 
|||
| 173 | ||||
| 174 | # Using the Alias  | 
|||
| 175 | ||||
| 176 | To use the `dcp` alias, simply type:  | 
|||
| 177 | ```bash  | 
|||
| 178 | dcp [optional arguments]  | 
|||
| 179 | ```  | 
|||
| 180 | For example:  | 
|||
| 181 | ```bash  | 
|||
| 182 | dcp myimage latest  | 
|||
| 183 | ```  | 
|||
| f5ad62 | Tebby Dog | 2025-07-06 23:35:18 | 184 | This will build and push a Docker image with the tag `<dockerhub_repo>/myimage:latest`.  |