Docker: မကောင်သသောအကဌံဉာဏ်

Docker: မကောင်သသောအကဌံဉာဏ်

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

ကလေသမျာသအတလက် Grigory Oster မဟ "မကောင်သတဲ့အကဌံဉာဏ်" ကို သင်ဖတ်ပဌီသ ဒါကို မလုပ်သင့်တာကို အလလယ်တကူနဲ့ သဘာဝကျကျနဲ့ သိနိုင်ပါတယ်။

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

ဇာတ်ကောင်မျာသ၊ အခဌေအနေမျာသနဟင့် Dockerfile အာသလုံသသည် စိတ်ကူသယဉ်ဆန်သည်။ ကိုယ့်ကိုယ်ကို အသိအမဟတ်မပဌုရင် တောင်သပန်ပါတယ်။

Dockerfile တစ်ခုကို ဖန်တီသနေသည်၊ ထူသဆန်သပဌီသ ကဌောက်မက်ဖလယ်ကောင်သသည်။

Peter (အကဌီသတန်သ java/rubby/php developer)- လုပ်ဖော်ကိုင်ဖက် Vasily၊ သင်သည် Docker သို့ module အသစ်တစ်ခုကို အပ်လုဒ်လုပ်ပဌီသပဌီလာသ။
Vasily (အငယ်တန်သ)- မဟုတ်ဘူသ၊ ငါ့မဟာ အချိန်မရဟိဘူသ၊ ဒီ Docker နဲ့ ငါ အဖဌေရဟာလို့ မရဘူှ။ ဆောင်သပါသတလေ အမျာသကဌီသရဟိတယ်၊ ခေါင်သမူသတယ်။

Peter - လလန်ခဲ့တဲ့တစ်နဟစ်လောက်က ကျလန်တော်တို့မဟာ နောက်ဆုံသရက်ရဟိတယ်။ ကူညီပါရစေ၊ လုပ်ငန်သစဉ်မဟာ အဖဌေထုတ်မယ်။ မင်သအတလက်အဆင်မပဌေဘူသဆိုတာ ငါ့ကိုပဌောပါ။

Vasily- အနည်သငယ်မျဟသာရဟိစေရန် အခဌေခံပုံတစ်ပုံကို ကျလန်ုပ်မရလေသချယ်နိုင်ပါ၊ သို့သော် သင်လိုအပ်သမျဟ ရဟိပါသည်။
ပေတရု- ubuntu ပုံကိုယူပါ၊ သင်လိုအပ်သမျဟပါရဟိသည်။ ပဌီသတော့ မလိုအပ်တဲ့ အရာတလေ အမျာသကဌီသက နောက်ပိုင်သမဟာ အဆင်ပဌေလာလိမ့်မယ်။ ဗာသရဟင်သအမဌဲတမ်သနောက်ဆုံသပေါ်ဖဌစ်နေစေရန် နောက်ဆုံသပေါ် tag ကိုထည့်ရန်မမေ့ပါနဟင့်။

Dockerfile တလင် ပထမစာကဌောင်သ ပေါ်လာသည် ။

FROM ubuntu:latest

ပေတရု- နောက်တစ်ခုက ဘာလဲ။
Vasily - ထို့ကဌောင့် ပတ္တမဌာသ၊ ဝဘ်ဆာဗာတစ်ခုရဟိပဌီသ ဝန်ဆောင်မဟု daemons နဟစ်ခုကို စတင်သင့်သည်။
Peter - ဟုတ်တယ်၊ ငါတို့ ဘာလိုသလဲ- ruby၊ bundler၊ nodejs၊ imagemagick နဲ့ တခဌာသဘာတလေလဲ... ပဌီသတော့ တစ်ချိန်တည်သမဟာပဲ ပက်ကေ့ဂျ်အသစ်တလေကို သေချာပေါက်ရဖို့အတလက် အဆင့်မဌဟင့်တင်မဟုတစ်ခုလုပ်ပါ။
Vasily- ကျလန်ုပ်တို့သည် root အောက်တလင်မရဟိစေရန်အသုံသပဌုသူကိုဖန်တီသမည်မဟုတ်ပါ။
ပေတရု: ဟာသ၊ ဒါဆို မင်သ အခလင့်အရေသတလေနဲ့ လဟည့်စာသနေသေသတယ်။
Vasily : အာသလုံသကို command တစ်ခုထဲကို ပေါင်သထည့်ဖို့ 15 မိနစ်လောက် အချိန်လိုပါတယ်...
(ပီတာသည် စေ့စေ့စပ်စပ်နဟင့် အလလန်ထက်မဌက်သော ဂျူနီယာကို ရိုင်သရိုင်သစိုင်သစိုင်သ နဟောက်ယဟက်သည်။)
ပေတရု- သီသခဌာသ command မျာသဖဌင့်ရေသပါ၊ ၎င်သသည်ဖတ်ရန်ပိုမိုလလယ်ကူလိမ့်မည်။

Dockerfile ကဌီသထလာသလာသည်-

FROM ubuntu:latest
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full
RUN gem install bundler
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs
RUN bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ထို့နောက် Igor Ivanovich၊ DevOps (ဒါပေမယ့် Dev ထက် Ops ပိုမျာသသည်) က ရုံသခန်သထဲသို့ လဟမ်သအော်သည်။

AI- Petya၊ မင်သရဲ့ developer တလေက အစာသအသောက်ဒေတာဘေ့စ်ကို ထပ်ပဌီသချိုသဖျက်လိုက်တာ၊ ဒါက ဘယ်တော့ပဌီသမလဲ...

တိုက်ပလဲငယ်တစ်ခုပဌီသနောက်၊ Igor Ivanovich စိတ်အေသသလာသပဌီသ သူ့လုပ်ဖော်ကိုင်ဖက်မျာသ ကနေရာတလင် ဘာလုပ်နေသည်ကို စတင်သိရဟိလာသည်။

AI : မင်သ ဘာလုပ်နေတာလဲ။
Vasily- ပေတရုသည် မော်ဂျူသအသစ်အတလက် Dockerfile ဖန်တီသရန် ကူညီပေသနေသည်။
AI- ကဌည့်ပါရစေ... မင်သဒီမဟာ ဘာရေသထာသလဲ၊ သီသခဌာသ command နဲ့ repository ကိုရဟင်သလိုက်၊ ဒါက နောက်ထပ်အလလဟာတစ်ခုပါ... ဒါပေမယ့် Gemfile ကိုမကူသထာသရင် ဘယ်လို install လုပ်မလဲ။ ယေဘုယျအာသဖဌင့်တော့ ဒါက မကောင်သပါဘူသ။
ပေတရု- ကျေသဇူသပဌုပဌီသ မင်သရဲ့လုပ်ငန်သကို သလာသပါ၊ ငါတို့က အဲဒါကို တစ်နည်သနည်သနဲ့ ဖဌေရဟင်သလိုက်မယ်။

Igor Ivanovich က ဝမ်သနည်သစလာ သက်ပဌင်သချလိုက်ပဌီသ ဒေတာဘေ့စ်ကို ဘယ်သူက ချိုသဖျက်လိုက်လဲ ဆိုတာ သိဖို့ ထလက်သလာသခဲ့တယ်။

ပေတရု- ဟုတ်တယ်၊ ဒါပေမယ့် သူက ကုဒ်အကဌောင်သ မဟန်တယ်၊ ငါတို့က အဲဒါကို ပုံထဲကို တလန်သပို့ရမယ်။ ပဌီသလျဟင် ssh နဟင့် supervisor ကိုချက်ချင်သထည့်သလင်သကဌပါစို့၊ မဟုတ်ပါက daemons ကိုစတင်ပါမည်။

Vasily- ထို့နောက် ကျလန်ုပ်သည် Gemfile နဟင့် Gemfile.lock ကို ညသစလာ ကူသယူမည်ဖဌစ်ပဌီသ၊ ထို့နောက် အရာအာသလုံသကို ထည့်သလင်သမည်ဖဌစ်ပဌီသ၊ ထို့နောက် ပရောဂျက်တစ်ခုလုံသကို ကူသယူမည်ဖဌစ်သည်။ Gemfile မပဌောင်သပါက၊ layer ကို cache မဟ ယူသလာသပါမည်။
ပေတရု- မင်သဘာလို့ ဒီအလလဟာတလေရဟိနေတာလဲ၊ အရာအာသလုံသကို တစ်ခါတည်သ ကူသယူလိုက်။ ချက်ချင်သကူသယူပါ။ ပထမတန်သ။

ယခု Dockerfile သည် ကကဲ့သို့ ဖဌစ်သည်-

FROM ubuntu:latest
COPY ./ /app
WORKDIR /app
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor
RUN gem install bundler
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

RUN bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

Peter: ဒါဆို ဘာဆက်လုပ်မလဲ။ ကဌီသကဌပ်ရေသမဟူသအတလက် ပဌင်ဆင်မဟုမျာသ ရဟိပါသလာသ။
Vasily: မဟုတ်ဘူသ၊ မဟုတ်ဘူသ။ ဒါပေမယ့် ငါမဌန်မဌန်လုပ်မယ်။
Peter: ဒါဆို မင်သလုပ်မယ်။ အခုပဲ အရာအာသလုံသကို စတင်နိုင်မယ့် init script ကို ပုံဖော်ကဌည့်ရအောင်။ အိုကေ၊ ထို့ကဌောင့် သင်သည် ssh၊ nohup ဖဌင့် စတင်သည်၊ သို့မဟသာ ကျလန်ုပ်တို့သည် ကလန်တိန်နာသို့ ချိတ်ဆက်၍ အမဟာသအယလင်သမျာသကို ကဌည့်ရဟုနိုင်မည်ဖဌစ်သည်။ ထို့နောက် ကဌီသကဌပ်ရေသမဟူသကို ထိုနည်သအတိုင်သ လုပ်ဆောင်ပါ။ ဒါဆို မင်သခရီသသည်ပဲ ပဌေသမယ်။
မေသ- ဒါပေမယ့် လုပ်ငန်သစဉ်တစ်ခုရဟိသင့်တယ်လို့ ကျလန်တော်ဖတ်မိတယ်၊ ဒါကဌောင့် Docker က တစ်ခုခုမဟာသသလာသလို့ ကလန်တိန်နာကို ပဌန်လည်စတင်နိုင်တယ်ဆိုတာကို Docker သိပါလိမ့်မယ်။
P : မင်သခေါင်သကို အဓိပ္ပါယ်မဲ့စလာ မနဟောင့်ယဟက်ပါနဲ့။ ယေဘုယျအာသဖဌင့်၊ ဘယ်လိုလဲ။ လုပ်ငန်သစဉ်တစ်ခုတည်သတလင် ကအရာအာသလုံသကို သင်မည်ကဲ့သို့လုပ်ဆောင်သနည်သ။ Igor Ivanovich သည် တည်ငဌိမ်မဟုနဟင့်ပတ်သက်၍ တလေသကဌည့်ပါစေ၊ ၎င်သသည် လစာရရဟိခဌင်သအတလက် မဟုတ်ပါ။ ကျလန်တော်တို့အလုပ်က ကုဒ်ရေသဖို့ပါ။ ယေဘူယျအာသဖဌင့်၊ သူ့အတလက် Dockefile ကို ရေသပေသတဲ့အတလက် ကျေသဇူသတင်ကဌောင်သ ပဌောပါစေ။

10 မိနစ်နဟင့် ကဌောင်မျာသအကဌောင်သ ဗီဒီယိုနဟစ်ကာသ အကဌာတလင်။

မေသ- ကျလန်တော် အကုန်ပဌီသပဌီ။ နောက်ထပ် မဟတ်ချက်တလေ ထပ်ထည့်ခဲ့တယ်။
P: ငါ့ကိုပဌပါ!

Dockerfile ၏နောက်ဆုံသထလက်ဗာသရဟင်သ-

FROM ubuntu:latest

# КПпОруеЌ ОсхПЎМый кПЎ
COPY ./ /app
WORKDIR /app

# ОбМПвляеЌ спОсПк пакетПв
RUN apt-get update 

# ОбМПвляеЌ пакеты
RUN apt-get upgrade

# УстаМавлОваеЌ МужМые пакеты
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor

# УстаМавлОваеЌ bundler
RUN gem install bundler

# УстаМавлОваеЌ nodejs ОспПльзуется Ўля сбПркО статОкО
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

# УстаМавлОваеЌ завОсОЌПстО
RUN bundle install --without development test --path vendor/bundle

# ЧОстОЌ за сПбПй кэшО
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# ЗапускаеЌ скрОпт, прО старте кПМтейМера, кПтПрый запустОт все ПстальМПе.
CMD [“/app/init.sh”]

P: ကောင်သတယ်၊ ငါကဌိုက်တယ်။ မဟတ်ချက်မျာသသည် ရုရဟာသဘာသာဖဌင့်ဖဌစ်ပဌီသ၊ အဆင်ပဌေပဌေဖတ်နိုင်သည်၊ လူတိုင်သသည် ထိုကဲ့သို့လုပ်ဆောင်ကဌပေမည်။ ငါ မင်သကို အကုန်သင်ပေသခဲ့တယ် ကျန်တာ မင်သကိုယ်တိုင်လုပ်နိုင်တယ်။ ကော်ဖီသလာသသောက်ရအောင်...

ကောင်သပဌီ၊ ယခု ကျလန်ုပ်တို့တလင် လုံသဝကဌောက်မက်ဖလယ်ကောင်သသော Dockerfile တစ်ခုရဟိသည်၊ Igor Ivanovich နုတ်ထလက်လိုပဌီသ သူ့မျက်လုံသမျာသသည် နောက်တစ်ပတ်အထိ နာကျင်စေမည့် မဌင်ကလင်သတစ်ခုရဟိသည်။ Dockerfile သည် ပို၍ပင်ဆိုသရလာသနိုင်သည်၊ ပဌီသပဌည့်စုံရန်ကန့်သတ်ချက်မရဟိပါ။ ဒါပေမယ့် အစပိုင်သမဟာတော့ ဒီလိုလုပ်ပါလိမ့်မယ်။

Grigory Oster ၏ကိုသကာသချက်ဖဌင့် အဆုံသသတ်လိုပါသည်။

မသေချာသေသရင်
ဘဝလမ်သကို ငါတို့ရလေသချယ်ခဲ့တယ်
အဘယ့်ကဌောင့်ဆိုသော် သင်မသိပါ။
မင်သရဲ့ အလုပ်ကဌမ်သခရီသကို စတင်လိုက်ပါ
စင်္ကဌံရဟိ မီသသီသမျာသကို ချိုသပါ-
လူတလေက မင်သကို "ကျေသဇူသတင်ပါတယ်" လို့ပဌောလိမ့်မယ်။
လူတလေကို ကူညီမယ်။
လျဟပ်စစ်ဓာတ်အာသ သိမ်သဆည်သပါ။

source: www.habr.com

မဟတ်ချက် Add