Docker Image Tag, Push & Cleanup Automation

๐Ÿ’ก Docker Image Tag, Push & Cleanup Automation โ€” Executive Summary

Technical architectural analysis, practical configuration manifests, and deployment instructions for Docker Image Tag, Push & Cleanup Automation.

V5

  • image tag & push
bash
cat <<EOF >> tmp.sh
  repository=ghcr.io/myeong-han
  $(docker images | grep -Ev 'REPOSITORY' | awk '{ img = $1; sub(/.*\//, "", img); print "docker tag " $1 ":" $2 " $repository/" img ":" $2 }')
  $(docker images | grep -Ev 'REPOSITORY' | awk '{ img = $1; sub(/.*\//, "", img); print "docker push " "$repository/" img ":" $2 }')
  EOF

  chmod +x tmp.sh
  ./tmp.sh

V4

  • image pull & tag & push for needed
bash
#!/bin/bash

  #k get deployments.apps,sts -n management-system -o custom-columns='name:.metadata.name,image:.spec.template.spec.containers[].image,kind:.kind' --no-headers | awk '{print $2}' | uniq
  images="
  "
  new_repo=harbor.Enterprise Cloud.myregistry.internal.com/management

  for image in $images; do
          #docker pull $image
          i=$(echo ${image##*/} | cut -d':' -f1)
          t=$(echo $image | cut -d':' -f2 | cut -d'@' -f1)
          repo=$(echo $image | sed "s/\/${i}\:${t}//g")
          echo "repo=$repo image=$i tag=$t"

          docker tag $repo/$i:$t $new_repo/$i:$t
          docker push $new_repo/$i:$t
  done
  • load files in this dir
bash
#!/bin/bash

  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  files="
  $(find ${SCRIPT_DIR} -type f -printf '%f\n')
  "
  for file in $files; do
          docker load -i $file
  done
  • tagging
bash
old_image_fulls="$(docker images | grep latest | grep Enterprise Cloud | awk '{print $1}' | sed 's/$/\:latest/g')"
  new_repo="harbor.Enterprise Cloud.myregistry.internal.com/dev-portal"

  for old_image_full in $old_image_fulls; do
          image="$(echo $old_image_full | sed 's/harbor\.Enterprise Cloud\.myregistry.internal\.com\/infra\///g')"
          echo "docker tag $old_image_full $new_repo/$image"
          docker tag $old_image_full $new_repo/$image
          docker push $new_repo/$image
  done

V1

Image pull&pusher
  1. Pull K8s image from Docker repository
  2. Specify tag
  3. Push to REPO (designated harbor)
References and Guidelines (NOTE)

The Internet must be available and docker must be installed.

Check Archi
bash
#!/bin/bash
IMAGES=$(sudo docker images | sed '1d' | awk '{print $1 ":" $2}')

for IMAGE in $IMAGES
do
  sudo docker image inspect $IMAGE | jq ".[0].Architecture"
done
Tagging
References and Guidelines (NOTE)

Tag a specific repository on the image downloaded from docker hub

bash
#!/bin/bash
REPO=""
IMAGES=$(sudo docker images | sed '1d' | awk '{print $1 ":" $2}')

for IMAGE in $IMAGES
do
  sudo docker tag $IMAGE ${REPO}/${IMAGE}
done
References and Guidelines (NOTE)

Tagging a specific asis repository with a specific tobe repository

bash
#!/bin/bash
ASIS_REPO=""
TOBE_REPO=""
ASIS_IMAGES=$(sudo docker images | sed '1d' | grep "$ASIS_REPO" | awk '{print $1 ":" $2}')
for ASIS_IMAGE in $ASIS_IMAGES
do
  IMAGE=$(echo "$ASIS_IMAGE" | grep -v "${ASIS_REPO}/")
  sudo docker tag $ASIS_IMAGE ${TOBE_REPO}/${IMAGE}
done
Saving
bash
#!/bin/bash
REPO=""
IMAGES=$(sudo docker images | sed '1d' | grep "$REPO" | awk '{print $1 ":" $2}')
#sudo docker images | sed '1d' | grep "harbor.viola.ssis.or.kr/ssis-test" | awk '{print $1 ":" $2}' | sed 's/harbor.viola.ssis.or.kr\/ssis-test\///' | sed 's/\:/-/' | sed 's/$/.tar/'
for IMAGE in $IMAGES
do
  sudo docker save -o $(echo $IMAGE | sed "s#${REPO}/##" | sed 's/\:/-/').tar $IMAGE
done
Pull & Push
bash
#!bin/bash
REPO=harbor.Enterprise Cloud.cld/k8s
IMAGES=$( cat << EOF
{{ Load Stack for myversion }}
EOF
)

for i in $IMAGES
do
  echo "*** $i ***"
  docker pull --platform linux/amd64 $i 
  docker tag $i $REPO/$i
  docker push $REPO/$i
done
Pull & Save
bash
#!bin/bash
REPO=cmp-registry.hana.com:29143/cmp
IMAGES=$( cat << EOF
{{ Load Stack for myversion }}
EOF
)
FILE_SEQ=0
ADD=1

for i in $IMAGES
do
  FILE_SEQ=$(expr $FILE_SEQ + $ADD)
  echo "*** $i ***"
  docker pull --platform linux/amd64 $i
  docker tag $i $REPO/$i
  docker save -o $FILE_SEQ.tar $i
done
Stack
k8s_v1.24.6
bash
docker.io/library/busybox:latest
docker.io/calico/cni:v3.23.3
docker.io/calico/kube-controllers:v3.23.3
docker.io/calico/node:v3.23.3
docker.io/calico/pod2daemon-flexvol:v3.23.3
docker.io/library/nginx:1.23.0-alpine
k8s.gcr.io/coredns/coredns:v1.8.6
k8s.gcr.io/etcd:3.5.3-0
k8s.gcr.io/cpa/cluster-proportional-autoscaler-amd64:1.8.5
k8s.gcr.io/dns/k8s-dns-node-cache:1.21.1
k8s.gcr.io/kube-apiserver:v1.24.6
k8s.gcr.io/kube-controller-manager:v1.24.6
k8s.gcr.io/kube-proxy:v1.24.6
k8s.gcr.io/kube-scheduler:v1.24.6
k8s.gcr.io/pause:3.6
k8s.gcr.io/pause:3.7
k8s_v1.23.7
bash
docker.io/calico/node:v3.22.3
docker.io/calico/kube-controllers:v3.22.3
docker.io/library/busybox:latest
k8s.gcr.io/coredns:v1.8.6
k8s.gcr.io/etcd:3.5.3-0
k8s.gcr.io/kube-apiserver:v1.23.7
k8s.gcr.io/kube-controller-manager:v1.23.7
k8s.gcr.io/kube-proxy:v1.23.7
k8s.gcr.io/kube-scheduler:v1.23.7
k8s.gcr.io/pause:3.6
k8s.gcr.io/pause:3.7
k8s.gcr.io/cpa/cluster-proportional-autoscaler-amd64:1.8.5

V2

rmi.sh
bash
#!bin/bash
images=($(docker images | sed '1d' | awk '{print $1 ":" $2}'))

for image in "${images[@]}" do
	docker rmi $image
done
rmiv2.sh
bash
for image in $(docker images -q); do
  docker rmi $image  # โ† ์ŠคํŽ˜์ด์Šค ๋‘ ๊ฐœ or ๋„ค ๊ฐœ๋กœ ๋“ค์—ฌ์“ฐ๊ธฐ
done
container image deploy
bash
#!/bin/bash

## Input Parameters
#MODULES=(admin-api admin-app dashboard-api dashboard-app openstack-api openstack-app service-catalog-engine cloud-service-broker)
MODULES=(openstack-api)
TAG=v3.0.3.41

ASIS_REGISTRY=harbor.Enterprise Cloud.cld:5000/prod
TOBE_REGISTRY=registry.myregistry.internal.com:443/cmp-portal

PWD_PATH=$(pwd)

SSH_ADDR=sychoi@<PUBLIC_IP_REDACTED>
SSH_PORT=7522
SSH_PATH=html/cmp

CONTAINER_BINARY=nerdctl

rm -rf $PWD_PATH/v3.*
mkdir $PWD_PATH/$TAG
ssh -p$SSH_PORT $SSH_ADDR mkdir $SSH_PATH/$TAG

for MODULE in ${MODULES[@]};
do
    echo "==================$MODULE IMAGE PULLING=================="
    $CONTAINER_BINARY pull $ASIS_REGISTRY/$MODULE:$TAG
    echo "==================$MODULE IMAGE TAGGING=================="
    $CONTAINER_BINARY tag $ASIS_REGISTRY/$MODULE:$TAG $TOBE_REGISTRY/$MODULE:$TAG
    echo "$MODULE image registry changed $ASIS_REGISTRY/$MODULE:$TAG to $TOBE_REGISTRY/$MODULE:$TAG"
    echo "==================$MODULE IMAGE SAVING=================="
    $CONTAINER_BINARY save -o $PWD_PATH/$TAG/$MODULE.tar $TOBE_REGISTRY/$MODULE:$TAG
    echo "image saved $PWD_PATH/$TAG/$MODULE.tar"
    echo "==================$MODULE IMAGE SENDING=================="
    ssh -p$SSH_PORT $SSH_ADDR rm -rf $SSH_PATH/$TAG/$MODULE.tar
    scp -P$SSH_PORT $PWD_PATH/$TAG/$MODULE.tar $SSH_ADDR:$SSH_PATH/$TAG/
    ssh -p$SSH_PORT $SSH_ADDR ls $SSH_PATH/$TAG/ -al
done

V3

Image Load Example
bash
container_bin=docker
for file in *.tar; do
    if [[ -f "$file" ]]; then
        echo "Processing $file..."
        $container_bin load -i "$file"
    fi
done
Image tag and push example
bash
container_bin=docker
asis_repository=harbor.myregistry.internal.com:31443
asis_project=stg-portal
tobe_repository={{ input }}
tobe_project={{ input }}
ori_images=$(docker images | grep "$asis_repository/$asis_project" | awk '{ print $1 ":" $2 }' | sort | uniq)
images=($(echo $ori_images | sed "s/$asis_repository\/$asis_project\///g"))

for im in ${images[@]}; do
		echo "Processing image: $im"
		$container_bin tag $asis_repository/$asis_project/$im $tobe_repository/$tobe_project/$im
		$container_bin push $tobe_repository/$tobe_project/$im
done

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *