[Docker] Bash Shell Script๋ฅผ ์ด์šฉํ•œ Docker Backup

2023. 6. 14. 13:37ใ†System ์ž‘์—…์‹ค/Docker

728x90
๋ฐ˜์‘ํ˜•

 

 




 

 

๋ฆฌ๋ˆ…์Šค ์ปค๋งจ๋“œ๋ผ์ธ ์‰˜ ์Šคํฌ๋ฆฝํŠธ ๋ฐ”์ด๋ธ”

COUPANG

www.coupang.com

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

 

 

 

 

 

๐Ÿš€ Docker Container Backup

    ๐Ÿ”ฝ ๊ฐœ์š”

        ๐Ÿ“ฆ ์†Œ๊ฐœ

์ด๋ฒˆ์— ํ•ด ๋ณผ ์ž‘์—…์€ Docker Container๋ฅผ tar File๋กœ ๋งŒ๋“ค๊ณ , Backup ํ•˜๋Š” ์ž‘์—…์„ ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”.
์ด ์ž‘์—…์€ ์ด ๊ณณ์—์„œ ์ž‘์—…ํ–ˆ๋˜ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ์ง„ํ–‰์ด ๋˜๋ฉฐ, ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด Shell Script๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ๊ฑฐ์—์š”.

 

[Docker] Container ๋‹ค๋ฅธ System์œผ๋กœ ์˜ฎ๊ธฐ๊ธฐ

๋„์ปค ๊ต๊ณผ์„œ:์„ค์น˜๋ถ€ํ„ฐ ์‹ค์ „ ์šด์˜ ํˆฌ์ž…๊นŒ์ง€ ํ•œ ๊ถŒ์— ๋‹ด์•˜๋‹ค! COUPANG www.coupang.com "์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค." ๐Ÿš€ [Docker] Container ๋‹ค๋ฅธ

junyharang.tistory.com

 

Linux์˜ Shell Script๋Š” ๋ฆฌ๋ˆ…์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด์—์š”.

๊ทธ๋ ‡๋‹ค๋ฉด Shell์ด ๋ฌด์—‡์ผ๊นŒ์š”?

Shell์€ ์šด์˜์ฒด์ œ์—์„œ ์ด์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด๋ฅผ ์ฝ๊ณ , ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ด์ง„๋ฒ•์œผ๋กœ ํ•ด์„ํ•˜์—ฌ ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์ฃผ๋Š” ๊ฒƒ์ด์—์š”.
์ฆ‰, ์šด์˜์ฒด์ œ์˜ ์ปค๋„๊ณผ ์ด์šฉ์ž๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ช…๋ น์–ด ํ•ด์„๊ธฐ์—์š”.

๋ฆฌ๋ˆ…์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‰˜ ์ข…๋ฅ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์•„์š”.

1. Bash: Bourne-Again Shell (Prompt: #, ๊ฒฝ๋กœ: /bin/bash) ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉ.
2. sh : Bourne Shell (Prompt: $, ๊ฒฝ๋กœ: /bin/sh)
3. csh: C Shell (Prompt: %, ๊ฒฝ๋กœ: /bin/csh)
4. ksh: Kron Shell(Prompt: $, ๊ฒฝ๋กœ: /bin/ksh)
5. tcsh: TENEX C Shell (Prompt: >, ๊ฒฝ๋กœ: /bin/tcsh)

์‰˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ์‰˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋“ค์˜ ์กฐํ•ฉ์„ ๋ชจ์•„์„œ ๋งŒ๋“  Batch(๋ฐฐ์น˜) File์„ ๋งํ•ด์š”.
์ฆ‰, ์šด์˜์ฒด์ œ์˜ ์‰˜์„ ์ด์šฉํ•˜์—ฌ ํ•œ์ค„ ์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์œผ๋ฉด์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ์‹œ์ผœ์ฃผ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌถ์–ด์ง„ ๋ช…๋ น์–ด ์กฐํ•ฉ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ๋ฐ˜๋ณต์ ์ธ ๋ช…๋ น์–ด๋ฅผ ๋‹จ์ผ ๋ช…๋ น์–ด๋กœ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ค„ ์ˆ˜ ์žˆ์–ด์š”.

 

 

 

    ๐Ÿ”ฝ Docker Backup

        ๐Ÿ“ฆ Shell Script ๋งŒ๋“ค๊ธฐ

๋ณธ๊ฒฉ์ ์œผ๋กœ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ๊ฒŒ์š”.

#!/bin/bash
NOW=$(date +"%y-%m-%d %T")
echo "[$NOW] Gitea Docker Container BackUp ์ž‘์—…์„ ์‹œ์ž‘ ํ•ฉ๋‹ˆ๋‹ค." >> /var/log/docker/backup/command/junyss-gitea-backup.log 2>&1
echo "[$NOW] ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ๋  ๋‚ด์šฉ์„ ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค." >> /var/log/docker/backup/command/junyss-gitea-backup.log 2>&1
# ๋ฐฑ์—… ์ €์žฅ๋  ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ
BACKUP_DIR="/backup/docker/junyss-gitea"

# ๋ฐฑ์—… ํŒŒ์ผ์— ์‚ฌ์šฉ๋  ๋ฐฑ์—… ๋‚ ์งœ
DATE=$(date +%Y%m%d%H%M)

# Docker Container ์ด๋ฆ„
CONTAINER_NAME="junyss-gitea"

# Docker Image ์ด๋ฆ„
DOCKER_IMAGE_NAME="junyss/$DATE-junyss-gitea"

# Back Up ์‹œ์ž‘
echo "[$NOW] Docker Container Back Up ์ž‘์—…์„ ์‹œ์ž‘ ํ•ฉ๋‹ˆ๋‹ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
echo "[$NOW] ์ €์žฅํ•  Directory๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ• ๊ฒŒ์š”." >> /var/log/docker/backup/command/junyss-gitea-backup.log 2>&1

if [ -d "$BACKUP_DIR" ]; then
        echo "[$NOW] Directory๊ฐ€ ์กด์žฌ ํ•ฉ๋‹ˆ๋‹ค" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
        echo "[$NOW] Directory๊ฐ€ ์กด์žฌ ํ•˜์ง€ ์•Š์•„ ์ƒ์„ฑ ํ•ฉ๋‹ˆ๋‹ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
        mkdir -p /backup/docker/junyss-gitea

        if [ $? != 0 ]; then
                echo "[$NOW] Backup File ์ €์žฅํ•  Directory ์ƒ์„ฑ ์‹คํŒจ (์‹คํŒจ ์ด์œ  : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
        else
                echo "[$NOW] Backup File ์ €์žฅํ•  Directory ์ƒ์„ฑ ์„ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
        fi

        echo "[$NOW] Directory ๊ถŒํ•œ์„ ์„ค์ • ํ•ฉ๋‹ˆ๋‹ค." >> /var/log/docker/backup/command/junyss-gitea-backup.log 2>&1
        chmod -R 755 /backup/docker/junyss-gitea
  
        if [ $? != 0 ]; then
                echo "[$NOW] Backup File ์ €์žฅํ•  Directory ๊ถŒํ•œ ์„ค์ • ์‹คํŒจ (์‹คํŒจ ์ด์œ  : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
        else
                echo "[$NOW] Backup File ์ €์žฅํ•  Directory ๊ถŒํ•œ ์„ค์ • ์„ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
        fi
fi

echo "[$NOW] ๊ตฌ๋™์ค‘์ธ Container $CONTAINER_NAME์„ ์ค‘์ง€ ํ•ฉ๋‹ˆ๋‹ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
docker stop $CONTAINER_NAME

if [ $? != 0 ]; then
        echo "[$NOW] ๊ตฌ๋™์ค‘์ธ Container $CONTAINER_NAME์„ ์ค‘์ง€ ์‹คํŒจ (์‹คํŒจ ์ด์œ  : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
        echo "[$NOW] ๊ตฌ๋™์ค‘์ธ Container $CONTAINER_NAME์„ ์ค‘์ง€ ์„ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
fi

echo "[$NOW] Docker Container์˜ ํ˜„์žฌ ์ƒํƒœ์™€ Data๋ฅผ Docker Image๋กœ ์ €์žฅ ํ•ฉ๋‹ˆ๋‹ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
docker commit $CONTAINER_NAME junyss/$DATE-$CONTAINER_NAME

if [ $? != 0 ]; then
        echo "[$NOW] ๊ตฌ๋™์ค‘์ธ Container $CONTAINER_NAME์„ ์ค‘์ง€ ์‹คํŒจ (์‹คํŒจ ์ด์œ  : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
        echo "[$NOW] ๊ตฌ๋™์ค‘์ธ Container $CONTAINER_NAME์„ ์ค‘์ง€ ์„ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
fi

echo "[$NOW] Docker Container ํ˜„์žฌ ์ƒํƒœ์™€ Data๋ฅผ tar File๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
docker save -o $BACKUP_DIR/[$NOW]$CONTAINER_NAME.tar $DOCKER_IMAGE_NAME

if [ $? != 0 ]; then
        echo "[$NOW] Docker Container ํ˜„์žฌ ์ƒํƒœ์™€ Data๋ฅผ tar File ๋งŒ๋“ค๊ธฐ ์‹คํŒจ (์‹คํŒจ ์ด์œ  : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
        echo "[$NOW] Docker Container ํ˜„์žฌ ์ƒํƒœ์™€ Data๋ฅผ tar File ๋งŒ๋“ค๊ธฐ ์„ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
fi

echo "[$NOW] ๊ธฐ์กด Container๋ฅผ ๋‹ค์‹œ ๊ธฐ๋™ ํ•ฉ๋‹ˆ๋‹ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
docker restart $CONTAINER_NAME

if [ $? != 0 ]; then
        echo "[$NOW] ๊ธฐ์กด Container๋ฅผ ๋‹ค์‹œ ๊ธฐ๋™ ์‹คํŒจ (์‹คํŒจ ์ด์œ  : $?)" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
else
        echo "[$NOW] ๊ธฐ์กด Container๋ฅผ ๋‹ค์‹œ ๊ธฐ๋™ ์„ฑ๊ณต" >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
fi

echo "[$NOW] $CONTAINER_NAME Docker Back Up์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค." >> /var/log/docker/backup/command/[$DATE]junyss-gitea-backup.log 2>&1
728x90


์ฃผ๋‹ˆ๊ฐ€ ๋งŒ๋“  Docker Back up ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ์œ„์™€ ๊ฐ™์•„์š”.



์ตœ์ดˆ ์ฒซ๋ฒˆ์งธ ์ค„์„ Bash๋ฅผ ์ด์šฉํ•œ ์Šคํฌ๋ฆฝํŠธ ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๋Š” ๋ถ€๋ถ„์ด์—์š”.
์ด ๋ถ€๋ถ„์€ ๋ฐ˜๋“œ์‹œ ๋ช…์‹œํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋‘๋ฒˆ์งธ ์ค„์—๋Š” Log์— ์ถœ๋ ฅ๋  Date ๊ฐ’์„ NOW ๋ณ€์ˆ˜์— ๋„ฃ์–ด์ค€ ๊ฑฐ์—์š”.
์œ„์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์“ฐ๊ฒŒ ๋˜๋ฉด [yyyy-mm-dd HH:MM:SS] ํ˜•์‹์˜ ์ผ์‹œ๊ฐ’์ด NOW์— ์ €์žฅ๋˜๊ฒŒ ๋˜์š”.

echo ๋ช…๋ น์–ด๋Š” ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅํ•˜๋ผ๋Š” ์˜๋ฏธ์ธ๋ฐ,
์ž๋ฐ”๋กœ ๋”ฐ์ง€๋ฉด System.out.print ๊ทธ๋ฆฌ๊ณ , ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ์—๋Š” console.log์™€ ๊ฐ™์€ ์˜๋ฏธ์—์š”.

์ด๋ ‡๊ฒŒ ํ•ด์„œ NOW ๋ณ€์ˆ˜์— ๋‹ด๊ธด ์ผ์‹œ๋ฅผ ์ถ•๋ ฅํ•˜๊ณ , ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์—ˆ์–ด์š”.

>>์˜ ์˜๋ฏธ๋Š” Append์˜ ์˜๋ฏธ๋กœ >๋กœ๋งŒ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ์กด ๊ฐ’์„ ๋‹ค ์ง€์šฐ๊ณ , ์ƒˆ๋กœ์šด ๊ฐ’๋งŒ ๋ฎ์–ด์“ฐ๋Š” ํ˜•์‹์œผ๋กœ ์ž…๋ ฅ์ด ๋˜๋Š”๋ฐ,
>> ์ด๋ ‡๊ฒŒ ํ‘œ์‹œ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ณ„์† ๋‚ด์šฉ์ด ์ถ”๊ฐ€๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ข€ ๋” ์ž์„ธํžˆ ์ด์•ผ๊ธฐ ํ•ด ๋ณด์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์š”.

  • > : ๋ช…๋ น์–ด ๋’ค์— ๋‚˜์˜ค๋Š” File์— ์“ธ ๋•Œ, ์‚ฌ์šฉ - Write or Overwrite)
  • >> : ๋ช…๋ น์–ด ๋’ค์— ๋‚˜์˜ค๋Š” File์— ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ (Append)

 

๊ณ„์† ํ•ด์„œ /var/log/docker/backup/command/junyss-gitea-backup.log์˜ ์˜๋ฏธ๋Š” ํ•ด๋‹น echo์—์„œ ์ถœ๋ ฅ๋œ ๋‚ด์šฉ์„ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์— junyss-gitea-backup.log๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— ํ•ด๋‹น ๋‚ด์šฉ์„ ์ถ”๊ฐ€ ํ•˜๋ผ๋Š” ์˜๋ฏธ์—์š”.

2>&1์˜ ์˜๋ฏธ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

์ด๊ฒƒ์€ Standard Error๋ฅผ Standard Output์œผ๋กœ Redirection ํ•˜๋ผ๋Š” ๋ช…๋ น์–ด์—์š”.

๋ณดํ†ต ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ™”๋ฉด์— ํ•ด๋‹น Message๋ฅผ ํ‘œ์‹œํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฝ๊ณ ๋ฅผ ์ฃผ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ ๋™์ž‘์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ์žฌ์ง€์ • ํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ์„ ์‚ฌ์šฉ์ž ์ž„์˜๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฑธ ํ‘œ์ค€ ์—๋Ÿฌ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  ์žˆ์–ด์š”.

์ฆ‰, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘์„ ๋ฉˆ์ถ”๊ฑฐ๋‚˜, ๊บผ์ง€๊ฒŒ ํ•˜์ง€ ๋ง๊ณ , ๋Œ€์‹  ์—๋Ÿฌ ๋‚ด์šฉ์„ ํ‘œ์ค€ ์ถœ๋ ฅ ๋™์ž‘์œผ๋กœ ํ–‰๋™ํ•˜๊ฒŒ ํ•˜์—ฌ ๋ช…๋ น์–ด ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด๋„ ํ™”๋ฉด์— ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅํ•˜์ง€ ๋ง๊ณ , Log File์— ์ž‘์„ฑํ•ด๋ผ๋ผ๋Š” ์˜๋ฏธ์—์š”.

์ฃผ๋‹ˆ๋Š” ๊ฒฐ๊ตญ ํ•ด๋‹น Log File์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์ด๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜์ง€ ๋ง๊ณ , Log File์— ์“ฐ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•ด ์ค€ ๊ฑฐ์—์š”.


6๋ฒˆ์งธ ์ค„์€ Backup ๋œ File์ด ์ €์žฅ๋  Directory ๊ฒฝ๋กœ๋ฅผ BACKUP_DIR ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด์•„ ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€์ˆ˜๋“ค์— ํ•„์š”ํ•œ ๊ฐ’์„ ๋จผ์ € ์„ ์–ธํ•ด์ฃผ์—ˆ์–ด์š”.


21๋ฒˆ์งธ if๋ฌธ์€ -d ์ฆ‰, Directory๋ฅผ ์˜๋ฏธํ•˜๋Š”๋ฐ, ์œ„์—์„œ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•œ BACKUP_DIR(/backup/docker/junyss-gitea)๊ฐ€ ์กด์žฌํ•˜๋Š”๊ฐ€?๋ฅผ ๋ฌป๊ณ  ์žˆ์–ด์š”.

๊ทธ๋ž˜์„œ 22๋ฒˆ์งธ ์ค„์—๋Š” ์กด์žฌ ํ•œ๋‹ค๋ฉด ์กด์žฌํ•˜๋Š” ๋‚ด์šฉ์„ Log File์— ์ž‘์„ฑํ•˜๊ฒŒ ํ•ด ์ฃผ์—ˆ๊ณ , 23๋ฒˆ์งธ else๋ฌธ ์•ˆ์— 24 ~ 40๋ฒˆ์งธ๋Š” Directory๊ฐ€ ์—†์„ ๋•Œ, ํ•ด์•ผ ํ•˜๋Š” ์ผ์„ ๋ช…๋ นํ•ด ์ฃผ์—ˆ์–ด์š”.

์ตœ์ดˆ 25๋ฒˆ์งธ ์ค„์— ํ•ด๋‹น Directory๊ฐ€ ์—†์œผ๋‹ˆ mkdir ๋ช…๋ น์–ด๋กœ ํ•ด๋‹น Directory๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์–ด์š”.

๊ทธ๋Ÿฐ ๋’ค 27๋ฒˆ์งธ ์ค„์— if ๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹น ๋ช…๋ น์–ด๊ฐ€ ์ž˜ ์‹คํ–‰ ๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์žˆ์–ด์š”.

$?๋Š” ์œ„์— ๋ช…๋ น์–ด ์ข…๋ฃŒ ์ƒํƒœ(exit status)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน์ˆ˜ ๋ณ€์ˆ˜์—์š”. ์ด์ „ ๋ช…๋ น์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด 0๊ฐ’์„ ๊ฐ€์ง€๊ณ , ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ต๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ช…๋ น์„ ์‹คํ–‰, ์ œ์–ด์˜ ํ๋ฆ„์„ ๊ฒฐ์ •ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•ด์š”.

๊ทธ๋ž˜์„œ If๋ฌธ์—์„œ 0์ด ์•„๋‹ˆ๋ผ๋ฉด mkdir ์ฆ‰, Directory ์ƒ์„ฑ์„ ์‹คํŒจํ•œ ๊ฑฐ๊ณ , ์™œ? ์‹คํŒจ ํ–ˆ๋Š”์ง€๋ฅผ Log์— ๋‚จ๊ฒจ ์ฃผ๋„๋ก ํ•˜์˜€์–ด์š”.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ else๋ฌธ์„ ํ†ตํ•ด ์„ฑ๊ณตํ–ˆ์–ด๋„ ์„ฑ๊ณต ๋‚ด์šฉ์„ ๋‚จ๊ธฐ๋„๋ก ํ•˜์˜€์–ด์š”.

๋ฆฌ๋ˆ…์Šค ์‰˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ if๋ฌธ์€ ๋์ด ๋‚˜๊ฒŒ ๋˜๋ฉด ์ž๋ฐ”์—์„œ ;(์„ธ๋ฏธ ์ฝœ๋ก )์„ ์ฐ์–ด์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ fi๋กœ ๋งˆ๋ฌด๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•ด์š”.

๊ทธ๋ฆฌ๊ณ  34๋ฒˆ์งธ ์ค„์—๋Š” chmod ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ•ด๋‹น Directory์˜ ๊ถŒํ•œ์„ ์„ค์ •ํ•ด ์ฃผ๋„๋ก ํ•˜์˜€์–ด์š”.


docker stop $CONTAINER_NAME


์ตœ์ดˆ Container๋ฅผ Backup ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ๋™์ค‘์ธ Container๋ฅผ ์ค‘์ง€ ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•ด์š”.


docker commit $CONTAINER_NAME junyss/$DATE-$CONTAINER_NAME


๊ทธ๋Ÿฐ ๋’ค docker commit ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Container์˜ ํ˜„์žฌ ์ƒํƒœ์™€ Data๋ฅผ Docker Image๋กœ ์ €์žฅํ•ด ์ฃผ๋„๋ก ํ•˜์˜€์–ด์š”.
์ฐธ๊ณ ๋กœ Directory Mapping ๋“ฑ ์ถ”๊ฐ€ ์„ค์ • ์‚ฌํ•ญ์ด ์žˆ๋Š” Container๋Š” ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ๋” ํ•„์š”ํ•ด์š”. 


docker save -o $BACKUP_DIR/[$NOW]$CONTAINER_NAME.tar $DOCKER_IMAGE_NAME


์ด ๋ถ€๋ถ„์—์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ Container๋ฅผ tar File๋กœ ์••์ถ•ํ•ด ์ฃผ๊ฒŒ ๋˜์š”. -o ๋’ค์— ์••์ถ•๋  File ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๊ณ , ํ•œ ์นธ์„ ๋„๊ณ , ์œ„์—์„œ ์ €์žฅํ•œ Docker Image ์ด๋ฆ„์„ ์ž‘์„ฑํ•ด ์ฃผ๋ฉด ๋œ๋‹ต๋‹ˆ๋‹ค.


Backup์ด ์‹คํŒจํ–ˆ๊ฑด ์„ฑ๊ณตํ–ˆ๊ฑด ์–ด์จ‹๋“  Docker๋Š” ๋‹ค์‹œ ๊ธฐ๋™๋˜์–ด์•ผ ํ•ด์š”.

๊ทธ๋ž˜์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ธฐ์กด Container๋ฅผ ๊ธฐ๋™ ์‹œ์ผœ ์ค๋‹ˆ๋‹ค.

docker restart $CONTAINER_NAME


์ž‘์„ฑ์ด ์™„๋ฃŒ ๋˜์—ˆ์œผ๋ฉด :wq๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋‚˜์™€ ์ค๋‹ˆ๋‹ค.

 

 

 

 

    ๐Ÿ”ฝ Scheduling

        ๐Ÿ“ฆ crontab ์‚ฌ์šฉํ•˜๊ธฐ

์œ„์™€ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ๋งŒ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋ฐฑ์—…์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋งˆ๋‹ค ์ฃผ๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์— ์ ‘์†ํ•ด์„œ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ท€์ฐฎ์€ ์ผ์ด ๋ฐœ์ƒํ•  ๊ฑฐ์—์š”.

์ด๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ctontab์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

crontab -l

๋ฐ˜์‘ํ˜•


์ฃผ๋‹ˆ๋Š” ์œ„์™€ ๊ฐ™์ด crontab์„ ์ž‘์„ฑํ•ด ์ฃผ์—ˆ์–ด์š”.
crontab์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” crontab -e ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ๋ฉด ๋˜์š”.


๐Ÿ’ก Crontab

Crontab ๊ธฐ๋ณธ ๋ช…๋ น์–ด

crontab -e

Crontab ์„ค์ •


crontab -l

Crontab ๋‚ด์šฉ ํ™•์ธ 


crontab -r


Crontab ์‚ญ์ œ


์ฃผ๊ธฐ ์„ค์ •

        *                      *                *             *              *
๋ถ„(0-59)  ์‹œ๊ฐ„(0-23) ์ผ(1-31) ์›”(1-12) ์š”์ผ(0-7)


๋งค๋ถ„ test.sh ์‹คํ–‰

* * * * * /home/test.sh



ํŠน์ • ์‹œ๊ฐ„ ์‹คํ–‰
 - ๋งค์ฃผ ๊ธˆ์š”์ผ ์˜ค์ „ 05์‹œ 45๋ถ„ test.sh ์‹คํ–‰

45 5 * * 5 /home/test.sh


๋ฐ˜๋ณต ์‹คํ–‰
 - ๋งค์ผ ๋งค์‹œ 0๋ถ„, 20๋ถ„, 40๋ถ„ ๋งˆ๋‹ค test.sh ์‹คํ–‰

0,20,40 * * * * /home/test.sh


๋ฒ”์œ„ ์‹คํ–‰
 - ๋งค์ผ 01์‹œ 00๋ถ„ ๋ถ€ํ„ฐ 30๋ถ„๊นŒ์ง€ ๋งค ๋ถ„ test.sh ์‹คํ–‰

0-30 1 * * * /home/test.shโ€‹

 

๊ฐ„๊ฒฉ ์‹คํ–‰
 - ๋งค 10๋ถ„๋งˆ๋‹ค test.sh ์‹คํ–‰
*/10 * * * * /home/test.shโ€‹

 

๋ณต์žกํ•œ ์˜ˆ์ œ
 - 5์ผ์—์„œ 6์ผ๊นŒ์ง€ 2์‹œ, 3์‹œ, 4์‹œ์— ๋งค 10๋ถ„๋งˆ๋‹ค test.sh ์‹คํ–‰
*/10 2,3,4, 5-6 * * /home/test.shโ€‹


์ฃผ๋‹ˆ๊ฐ€ ์ž…๋ ฅํ•ด ์ค€ ๊ฒƒ์€ ๋งค์ผ ์ž์ •์— backup ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋™์ž‘ ์‹œ์ผœ์„œ ๋ฐฑ์—…์„ ํ•˜๊ณ , ํ•ด๋‹น ์ฒ˜๋ฆฌ ๋‚ด์šฉ์„ /var/log/docker/backup/cron/junyss-gitea-bakcup-$(date +%Y%m%d%H%M).log
์ด ๊ณณ์— Append ํ•˜์—ฌ Log๋กœ ๋‚จ๊ฒจ๋ผ! ๋ผ๊ณ  ๋ฆฌ๋ˆ…์Šค์—๊ฒŒ ๋ช…๋ นํ•ด ์ค€ ๊ฑฐ๋ž๋‹ˆ๋‹ค.

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•