[အမေရိကန် ကလေးများ၏ ဒဏ္ဍာရီပုံပြင် "The Little Engine That Could" ကို ကိုးကား - အနီးစပ်ဆုံး။ လမ်းသွား]*
မင်းရဲ့လိုအပ်ချက်အတွက် Docker ပုံလေးတွေကို အလိုအလျောက်ဖန်တီးနည်း
ပုံမှန်မဟုတ်သော Obsession
ပြီးခဲ့သောလများအတွင်း၊ Docker ပုံသည် မည်မျှသေးငယ်နိုင်သည်ကို ကျွန်ုပ် စွဲလမ်းနေခဲ့ပြီး အပလီကေးရှင်းကို ဆက်လက်လည်ပတ်နေဆဲဖြစ်သည်။
ငါနားလည်တယ်၊ စိတ်ကူးကထူးဆန်းတယ်။
အသေးစိတ်နှင့် နည်းပညာပိုင်းဆိုင်ရာများကို ကျွန်ုပ်မလေ့လာမီ၊ ဤပြဿနာသည် ကျွန်ုပ်ကို အဘယ်ကြောင့် အလွန်အနှောက်အယှက်ဖြစ်စေသနည်း၊ ၎င်းသည် သင့်အား မည်သို့စိုးရိမ်ကြောင်း ရှင်းပြလိုပါသည်။
အရွယ်အစားက ဘာကြောင့် အရေးကြီးတာလဲ။
Docker ပုံ၏ အကြောင်းအရာများကို လျှော့ချခြင်းဖြင့်၊ ကျွန်ုပ်တို့သည် အားနည်းချက်များစာရင်းကို လျှော့ချပေးပါသည်။ ထို့အပြင်၊ ကျွန်ုပ်တို့သည် အပလီကေးရှင်းများကို လုပ်ဆောင်ရန် လိုအပ်သည့်အရာများသာ ပါဝင်သောကြောင့် ပုံများကို ပိုမိုသန့်ရှင်းစေသည်။
နောက်ထပ် အားသာချက်လေးတစ်ခုရှိသေးတယ် - ပုံတွေကို ဒေါင်းလုဒ်လုပ်ရတာ နည်းနည်းမြန်ပေမယ့် ကျွန်တော့်အမြင်အရတော့ ဒါက သိပ်အရေးမကြီးပါဘူး။
ကျေးဇူးပြု၍ သတိပြုပါ- အရွယ်အစားနှင့် ပတ်သက်၍ သင်စိုးရိမ်ပါက၊ Alpine ပုံသဏ္ဍာန်သည် သေးငယ်ပြီး သင့်အတွက် အံကိုက်ဖြစ်နိုင်သည်။
အနှိုင်းမဲ့ပုံများ
pip
и apt
အလုပ်မလုပ်ပါ
FROM gcr.io/distroless/python3
RUN pip3 install numpy
Python 3 distroless ပုံကို အသုံးပြု၍ Dockerfile
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM gcr.io/distroless/python3
---> 556d570d5c53
Step 2/2 : RUN pip3 install numpy
---> Running in dbfe5623f125
/bin/sh: 1: pip3: not found
Pip သည် ပုံတွင်မရှိပါ။
များသောအားဖြင့် ဤပြဿနာကို multi-stage build ဖြင့် ဖြေရှင်းသည်-
FROM python:3 as builder
RUN pip3 install numpy
FROM gcr.io/distroless/python3
COPY --from=builder /usr/local/lib/python3.7/site-packages /usr/local/lib/python3.5/
Multi-stage စည်းဝေးပွဲ
ရလဒ်သည် 130MB အရွယ်အစားရှိသော ရုပ်ပုံဖြစ်သည်။ သိပ်မဆိုးပါဘူး! နှိုင်းယှဉ်ရန်အတွက်- ပုံသေ Python ပုံသည် 929MB အလေးချိန်ရှိပြီး "ပါးလွှာသော" ပုံ (3,7-slim
) - 179MB၊ အယ်လ်ပိုင်းရုပ်ပုံ (3,7-alpine
) သည် 98,6MB ဖြစ်ပြီး နမူနာတွင် အသုံးပြုထားသော အခြေခံ distroless ပုံသည် 50,9MB ဖြစ်သည်။
ယခင်နမူနာတွင် ကျွန်ုပ်တို့သည် လမ်းညွှန်တစ်ခုလုံးကို ကူးယူနေခြင်းကို ထောက်ပြရန် မျှတပါသည်။ /usr/local/lib/python3.7/site-packages
ကျွန်ုပ်တို့ မလိုအပ်သော မှီခိုမှုများ ပါဝင်နိုင်သည်။ ရှိပြီးသား Python အခြေခံပုံများ အားလုံး၏ အရွယ်အစား ကွာခြားချက်မှာ ကွဲပြားကြောင်း သိသာထင်ရှားသော်လည်း၊
စာရေးနေစဉ်တွင်၊ Google distroless သည် ပုံများစွာကို ပံ့ပိုးမပေးပါ- Java နှင့် Python တို့သည် စမ်းသပ်ဆဲအဆင့်တွင် ရှိနေဆဲဖြစ်ပြီး Python သည် 2,7 နှင့် 3,5 အတွက်သာ ရှိနေပါသည်။
ပုံလေးတွေ
ပုံလေးတွေကို ဖန်တီးရတာကို စွဲလမ်းမှုဆီကို ပြန်သွားပါ။
ယေဘူယျအားဖြင့်၊ အနှောက်အယှက်ကင်းသော ပုံများကို မည်သို့တည်ဆောက်ထားသည်ကို ကျွန်ုပ်ကြည့်ချင်သည်။ distroless ပရောဂျက်သည် Google ၏တည်ဆောက်ရေးကိရိယာကိုအသုံးပြုသည်။ bazel
. သို့သော်၊ Bazel ကိုထည့်သွင်းပြီး သင့်ကိုယ်ပိုင်ပုံများကိုရေးခြင်းသည် အလုပ်များစွာယူခဲ့ရသည် (ရိုးရိုးသားသားပြောရလျှင်၊ ဘီးကိုပြန်လည်တီထွင်ခြင်းသည် ပျော်စရာကောင်းပြီး ပညာပေးမှုဖြစ်သည်)။ ရုပ်ပုံအသေးလေးတွေ ဖန်တီးမှုကို ရိုးရှင်းစေချင်ပါတယ်- ပုံတစ်ပုံဖန်တီးခြင်းလုပ်ရပ်သည် အလွန်ရိုးရှင်းသင့်သည်၊ banal. ထို့ကြောင့် သင့်အတွက် configuration ဖိုင်များမရှိစေရန်၊ console တွင် စာကြောင်းတစ်ကြောင်းသာရှိသည်။ просто собрать образ для <приложение>
.
ထို့ကြောင့်၊ သင်သည်သင်၏ကိုယ်ပိုင်ပုံများကိုဖန်တီးလိုပါကသိပါ - ထိုကဲ့သို့သောထူးခြားသော docker ပုံရှိပါသည်၊ scratch
. ခြစ်ရာသည် 'အလွတ်' ပုံဖြစ်သည်၊ ၎င်းသည် မူရင်းအတိုင်း အလေးချိန်ရှိသော်လည်း ၎င်းတွင် ဖိုင်များမရှိပါ - wow! - 77 bytes ။
FROM scratch
ခြစ်ပုံ
ခြစ်ရာပုံတစ်ပုံ၏စိတ်ကူးမှာ host machine မှ မည်သည့်မှီခိုအားထားမှုကိုမဆို ၎င်းထဲသို့ကူးယူနိုင်ပြီး Dockerfile အတွင်းတွင်ဖြစ်စေ အသုံးပြုနိုင်သည်။ apt
နှင့် အစမှနေ၍ ထည့်သွင်းပါ) သို့မဟုတ် Docker ပုံကို ရုပ်လုံးပေါ်လာသောအခါ၊ ၎င်းသည် သင့်အား Docker ကွန်တိန်နာ၏ အကြောင်းအရာများကို လုံးလုံးလျားလျား ထိန်းချုပ်နိုင်စေပြီး၊ ထို့ကြောင့် ပုံ၏ အရွယ်အစားကို လုံး၀ ထိန်းချုပ်နိုင်မည်ဖြစ်သည်။
ယခု ကျွန်ုပ်တို့သည် ဤမှီခိုအားထားမှုများကို တစ်နည်းနည်းဖြင့် စုဆောင်းရန် လိုအပ်ပါသည်။ ရှိပြီးသား tools တွေလိုမျိုး apt
ပက်ကေ့ဂျ်များကို ဒေါင်းလုဒ်လုပ်ခွင့်ပြုသော်လည်း ၎င်းတို့ကို လက်ရှိစက်နှင့် ချိတ်ဆက်ထားပြီး Windows သို့မဟုတ် MacOS ကို မပံ့ပိုးပါ။
ထို့ကြောင့် အသေးငယ်ဆုံးဖြစ်နိုင်သော အရွယ်အစား၏ အခြေခံပုံတစ်ပုံကို အလိုအလျောက်တည်ဆောက်ကာ မည်သည့်အက်ပ်ကိုမဆို လုပ်ဆောင်ပေးမည့် ကိုယ်ပိုင်ကိရိယာကို တည်ဆောက်ရန် စိတ်ကူးခဲ့သည်။ Ubuntu/Debian ပက်ကေ့ဂျ်များကို အသုံးပြုပြီး ရွေးချယ်မှုတစ်ခုပြုလုပ်ခဲ့သည် (သိုလှောင်ရာနေရာများမှ ပက်ကေ့ဂျ်များတိုက်ရိုက်ရယူခြင်း) နှင့် ၎င်းတို့၏မှီခိုမှုများကို ထပ်ခါတလဲလဲ တွေ့ရှိခဲ့သည်။ ပရိုဂရမ်သည် ပက်ကေ့ဂျ်၏ နောက်ဆုံးတည်ငြိမ်သောဗားရှင်းကို အလိုအလျောက် ဒေါင်းလုဒ်လုပ်ကာ လုံခြုံရေးအန္တရာယ်များကို တတ်နိုင်သမျှ နည်းပါးအောင် ပြုလုပ်ပေးမည်ဖြစ်သည်။
ကျွန်တော် tool ကို နာမည်ပေးလိုက်တယ်။ fetchy
ဘာကြောင့်လဲ ဆိုတော့ သူက ... လိုအပ်တာတွေကို ရှာဖွေပြီး ယူလာပေးတဲ့အတွက် ...အင်္ဂလိပ်ထံမှ "ယူဆောင်သည်"၊ "ယူဆောင်သည်" - ခန့်မှန်းခြေ။ လမ်းသွား] ကိရိယာသည် command line interface မှတဆင့်အလုပ်လုပ်သည်၊ သို့သော်တစ်ချိန်တည်းတွင် API ကိုပေးသည်။
ပုံတစ်ပုံကို အသုံးပြု၍ စုစည်းရန် fetchy
(ဒီတစ်ခါတော့ Python ပုံတစ်ပုံလောက်ယူကြည့်ရအောင်)၊ သင်သည်ဤကဲ့သို့သော CLI ကိုအသုံးပြုရန်သာလိုသည်- fetchy dockerize python
. ပစ်မှတ်လည်ပတ်မှုစနစ်နှင့် ကုဒ်အမည်အတွက် သင့်အား တောင်းဆိုနိုင်သောကြောင့်ဖြစ်သည်။ fetchy
လက်ရှိတွင် Debian နှင့် Ubuntu ကိုအခြေခံထားသော ပက်ကေ့ဂျ်များကိုသာ အသုံးပြုသည်။
ယခု သင်သည် မည်သည့်မှီခိုအားထားမှုမျိုးမဆို (ကျွန်ုပ်တို့၏အကြောင်းအရာတွင်) ရွေးချယ်နိုင်ပြီး ၎င်းတို့ကို ဖယ်ထုတ်နိုင်သည်။ ဥပမာအားဖြင့်၊ Python သည် Perl ပေါ်တွင်မူတည်သော်လည်း Perl ထည့်သွင်းခြင်းမရှိဘဲ ကောင်းမွန်စွာအလုပ်လုပ်သည်။
ရလဒ်များကို
Python image သည် command ကို အသုံးပြု၍ ဖန်တီးထားသည်။ fetchy dockerize python3.5
အလေးချိန်က 35MB ပဲရှိပါတယ် (အနာဂတ်မှာ ပိုပေါ့ပါးလာမှာ သေချာပါတယ်)။ ကျွန်ုပ်တို့သည် အနှိုင်းမဲ့ပုံမှ နောက်ထပ် 15 WW ကို ရိတ်နိုင်ခဲ့ကြောင်း တွေ့ရှိရပါသည်။
ယခုအချိန်အထိ စုဆောင်းထားသော ပုံအားလုံးကို သင်မြင်နိုင်သည်။
စီမံကိန်း-
သင်သည် အင်္ဂါရပ်များ ပျောက်ဆုံးနေပါက တောင်းဆိုမှုတစ်ခုကို ဖန်တီးပါ - ကျွန်ုပ်သည် ကူညီရန် ပျော်ရွှင်နေမည် :) ထို့ထက်မက၊ အခြားသော ပက်ကေ့ဂျ်မန်နေဂျာများကို fetchy အဖြစ် ပေါင်းစပ်လုပ်ဆောင်နေသောကြောင့် အဆင့်ပေါင်းများစွာ တည်ဆောက်မှုများ ပြုလုပ်ရန် မလိုအပ်တော့ပါ။
source: www.habr.com