[Shell Script] Bash Shell Script๋ฅผ ์ด์šฉํ•œ Docker ์ž๋™ ๊ธฐ๋™

2023. 6. 14. 22:24ใ†System ์ž‘์—…์‹ค/LINUX

728x90
๋ฐ˜์‘ํ˜•

 

 

 




 

 

 

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

COUPANG

www.coupang.com

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

 

 

 

 

 

 

 

๐Ÿš€ Docker ์ž๋™ ๊ธฐ๋™๋˜๊ฒŒ ๋งŒ๋“ค๊ธฐ

    ๐Ÿ”ฝ ๊ฐœ์š”

        ๐Ÿ“ฆ ์†Œ๊ฐœ

์ฃผ๋‹ˆ๊ฐ€ ํ˜„์žฌ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” ํŠน์ • ์„œ๋ฒ„์— Jenkins๋ฅผ Docker๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•ด๋†จ๋Š”๋ฐ, Jenkins๊ฐ€ Host Linux๊ฐ€ ์žฌ ๋ถ€ํŒ…๋˜๋ฉด ์•Œ์•„์„œ ์˜ฌ๋ผ์˜ค์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋˜์—ˆ์–ด์š”.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์žฌ ๋ถ€ํŒ…์ด ๋˜๋ฉด ์ž๋™์œผ๋กœ ๊ธฐ๋™ ๋˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด๋ ค๊ณ  ํ•ด์š”.

 

 

 

    ๐Ÿ”ฝ Shell Script

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

#!/bin/bash

# ๋ช…๋ น์–ด ์‹คํŒจ ์‹œ ๋ฐ”๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‚˜๊ฐ€๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด
set -e

NOW=$(date +"%y-%m-%d %T")
DATE=$(date +%Y%m%d%H%M)

LOG_DIR="/var/log/docker/init/run"

if [ -d "$LOG_DIR" ];
then
         echo "[$NOW] Directory๊ฐ€ ์กด์žฌ ํ•ฉ๋‹ˆ๋‹ค" >> $LOG_DIR/[$DATE]container-run.log 2>&1
 else
         mkdir -p $LOG_DIR

         if [ $? != 0 ];
         then
                 echo "[$NOW] Log ์ €์žฅ์„ ์œ„ํ•œ Directory ๋งŒ๋“ค๊ธฐ ์‹คํŒจ ํ•˜์˜€์Šต๋‹ˆ๋‹ค."
                 exit 1
         else
                 echo "[$NOW] Directory๊ฐ€ ์กด์žฌ ํ•˜์ง€ ์•Š์•„ ์ƒ์„ฑ ํ•˜์˜€์Šต๋‹ˆ๋‹ค." >> $LOG_DIR/[$DATE]container-run.log 2>&1
         fi
fi

echo "[$NOW] Docker Container Run Status Check & Auto Run Job Start" >> $LOG_DIR/[$DATE]container-run.log 2>&1
echo "[$NOW] First Step. Check Docker Container run status" >> $LOG_DIR/[$DATE]container-run.log 2>&1

status=$(docker ps --filter "status=exited")
EXITED_CONTAINER_NAME=$(docker ps --filter "status=exited" --format "{{.Names}}")

echo "[$NOW] Seccond Step. Docker Container Run" >> $LOG_DIR/[$DATE]container-run.log 2>&1
if [ -n "$status" ];
then
        echo "[$NOW] $EXITED_CONTAINER_NAME Container๊ฐ€ ๊ธฐ๋™์ค‘์ด์ง€ ์•Š์•„ ๊ธฐ๋™ ์‹œํ‚ค๊ฒ ์Šต๋‹ˆ๋‹ค." >> $LOG_DIR/[$DATE]container-run.log 2>&1
        CONTAINER_RESTART_STATUS=$(docker restart $EXITED_CONTAINER_NAME)
        echo "[$NOW] Container ์žฌ ๊ธฐ๋™ ์ƒํƒœ : $CONTAINER_RESTART_STATUS" >> $LOG_DIR/[$DATE]container-run.log 2>&1

        if [ $? != 0 ]
        then
             echo "[$NOW] $CONTAINER_RESTART_STATUS - Container ์žฌ ๊ธฐ๋™ ์‹คํŒจ ํ•˜์˜€์Šต๋‹ˆ๋‹ค." >> $LOG_DIR/[$DATE]container-run.log 2>&1
             exit 1
        else
             echo "[$NOW] $CONTAINER_RESTART_STATUS - Container ์žฌ ๊ธฐ๋™ ์„ฑ๊ณต ํ•˜์˜€์Šต๋‹ˆ๋‹ค." >> $LOG_DIR/[$DATE]container-run.log 2>&1
        fi
else
        echo "[$NOW] ๋ชจ๋“  Container๊ฐ€ ์ •์ƒ ๊ตฌ๋™ ์ค‘ ์ž…๋‹ˆ๋‹ค." >> $LOG_DIR/[$DATE]container-run.log 2>&1
fi

echo "[$NOW] Docker Container Run Status Check & Auto Run Job End" >> $LOG_DIR/[$DATE]container-run.log 2>&1

์ฃผ๋‹ˆ๊ฐ€ ๋งŒ๋“  ์ž๋™ ๊ธฐ๋™ ์‰˜ ์Šคํฌ๋ฆฝํŠธ์—์š”.

set -e

728x90


์œ„์—์„œ ๋ช…์‹œํ•œ set -e ๋ช…๋ น์–ด๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด์—์š”.

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


#!/bin/bash
set -e

echo "์Šคํฌ๋ฆฝํŠธ ์‹œ์ž‘"
ls non_existent_file.txt
echo "์ด ๋ถ€๋ถ„์€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."


๋งŒ์•ฝ ํŠน์ • ๋ถ€๋ถ„์—์„œ ์‹คํŒจ๋ฅผ ํ–ˆ์„ ๋•Œ๋Š” ๊ณ„์† ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ ๊ณณ์—์„œ๋งŒ set +e ๋ช…๋ น์–ด๋ฅผ ๋ช…์‹œํ•ด ์ฃผ๋ฉด
set -e๋ฅผ ๋ฌด๋งˆํ•˜๋Š” ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”.

set -e๋Š” ์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ฆ‰, ์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐ”๋กœ ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ์‹œ
์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์— ์‹ ๊ฒฝ ์จ์ค˜์•ผ ํ•ด์š”.



์ด ๋ถ€๋ถ„์—์„œ๋Š” LOG๋ฅผ ๋‚จ๊ธธ Directory๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ์„ ํ•˜๊ณ , ์—†๋‹ค๋ฉด ๋งŒ๋“ค๊ณ ,
์žˆ์œผ๋ฉด ๋งŒ๋“ค์ง€ ์•Š๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•ด ์ฃผ์—ˆ์–ด์š”.

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



์ด ๊ณณ์ด ๋ฐ”๋กœ ์‹ค์ œ๋กœ Container ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ธฐ๋™ ์‹œํ‚ค๋Š” ๋ถ€๋ถ„์ด์—์š”.

์ตœ์ดˆ 28๋ฒˆ์งธ ์ค„์— ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Container ๊ธฐ๋™ ์ƒํƒœ๊ฐ€ exited
์ฆ‰, ์ฃฝ์–ด ์žˆ๋Š” container ์ •๋ณด๋ฅผ status ๋ณ€์ˆ˜์— ๋‹ด๋„๋ก ํ•ด ์ฃผ์—ˆ์–ด์š”.

๊ทธ๋Ÿฐ ๋’ค 29๋ฒˆ์งธ ์ค„์— ์ฃฝ์–ด ์žˆ๋Š” Container์—
Container ์ด๋ฆ„์„ EXITED_CONTAINER_NAME์— ๋‹ด๋„๋ก ์ฒ˜๋ฆฌํ•ด ์ฃผ์—ˆ์–ด์š”.

35๋ฒˆ์งธ ์ค„์„ ๋ณด๋ฉด status ๋ณ€์ˆ˜์— ๋‹ด๊ธด ์ฃฝ์–ด์žˆ๋Š” Container์˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ ๊ธฐ๋™ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ , ๋ช…๋ น์–ด ๊ฒฐ๊ณผ๊ฐ’์„ CONTAINER_RESTART_STATUS ๋ณ€์ˆ˜์— ๋‹ด๋„๋ก ํ•ด ์ฃผ์—ˆ์–ด์š”.

38๋ฒˆ์งธ ์ค„์— ์œ„ ๋ช…๋ น์–ด๊ฐ€ ์‹คํŒจํ–ˆ๋Š”์ง€ ์„ฑ๊ณตํ–ˆ๋Š”์ง€๋ฅผ ๋ถ„๊ธฐํ•˜๋Š” ๋ถ€๋ถ„์ด๊ณ ,
$?์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ช…๋ น์–ด๊ฐ€ ์‹คํŒจํ•œ ๊ฒƒ์œผ๋กœ ๋ฐ”๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‚˜๊ฐ€๋„๋ก ์ฒ˜๋ฆฌํ•ด ์ฃผ์—ˆ์–ด์š”.


์‰˜ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์ข€ ๋” ์ž์„ธํ•œ ์ด์•ผ๊ธฐ๋Š” ์ด ๊ณณ์— ์ •์„ฑ์Šค๋Ÿฝ๊ฒŒ ์ค€๋น„ํ•ด ๋‘์—ˆ์–ด์š”.

 

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

๋ฆฌ๋ˆ…์Šค ์ปค๋งจ๋“œ๋ผ์ธ ์‰˜ ์Šคํฌ๋ฆฝํŠธ ๋ฐ”์ด๋ธ” COUPANG www.coupang.com "์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค." ๐Ÿš€ Docker Container Backup ๐Ÿ”ฝ ๊ฐœ์š” ๐Ÿ“ฆ ์†Œ๊ฐœ ์ด

junyharang.tistory.com

 



 

        ๐Ÿ“ฆ ์ž˜ ๋˜๋Š”์ง€ ํ™•์ธ!

์ •์„ฑ์Šค๋Ÿฝ๊ฒŒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ ํ•œ๋ฒˆ ํ…Œ์ŠคํŠธ ํ•ด ๋ณผ๊ฒŒ์š”.


์ตœ์ดˆ ์œ„์™€ ๊ฐ™์ด ๋Œ€์ƒ Container๋ฅผ ์ฃฝ์—ฌ์ฃผ์—ˆ์–ด์š”.



ํ•ด๋‹น ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๋™ ์‹œํ‚ค๊ณ , Log๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๋œ ๊ฑฐ ๊ฐ™์•„ ๋ณด์—ฌ์š”.



Container๊ฐ€ ์ž˜ ์˜ฌ๋ผ์˜จ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

 

 

 

    ๐Ÿ”ฝ ์ž๋™ํ™” ์ž‘์—…

        ๐Ÿ“ฆ ์‰˜ ์Šคํฌ๋ฆฝํŠธ ๋ถ€ํŒ… ์‹œ ๊ธฐ๋™ ๋˜๊ฒŒ ํ•˜๊ธฐ

์œ„์—์„œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์œผ๋‹ˆ ์ด์ œ ๋ถ€ํŒ…์ด ๋˜๋ฉด ํ•ด๋‹น ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค„๊ฒŒ์š”.

vim /etc/systemd/system/{์ž„์˜์˜ ์„œ๋น„์Šค ์ด๋ฆ„}.service

๋ฐ˜์‘ํ˜•


์ตœ์ดˆ ์œ„์™€ ๊ฐ™์ด systemd๋ฅผ ์ด์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹œ์ž‘ ํ”„๋กœ๊ทธ๋žจ์— ๋“ฑ๋ก๋  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑํ•ด ์ฃผ์—ˆ์–ด์š”.

์œ„์˜ ๋‚ด์šฉ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌํ•ด ๋ณด์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์•„์š”.

  • Description: ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์„ค๋ช… ์ž…๋ ฅ
  • After: ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ ์˜์กดํ•ด์•ผ ํ•˜๋Š” ๋Œ€์ƒ์ด ์žˆ๋‹ค๋ฉด ์ง€์ •. ์˜ˆ๋ฅผ ๋“ค์–ด Network๊ฐ€ ์ค€๋น„๋œ ํ›„์— ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด network.tart์„ ์ง€์ •.
  • ExecStart: ์‹คํ–‰ํ•  ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ์™€ ์ด๋ฆ„ ์ž…๋ ฅ
  • WantedBy: ์„œ๋น„์Šค๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด์•ผ ํ•˜๋Š” ํƒ€๊ฒŸ์„ ์ง€์ • (์ผ๋ฐ˜์ ์œผ๋กœ default.target ์ด์šฉ)

 

systemctl enable {Service ์ด๋ฆ„.service}


๊ทธ๋ฆฌ๊ณ , systemd Deamon์„ reloadํ•œ ๋’ค ํ•ด๋‹น Service๋ฅผ ์‹œ์ž‘ ํ”„๋กœ๊ทธ๋žจ์— ๋“ฑ๋กํ•ด ์ฃผ์—ˆ์–ด์š”.



 

 

        ๐Ÿ“ฆ ์ž˜ ๋˜๋Š”์ง€ ํ™•์ธ!

์ž˜ ๋˜๋Š”์ง€ ํ™•์ธ์„ ์œ„ํ•ด ์„œ๋ฒ„๋ฅผ ์žฌ๊ธฐ๋™ ํ•ด ์ค„๊ฑฐ์—์š”.

reboot

 

docker ps -a


๋ถ€ํŒ… ์ดํ›„ ํ™•์ธํ•ด๋ณด๋‹ˆ ์œ„์™€ ๊ฐ™์ด ์ž˜ ์˜ฌ๋ผ์˜ค๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”!



log๋„ ์ž˜ ๋‚จ์€๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”.

 

 

 

 

 

 

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

COUPANG

www.coupang.com

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

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•