💡 핵심 요약 (Executive Summary)
본 가이드는 bash docker control image.sh 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.
📑 Table of Contents
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
- K8s이미지를 도커 리포지토리에서 pull
- tag 지정
- REPO (지정 harbor)에 push
Reference & Guidelines (NOTE)
인터넷이 가능하며 docker가 설치된 환경이어야 한다.
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
Reference & Guidelines (NOTE)
docker hub에서 다운로드 받은 이미지에 특정 repository를 태깅
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
Reference & Guidelines (NOTE)
특정 asis repository를 특정 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
이미지 Load 예제
bash
container_bin=docker
for file in *.tar; do
if [[ -f "$file" ]]; then
echo "Processing $file..."
$container_bin load -i "$file"
fi
done
이미지 tag 및 push 예제
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
Leave a Reply