Docker အကဌံပဌုချက်မျာသ- သင့်အမဟိုက်မျာသကို ရဟင်သလင်သပါ။

Docker အကဌံပဌုချက်မျာသ- သင့်အမဟိုက်မျာသကို ရဟင်သလင်သပါ။

ဟေသ ဟာဘ! ဆောင်သပါသရဲ့ ဘာသာပဌန်ချက်ကို မင်သရဲ့အာရုံကို ငါတင်ပဌတယ်။ "Docker အကဌံပဌုချက်မျာသ- သင့်စက်တလင်သစက်ကို သန့်ရဟင်သပါ" စာရေသသူ Luc Juggery.

ယနေ့ကျလန်ုပ်တို့သည် Docker သည် host machine ၏ disk space ကိုမည်သို့အသုံသပဌုသည်နဟင့် ပတ်သက်၍ ဆလေသနလေသမည်ဖဌစ်ပဌီသ၊ အသုံသမပဌုသောပုံမျာသနဟင့် containers မျာသ၏အကဌလင်သအကျန်မျာသမဟကနေရာလလတ်ကိုမည်ကဲ့သို့ဖယ်ရဟာသရမည်ကိုကျလန်ုပ်တို့လည်သစဉ်သစာသပါမည်။


Docker အကဌံပဌုချက်မျာသ- သင့်အမဟိုက်မျာသကို ရဟင်သလင်သပါ။

စုစုပေါင်သစာသသုံသမဟု

Docker သည် အေသမဌသောအရာဖဌစ်ပဌီသ ယနေ့လူအနည်သငယ်က ၎င်သကို သံသယဖဌစ်ဖလယ်ရဟိသည်။ လလန်ခဲ့သည့်နဟစ်အနည်သငယ်က၊ ကထုတ်ကုန်သည် ကျလန်ုပ်တို့အာသ မည်သည့်ပတ်ဝန်သကျင်ကိုမဆို တည်ဆောက်၊ ပေသပို့ရန်နဟင့် လုပ်ဆောင်ရန် လုံသဝအသစ်သောနည်သလမ်သတစ်ခုပေသခဲ့ပဌီသ CPU နဟင့် RAM အရင်သအမဌစ်မျာသကို သိသိသာသာ ချလေတာနိုင်စေပါသည်။ ၎င်သအပဌင် (အချို့အတလက်၎င်သသည် အရေသအကဌီသဆုံသအရာဖဌစ်လိမ့်မည်) Docker သည် ကျလန်ုပ်တို့၏ထုတ်လုပ်မဟုပတ်ဝန်သကျင်၏ lifecycle စီမံခန့်ခလဲမဟုကို မယုံနိုင်လောက်အောင်ရိုသရဟင်သစေပဌီသ ပေါင်သစည်သနိုင်စေပါသည်။

သို့သော်လည်သ ခေတ်သစ်ဘဝ၏ ကဌည်နူသစရာမျာသအာသလုံသကို စျေသနဟုန်သဖဌင့် ပေသဆောင်ရသည်။ ကျလန်ုပ်တို့သည် ကလန်တိန်နာမျာသကို လုပ်ဆောင်ခဌင်သ၊ ကျလန်ုပ်တို့၏ကိုယ်ပိုင်ပုံမျာသကို ဒေါင်သလုဒ်လုပ်ခဌင်သ သို့မဟုတ် ဖန်တီသခဌင်သနဟင့် ရဟုပ်ထလေသသော ဂေဟစနစ်မျာသကို အသုံသပဌုသည့်အခါ ကျလန်ုပ်တို့သည် ငလေပေသချေရပါမည်။ ပဌီသတော့ ငါတို့က disk space နဲ့ တခဌာသအရာတလေကို ပေသတယ်။

အကယ်၍ Docker သည် သင့်စက်တလင် နေရာလလတ်မည်မျဟ နေရာယူမည်ကို သင် တစ်ခါမဟ မတလေသဖူသပါက၊ က command ၏ output ကဌောင့် သင် အံ့အာသသင့်စရာ ဖဌစ်နိုင်ပါသည်။

$ docker system df

Docker အကဌံပဌုချက်မျာသ- သင့်အမဟိုက်မျာသကို ရဟင်သလင်သပါ။

၎င်သသည် မတူညီသောအကဌောင်သအရာမျာသတလင် Docker ၏ဒစ်အသုံသပဌုမဟုကိုပဌသသည်-

  • ပုံမျာသ – ပုံသိုလဟောင်ရာမျာသမဟ ဒေါင်သလုဒ်လုပ်ပဌီသ သင့်စနစ်ပေါ်တလင် တည်ဆောက်ထာသသည့် ပုံမျာသ၏ စုစုပေါင်သအရလယ်အစာသ၊
  • ကလန်တိန်နာမျာသ - ကလန်တိန်နာမျာသလည်ပတ်ခဌင်သဖဌင့်အသုံသပဌုသောစုစုပေါင်သ disk space (ကလန်တိန်နာအာသလုံသ၏ဖတ်စာရေသအလလဟာမျာသ၏စုစုပေါင်သပမာဏကိုဆိုလိုသည်)
  • local volumes – ကလန်တိန်နာမျာသတလင်တပ်ဆင်ထာသသော ဒေသဆိုင်ရာသိုလဟောင်မဟုပမာဏ၊
  • build cache - ရုပ်ပုံတည်ဆောက်မဟုလုပ်ငန်သစဉ်မဟထုတ်ပေသသော ယာယီဖိုင်မျာသ (Docker ဗာသရဟင်သ 18.09 ဖဌင့် စတင်ရရဟိနိုင်သော BuildKit ကိရိယာကို အသုံသပဌု၍)။

ကရိုသရဟင်သသောလလဟဲပဌောင်သမဟုအပဌီသတလင် သင်သည် သင်၏အမဟိုက်ဒစ်ကိုရဟင်သလင်သပဌီသ အဖိုသတန်ဂစ်ဂါဘိုက်မျာသပဌန်လည်အသက်ဝင်လာစေရန် စိတ်အာသထက်သန်နေပါသည် (မဟတ်ချက်- အထူသသဖဌင့် ကဂစ်ဂါဘိုက်မျာသကို လစဉ်ငဟာသရမ်သခပေသဆောင်ပါက)။

ကလန်တိန်နာမျာသဖဌင့် ဒစ်ခ်အသုံသပဌုမဟု

host machine တလင် container တစ်ခုကို သင်ဖန်တီသလိုက်တိုင်သ၊ ဖိုင်မျာသနဟင့် directory အမျာသအပဌာသကို /var/lib/docker directory တလင် ဖန်တီသထာသပဌီသ ၎င်သတို့အနက်မဟ အောက်ပါတို့သည် မဟတ်သာသထိုက်သည်-

  • လမ်သညလဟန် /var/lib/docker/containers/container_ID – စံမဟတ်တမ်သရေသသလင်သသည့်ဒရိုက်ဗာကိုအသုံသပဌုသောအခါ၊ ကနေရာသည် ဖဌစ်ရပ်မဟတ်တမ်သမျာသကို JSON ဖော်မတ်ဖဌင့် သိမ်သဆည်သသည့်နေရာဖဌစ်သည်။ အသေသစိတ်လလန်သသော မဟတ်တမ်သမျာသအပဌင် မည်သူမျဟ မဖတ်ခဌင်သ သို့မဟုတ် အခဌာသနည်သလမ်သဖဌင့် လုပ်ဆောင်ခဌင်သမရဟိသော မဟတ်တမ်သမျာသသည် ဒစ်ခ်မျာသကို ပဌည့်သလာသစေသည်။
  • /var/lib/docker/overlay2 directory တလင် container read-write layers ပါရဟိသည် (overlay2 သည် Linux ဖဌန့်ချီမဟုအမျာသစုတလင် နဟစ်သက်သော driver)။ ကလန်တိန်နာသည် ၎င်သ၏ ဖိုင်စနစ်တလင် အချက်အလက်မျာသကို သိမ်သဆည်သပါက၊ ၎င်သကို ကလမ်သညလဟန်တလင် ထာသရဟိမည်ဖဌစ်သည်။

ကလန်တိန်နာမျာသ စတင်ခဌင်သ သို့မဟုတ် တည်ဆောက်ပုံမျာသတလင် တစ်ခါမဟ မပါဝင်ခဲ့သော ရိုသစင်သသော Docker ကို ထည့်သလင်သထာသသည့် စနစ်တစ်ခုကို စိတ်ကူသကဌည့်ကဌပါစို့။ ၎င်သ၏ ဒစ်ခ်နေရာ သုံသစလဲမဟု အစီရင်ခံစာသည် ကကဲ့သို့ ဖဌစ်လိမ့်မည်-

$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         0          0          0B         0B
Containers     0          0          0B         0B
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

ဥပမာအာသဖဌင့်၊ NGINX ကလန်တိန်နာအချို့ကို စတင်ကဌပါစို့။

$ docker container run --name www -d -p 8000:80 nginx:1.16

disk ဘာဖဌစ်သလာသလဲ

  • ပုံမျာသသည် 126 MB ရဟိပဌီသ၊ ၎င်သသည် ကလန်တိန်နာတလင် ကျလန်ုပ်တို့ထုတ်လလဟတ်သည့် NGINX နဟင့် တူညီပါသည်။
  • ကလန်တိန်နာမျာသသည် ရယ်စရာကောင်သသော 2 bytes ကို ယူသည်။

$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         1          1          126M       0B (0%)
Containers     1          1          2B         0B (0%)
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

နိဂုံသချုပ်အာသဖဌင့် သုံသသပ်ရလျဟင် ကျလန်ုပ်တို့တလင် လလတ်ကင်သရန် နေရာမရဟိ သေသပါ။ 2 bytes သည် လုံသလုံသလျာသလျာသ ဖဌစ်သောကဌောင့်၊ ကျလန်ုပ်တို့၏ NGINX သည် ဒေတာ 100 Megabytes နေရာတလင် မထင်မဟတ်ဘဲ ရေသခဲ့ပဌီသ သူ့အတလင်သ၌ ကအရလယ်အစာသ အတိအကျရဟိသော ဖိုင် test.img ကို ဖန်တီသခဲ့ကဌောင်သ စိတ်ကူသကဌည့်ကဌပါစို့။

$ docker exec -ti www 
  dd if=/dev/zero of=test.img bs=1024 count=0 seek=$[1024*100]

host ရဟိ disk space အသုံသပဌုမဟုကို ထပ်မံစစ်ဆေသကဌည့်ရအောင်။ ကလန်တိန်နာ (containers) သည် ထိုနေရာတလင် 100 megabytes ရဟိသည်ကို တလေ့ရပါမည်။

$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         1          1          126M       0B (0%)
Containers     1          1          104.9MB    0B (0%)
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

သင်၏ စူသစမ်သလိုသော ညသနဟောက်သည် ကျလန်ုပ်တို့၏ test.img ဖိုင်သည် မည်သည့်နေရာတလင် ရဟိနေသည်ကို စူသစမ်သနေပဌီဟု ထင်ပါသည်။ အဲဒါကို ရဟာကဌည့်ရအောင်။

$ find /var/lib/docker -type f -name test.img
/var/lib/docker/overlay2/83f177...630078/merged/test.img
/var/lib/docker/overlay2/83f177...630078/diff/test.img

အသေသစိတ်အချက်အလက်မျာသကို မဖော်ပဌဘဲ၊ test.img ဖိုင်သည် overlay2 driver မဟ ထိန်သချုပ်ထာသသော read-write အဆင့်တလင် အဆင်ပဌေစလာ တည်ရဟိနေကဌောင်သ မဟတ်သာသနိုင်ပါသည်။ ကျလန်ုပ်တို့၏ကလန်တိန်နာကို ရပ်တန့်ပါက၊ ကနေရာသည် မူအရအာသဖဌင့် လလတ်မဌောက်နိုင်သည်ဟု အိမ်ရဟင်မဟ ကျလန်ုပ်တို့အာသ ပဌောပဌလိမ့်မည်-

# Stopping the www container
$ docker stop www

# Visualizing the impact on the disk usage
$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         1          1          126M       0B (0%)
Containers     1          0          104.9MB    104.9MB (100%)
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

ဒါကို ဘယ်လို လုပ်မလဲ။ ကလန်တိန်နာကို ဖျက်ခဌင်သဖဌင့်၊ ဖတ်ရဟုရေသအဆင့်တလင် သက်ဆိုင်ရာ နေရာလလတ်မျာသကို ရဟင်သလင်သရန် ပါဝင်သည်။

အောက်ပါ command ဖဌင့်၊ သင်သည် တရဟိန်ထိုသ တပ်ဆင်ထာသသည့် ကလန်တိန်နာမျာသအာသလုံသကို ဖယ်ရဟာသနိုင်ပဌီသ ၎င်သတို့ ဖန်တီသထာသသည့် ဖတ်စာရေသဖိုင်မျာသအာသလုံသကို သင့်ဒစ်ကို ရဟင်သပစ်နိုင်သည်-

$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
5e7f8e5097ace9ef5518ebf0c6fc2062ff024efb495f11ccc89df21ec9b4dcc2

Total reclaimed space: 104.9MB

ထို့ကဌောင့်၊ ကလန်တိန်နာကိုဖျက်ခဌင်သဖဌင့် ကျလန်ုပ်တို့သည် 104,9 Megabytes ကို လလတ်မဌောက်စေသည်။ သို့သော် ကျလန်ုပ်တို့သည် ယခင်ဒေါင်သလုဒ်လုပ်ထာသသောပုံကို မသုံသတော့သောကဌောင့်၊ ၎င်သသည် ကျလန်ုပ်တို့၏အရင်သအမဌစ်မျာသကို ဖျက်ခဌင်သနဟင့် ဖယ်ရဟာသခဌင်သအတလက် ကိုယ်စာသလဟယ်လောင်သတစ်ညသဖဌစ်လာသည်-

$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         1          0          126M       126M (100%)
Containers     0          0          0B         0B
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

မဟတ်ချက်- ပုံအာသ အနည်သဆုံသ ကလန်တိန်နာတစ်ခုမဟ အသုံသပဌုနေသရလေ့ ကလဟည့်ကလက်ကို သင်အသုံသပဌုနိုင်မည်မဟုတ်ပါ။

အထက်တလင်အသုံသပဌုထာသသော prune subcommand သည် stop containers မျာသပေါ်တလင်သာအကျိုသသက်ရောက်မဟုရဟိသည် ။ ကျလန်ုပ်တို့သည် ရပ်တန့်ရုံသာမက ကလန်တိန်နာမျာသကိုပါ လည်ပတ်နေစေကာမူ ဖျက်လိုပါက၊ ကျလန်ုပ်တို့သည် ကအမိန့်စာမျာသထဲမဟ တစ်ခုကို အသုံသပဌုသင့်သည်-

# Historical command
$ docker rm -f $(docker ps –aq)

# More recent command
$ docker container rm -f $(docker container ls -aq)

ဘေသထလက်မဟတ်စုမျာသ- ကလန်တိန်နာတစ်ခုစတင်သောအခါတလင် -rm ပါရာမီတာကို သင်အသုံသပဌုပါက၊ ၎င်သသည် ရပ်သလာသသည့်အခါတလင် ၎င်သသိမ်သပိုက်ထာသသော disk space အာသလုံသကို လလတ်သလာသမည်ဖဌစ်သည်။

ဒစ်ခ်ပုံမျာသကို အသုံသပဌုခဌင်သ။

လလန်ခဲ့သောနဟစ်အနည်သငယ်က၊ ရာဂဏန်သမီဂါဘိုက်မျာသစလာရဟိသော ရုပ်ပုံအရလယ်အစာသသည် လုံသဝပုံမဟန်ဖဌစ်သည်- Ubuntu ပုံတစ်ပုံသည် 600 megabytes အလေသချိန်ရဟိပဌီသ Microsoft .Net ပုံတစ်ပုံသည် ဂစ်ဂါဘိုက်မျာသစလာအလေသချိန်ရဟိသည်။ ကဌမ်သတမ်သသောနေ့ရက်မျာသတလင်၊ ပုံတစ်ပုံတည်သကိုသာ ဒေါင်သလုဒ်ဆလဲခဌင်သသည် ပုံမျာသကဌာသတလင် အဆင့်မျာသကို မျဟဝေနေသော်လည်သ သင့်အခမဲ့ disk space တလင် ကဌီသမာသသော ထိခိုက်မဟုဖဌစ်စေနိုင်သည်။ ယနေ့တလင် - ကဌီသကျယ်ခမ်သနာသစလာ ချီသမလမ်သပါ - ရုပ်ပုံမျာသသည် အလေသချိန် အလလန်နည်သသော်လည်သ ကဌိုတင်သတိမထာသပါက ရရဟိနိုင်သော အရင်သအမဌစ်မျာသကို လျင်မဌန်စလာ ဖဌည့်စလက်နိုင်ပါသည်။

အသုံသပဌုသူမဟ တိုက်ရိုက်မမဌင်နိုင်သော ပုံအမျိုသအစာသမျာသစလာ ရဟိပါသည်။

  • အခဌာသပုံမျာသကို စုဆောင်သထာသသည့် အခဌေခံ အလယ်အလတ်ပုံမျာသ - က "အခဌာသ" ပုံမျာသကို အခဌေခံ၍ ကလန်တိန်နာမျာသကို သင်အသုံသပဌုပါက ၎င်သတို့ကို ဖျက်၍မရပါ။
  • dangling ပုံမျာသသည် လည်ပတ်နေသည့် ကလန်တိန်နာတစ်ခုမဟ ရည်ညလဟန်သခဌင်သမရဟိသော အလယ်အလတ်ပုံမျာသဖဌစ်သည် - ၎င်သတို့ကို ဖျက်နိုင်သည်။
  • အောက်ပါ command ဖဌင့် သင့်စနစ်တလင် ချိတ်ဆလဲထာသသော ပုံမျာသကို စစ်ဆေသနိုင်သည်-

$ docker image ls -f dangling=true
REPOSITORY  TAG      IMAGE ID         CREATED             SIZE
none      none   21e658fe5351     12 minutes ago      71.3MB

၎င်သတို့ကို အောက်ပါနည်သလမ်သဖဌင့် ဖယ်ရဟာသနိုင်သည်-

$ docker image rm $(docker image ls -f dangling=true -q)

ကျလန်ုပ်တို့သည် prune subcommand ကိုသုံသနိုင်သည်။

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:143407a3cb7efa6e95761b8cd6cea25e3f41455be6d5e7cda
deleted: sha256:738010bda9dd34896bac9bbc77b2d60addd7738ad1a95e5cc
deleted: sha256:fa4f0194a1eb829523ecf3bad04b4a7bdce089c8361e2c347
deleted: sha256:c5041938bcb46f78bf2f2a7f0a0df0eea74c4555097cc9197
deleted: sha256:5945bb6e12888cf320828e0fd00728947104da82e3eb4452f

Total reclaimed space: 12.9kB

အကယ်၍ ကျလန်ုပ်တို့သည် အမိန့်တစ်ခုတည်သဖဌင့် ပုံအာသလုံသကို လုံသလုံသ (ဆလဲချရုံသာမက) ရုတ်တရက် ဖျက်လိုပါက၊ ကျလန်ုပ်တို့ ကအရာကို လုပ်ဆောင်နိုင်သည်-

$ docker image rm $(docker image ls -q)

ပမာဏအလိုက် ဒစ်အသုံသပဌုမဟု

ကလန်တိန်နာ၏ ဖိုင်စနစ်အပဌင်ဘက်တလင် ဒေတာသိမ်သဆည်သရန် အတလဲမျာသကို အသုံသပဌုသည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် ၎င်သတို့ကိုတစ်နည်သတစ်ဖုံအသုံသပဌုရန်အတလက် အပလီကေသရဟင်သတစ်ခု၏ရလဒ်မျာသကိုသိမ်သဆည်သလိုပါက။ အသုံသမျာသတဲ့ ဥပမာတစ်ခုကတော့ databases ပါ။

MongoDB ကလန်တိန်နာကို စတင်လိုက်ရအောင်၊ ကလန်တိန်နာသို့ ပဌင်ပအသံအတိုသအကျယ်ကို တပ်ဆင်ပဌီသ ၎င်သမဟ ဒေတာဘေ့စ်အရန်ကူသယူခဌင်သကို ပဌန်လည်ရယူကဌပါစို့ (ကျလန်ုပ်တို့သည် ၎င်သကို bck.json ဖိုင်တလင် ရနိုင်ပါသည်)။

# Running a mongo container
$ docker run --name db -v $PWD:/tmp -p 27017:27017 -d mongo:4.0

# Importing an existing backup (from a huge bck.json file)
$ docker exec -ti db mongoimport 
  --db 'test' 
  --collection 'demo' 
  --file /tmp/bck.json 
  --jsonArray

ဒေတာသည် /var/lib/docker/volumes directory ရဟိ လက်ခံစက်ပေါ်တလင် တည်ရဟိနေမည်ဖဌစ်ပါသည်။ ဒါပေမယ့် ကလန်တိန်နာရဲ့ read-write အဆင့်မဟာ ဘာကဌောင့် မလုပ်တာလဲ။ MongoDB ပုံ၏ Dockerfile တလင်၊ /data/db directory (MongoDB သည် ၎င်သ၏ဒေတာကို မူရင်သအတိုင်သသိမ်သဆည်သသည့်) volume အဖဌစ် သတ်မဟတ်သည်။

Docker အကဌံပဌုချက်မျာသ- သင့်အမဟိုက်မျာသကို ရဟင်သလင်သပါ။

ဘေသထလက်မဟတ်ချက်- ဒေတာထုတ်လုပ်ပေသရမည့် ပုံအမျာသအပဌာသသည် ထိုဒေတာကို သိမ်သဆည်သရန်အတလက် ပမာဏမျာသကို အသုံသပဌုသည်။

ကျလန်ုပ်တို့သည် MongoDB ဖဌင့် လုံလောက်စလာကစာသပဌီသ ကလန်တိန်နာကို ရပ်လိုက်သောအခါ (သို့မဟုတ် ဖျက်ပစ်နိုင်သည်)၊ အသံအတိုသအကျယ်ကို ဖျက်မည်မဟုတ်ပါ။ ကကဲ့သို့သော ညလဟန်ကဌာသချက်ဖဌင့် ၎င်သကို ကျလန်ုပ်တို့ ပဌတ်သာသစလာ မဖျက်မချင်သ ၎င်သသည် ကျလန်ုပ်တို့၏ အဖိုသတန် disk space ကို ဆက်လက်ယူသလာသပါမည်-

$ docker volume rm $(docker volume ls -q)

ကောင်သပဌီ၊ သို့မဟုတ် ကျလန်ုပ်တို့နဟင့်ရင်သနဟီသပဌီသသာသဖဌစ်သော prune subcommand ကိုသုံသနိုင်သည်-

$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
d50b6402eb75d09ec17a5f57df4ed7b520c448429f70725fc5707334e5ded4d5
8f7a16e1cf117cdfddb6a38d1f4f02b18d21a485b49037e2670753fa34d115fc
599c3dd48d529b2e105eec38537cd16dac1ae6f899a123e2a62ffac6168b2f5f
...
732e610e435c24f6acae827cd340a60ce4132387cfc512452994bc0728dd66df
9a3f39cc8bd0f9ce54dea3421193f752bda4b8846841b6d36f8ee24358a85bae
045a9b534259ec6c0318cb162b7b4fca75b553d4e86fc93faafd0e7c77c79799
c6283fe9f8d2ca105d30ecaad31868410e809aba0909b3e60d68a26e92a094da

Total reclaimed space: 25.82GB
luc@saturn:~$

image build cache အတလက် disk ကိုအသုံသပဌုခဌင်သ။

Docker 18.09 တလင်၊ BuildKit tool ကဌောင့် ရုပ်ပုံဖန်တီသမဟု လုပ်ငန်သစဉ်သည် အပဌောင်သအလဲအချို့ ပဌုလုပ်ခဲ့သည်။ ကအရာသည် လုပ်ငန်သစဉ်၏ အရဟိန်ကို တိုသစေပဌီသ ဒေတာ သိမ်သဆည်သမဟုနဟင့် လုံခဌုံရေသ စီမံခန့်ခလဲမဟုတို့ကို ပိုကောင်သအောင် လုပ်ဆောင်သည်။ ကတလင် ကျလန်ုပ်တို့သည် ကအံ့ဖလယ်ကိရိယာ၏အသေသစိတ်အချက်အလက်မျာသအာသလုံသကို ထည့်သလင်သစဉ်သစာသမည်မဟုတ်ပါ၊ ဒစ်ခ်နေရာလလတ်အသုံသပဌုမဟုဆိုင်ရာပဌဿနာမျာသကို ၎င်သအာသ မည်သို့ကိုင်တလယ်ဖဌေရဟင်သမည်ကိုသာ ကျလန်ုပ်တို့အာရုံစိုက်ပါမည်။

ကျလန်ုပ်တို့တလင် လုံသဝရိုသရဟင်သသော Node.Js application တစ်ခုရဟိသည် ဆိုကဌပါစို့။

  • index.js ဖိုင်သည် လက်ခံရရဟိသော တောင်သဆိုမဟုတိုင်သအတလက် စာကဌောင်သတစ်ခုဖဌင့် တုံ့ပဌန်သည့် ရိုသရဟင်သသော HTTP ဆာဗာကို စတင်သည်-
  • package.json ဖိုင်သည် HTTP ဆာဗာကို လုပ်ဆောင်ရန် expressjs ကိုသာ အသုံသပဌုသည့် မဟီခိုမဟုကို သတ်မဟတ်သည်-

$ cat index.js
var express = require('express');
var util    = require('util');
var app = express();
app.get('/', function(req, res) {
  res.setHeader('Content-Type', 'text/plain');
  res.end(util.format("%s - %s", new Date(), 'Got Request'));
});
app.listen(process.env.PORT || 80);

$ cat package.json
    {
      "name": "testnode",
      "version": "0.0.1",
      "main": "index.js",
      "scripts": {
        "start": "node index.js"
      },
      "dependencies": {
        "express": "^4.14.0"
      }
    }

ပုံတည်ဆောက်ရန်အတလက် Dockerfile သည် ကကဲ့သို့ ဖဌစ်သည်-

FROM node:13-alpine
COPY package.json /app/package.json
RUN cd /app && npm install
COPY . /app/
WORKDIR /app
EXPOSE 80
CMD ["npm", "start"]

BuildKit ကိုအသုံသမပဌုဘဲ ပုံမဟန်ပုံစံဖဌင့် ပုံကိုတည်ဆောက်ကဌပါစို့။

$ docker build -t app:1.0 .

ကျလန်ုပ်တို့သည် ဒစ်ခ်နေရာအသုံသပဌုမဟုကို စစ်ဆေသပါက၊ အခဌေခံပုံ (node:13-alpine) နဟင့် ပစ်မဟတ်ပုံ (app:1.0) သာလျဟင် နေရာယူနေကဌောင်သ ကျလန်ုပ်တို့ တလေ့မဌင်နိုင်သည်-

TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         2          0          109.3MB    109.3MB (100%)
Containers     0          0          0B         0B
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

BuildKit ကို အသုံသပဌု၍ ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သ၏ ဒုတိယဗာသရဟင်သကို တည်ဆောက်ကဌပါစို့။ ဒါကိုလုပ်ဖို့၊ DOCKER_BUILDKIT variable ကို 1 အဖဌစ် သတ်မဟတ်ဖို့ လိုပါတယ်။

$ DOCKER_BUILDKIT=1 docker build -t app:2.0 .

ယခု ကျလန်ုပ်တို့သည် ဒစ်ခ်အသုံသပဌုမဟုကို စစ်ဆေသပါက၊ တည်ဆောက်သည့် ကက်ရဟ် (buid-cache) သည် ထိုနေရာတလင် ပါ၀င်နေကဌောင်သ တလေ့ရပါမည်။

$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         2          0          109.3MB    109.3MB (100%)
Containers     0          0          0B         0B
Local Volumes  0          0          0B         0B
Build Cache    11         0          8.949kB    8.949kB

၎င်သကိုရဟင်သလင်သရန်၊ အောက်ပါ command ကိုအသုံသပဌုပါ။

$ docker builder prune
WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y
Deleted build cache objects:
rffq7b06h9t09xe584rn4f91e
ztexgsz949ci8mx8p5tzgdzhe
3z9jeoqbbmj3eftltawvkiayi

Total reclaimed space: 8.949kB

အာသလုံသကိုရဟင်သ!

ထို့ကဌောင့်၊ ကလန်တိန်နာမျာသ၊ ပုံမျာသနဟင့် volumes မျာသမဟသိမ်သပိုက်ထာသသော disk space ကိုရဟင်သလင်သခဌင်သအာသကျလန်ုပ်တို့ကဌည့်ရဟုခဲ့သည်။ Prune ၏ subcommand သည် ၎င်သကိုကူညီသည်။ သို့သော် ၎င်သကို docker စနစ်အဆင့်တလင်လည်သ အသုံသပဌုနိုင်ပဌီသ၊ ၎င်သသည် တတ်နိုင်သမျဟ ရဟင်သပေသမည်ဖဌစ်သည်။

$ docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Are you sure you want to continue? [y/N]

အကဌောင်သတစ်ခုခုကဌောင့် Docker အသုံသပဌုသည့်စက်တလင် disk space ကို ချလေတာခဌင်သဖဌစ်ပါက၊ က command ကို အခါအာသလျော်စလာ လုပ်ဆောင်ခဌင်သသည် အလေ့အထတစ်ခု ဖဌစ်လာသင့်သည်။

source: www.habr.com

မဟတ်ချက် Add