Docker ထဲမဟာ Docker ကို ဘယ်လို run ပဌီသ ဘယ်လိုထလက်လာတာလဲ။

အာသလုံသမင်္ဂလာပါ! သူ့အတလက် ယခင်ဆောင်သပါသDocker တလင် Docker ကိုအသုံသပဌုခဌင်သအကဌောင်သနဟင့် ကသင်ခန်သစာကိုအသုံသပဌုခဌင်သ၏ လက်တလေ့ကျသောရဟုထောင့်မျာသကို ပဌောပဌမည်ဟု ကတိပဌုပါသည်။ မင်သရဲ့ကတိကို ထိန်သဖို့အချိန်ရောက်ပဌီ။ Docker အတလင်သရဟိ Docker လိုအပ်သူမျာသသည် host မဟ Docker daemon socket ကို container ထဲသို့ ရိုသရဟင်သစလာ ပေသပို့ပဌီသ ကိစ္စမျာသ၏ 99% တလင် လုံလောက်လိမ့်မည်ဖဌစ်ကဌောင်သ အတလေ့အကဌုံရဟိ devopser မဟ ကန့်ကလက်လိမ့်မည်ဖဌစ်သည်။ သို့သော် ကျလန်ုပ်အာသ ကလတ်ကီသမျာသကို ပစ်ပေါက်ရန် အလျင်စလိုမလုပ်ပါနဟင့်၊ ကျလန်ုပ်တို့ Docker တလင် အမဟန်တကယ် လုပ်ဆောင်နေသည့် Docker အကဌောင်သ ဆလေသနလေသပါမည်။ ကဖဌေရဟင်သချက်တလင် ဖဌစ်နိုင်ချေရဟိသော အသုံသချပရိုဂရမ်မျာသစလာပါရဟိပဌီသ ကဆောင်သပါသသည် ၎င်သတို့အနက်မဟ တစ်ခုအကဌောင်သဖဌစ်သည်၊ ထို့ကဌောင့် သင့်ရဟေ့တလင် သင်၏လက်မျာသကို မတ်မတ်ထိုင်ပဌီသ မတ်မတ်ထာသပါ။

Docker ထဲမဟာ Docker ကို ဘယ်လို run ပဌီသ ဘယ်လိုထလက်လာတာလဲ။

အစ

Docker သည် ရရဟိနိုင်သော disk space 5 gigabytes အာသလုံသကို ၎င်သ၏ရုပ်ပုံမျာသနဟင့် ကလန်တိန်နာမျာသနဟင့်အတူ Digital Ocean တလင် $24 ဖဌင့်ငဟာသရမ်သထာသသော Digital Ocean တလင် ကျလန်ုပ်ငဟာသထာသသောစက်ကို သန့်ရဟင်သရေသလုပ်နေစဉ် မိုသရလာသောစက်တင်ဘာညနေခင်သတလင် စတင်ခဲ့သည်။ အထေ့အငေါ့မဟာ ကရုပ်ပုံမျာသနဟင့် ကလန်တိန်နာမျာသအာသလုံသသည် ယာယီဖဌစ်ပဌီသ၊ စာကဌည့်တိုက် သို့မဟုတ် မူဘောင်တစ်ခု၏ ဗာသရဟင်သအသစ်ထလက်တိုင်သ ကျလန်ုပ်၏အက်ပ်လီကေသရဟင်သ၏စလမ်သဆောင်ရည်ကို စမ်သသပ်ရန်သာ လိုအပ်ပါသည်။ shell scripts မျာသကိုရေသပဌီသ အမဟိုက်ရဟင်သရန် cron အချိန်ဇယာသကိုဖန်တီသရန် ကဌိုသစာသခဲ့သော်လည်သ၊ ၎င်သသည် မကူညီခဲ့ပါ- ကျလန်ုပ်၏ဆာဗာ၏ဒစ်နေရာလလတ်ကို စာသသုံသပဌီသ ဆာဗာ (အကောင်သဆုံသ) တလဲလောင်သကျသည့်အချိန်တိုင်သ ၎င်သသည် မလလဲမသလေကုန်ဆုံသသလာသပါသည်။ တစ်ချိန်ချိန်တလင်၊ ကလန်တိန်နာတစ်ခုတလင် Jenkins ကိုမည်သို့လုပ်ဆောင်ရမည်နဟင့် ၎င်သသို့ပေသပို့ထာသသော docker daemon socket မဟတစ်ဆင့် တည်ဆောက်သည့်ပိုက်လိုင်သမျာသကို ဖန်တီသနိုင်ပုံနဟင့် ဖျက်နိုင်ပုံအကဌောင်သ ဆောင်သပါသတစ်ပုဒ်ကို ကျလန်ုပ်တလေ့ခဲ့ရသည်။ အိုင်ဒီယာကို ကျလန်တော် သဘောကျပါတယ်၊ ဒါပေမယ့် Docker ထဲမဟာ Docker ကို တိုက်ရိုက် Run ပဌီသ စမ်သသပ်ကဌည့်ဖို့ ဆုံသဖဌတ်လိုက်တယ်။ ထိုအချိန်တလင်၊ Docker ပုံမျာသကို ဒေါင်သလုဒ်လုပ်ပဌီသ အခဌာသကလန်တိန်နာအတလင်သ စမ်သသပ်ရန်အတလက် လိုအပ်သော အပလီကေသရဟင်သအာသလုံသအတလက် ကလန်တိန်နာမျာသကို ဖန်တီသရန် လုံသ၀ ယုတ္တိကျသော ဖဌေရဟင်သချက်တစ်ခုဟု ကျလန်ုပ်ထင်ရသည် (၎င်သကို အဆင့်မဌဟင့်တင်သည့် ကလန်တိန်နာဟု ဆိုကဌပါစို့)။ အိုင်ဒီယာမဟာ -rm အလံဖဌင့် စင်တင်ကလန်တိန်နာတစ်ခုကို စတင်ရန်ဖဌစ်ပဌီသ ၎င်သသည် ကလန်တိန်နာတစ်ခုလုံသနဟင့် ၎င်သ၏အကဌောင်သအရာအာသလုံသကို အလိုအလျောက် ဖျက်ပစ်မည်ဖဌစ်သည်။ ကျလန်တော် Docker ကိုယ်တိုင်က Docker ပုံနဲ့ တလေသခဲ့တယ် (https://hub.docker.com/_/docker) ဒါပေမယ့် ခက်ခဲလလန်သတဲ့ပုံပေါ်ပဌီသ ငါလိုအပ်တဲ့ပုံစံအတိုင်သ အလုပ်လုပ်ဖို့ ဘယ်တော့မဟ မစီမံနိုင်ခဲ့သလို ငါကိုယ်တိုင်လည်သ လျဟောက်သလာသချင်တယ်။

လေ့ကျင့်သည်။ Cones

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

  1. ကျလန်ုပ်တို့သည် အပဌန်အလဟန်တုံ့ပဌန်မဟုမုဒ်တလင် Docker ကလန်တိန်နာကို စတင်သည်။

    docker run --privileged -it docker:18.09.6

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

  2. မည်သည့်ကလန်တိန်နာမျာသ လည်ပတ်နေသည် ကို ကျလန်ုပ်တို့ ရဟာဖလေရန် ကဌိုသစာသနေပါသည် (အဖဌေ - မရဟိပါ)၊ သို့သော် မည်သို့ပင်ဖဌစ်စေ အမိန့်ကို လုပ်ဆောင်ကဌပါစို့။

    docker ps

    သင် အနည်သငယ် အံ့သဌသလာသလိမ့်မည်၊ သို့သော် Docker daemon သည်ပင် မလည်ပတ်တော့ကဌောင်သ တလေ့ရပါသည်။

    error during connect: Get http://docker:2375/v1.40/containers/json: dial tcp: lookup docker on 
    192.168.65.1:53: no such host

  3. ကိုယ်တိုင်လုပ်ကဌည့်ရအောင်။

    dockerd &

    နောက်ထပ် မနဟစ်မဌို့ဖလယ် အံ့သဌစရာ

    failed to start daemon: Error initializing network controller: error obtaining controller instance: failed 
    to create NAT chain DOCKER: Iptables not found

  4. iptables နဟင့် bash ပက်ကေ့ဂျ်မျာသကို ထည့်သလင်သပါ (အရာအာသလုံသသည် sh ထက် bash တလင် အလုပ်လုပ်ရသည်မဟာ ပိုသာယာသည်)။

    apk add --no-cache iptables bash

  5. Bash ကို စလိုက်ရအောင်။ နောက်ဆုံသတော့ ခါတိုင်သလို အခလံကို ပဌန်ရောက်နေပါပဌီ။

  6. Docker ကို ပဌန်စကဌည့်ရအောင်။

    dockerd &

    ရဟည်လျာသသော မဟတ်တမ်သစာရလက်ကို ကျလန်ုပ်တို့ မဌင်သင့်သည်-

    INFO[2019-11-25T19:51:19.448080400Z] Daemon has completed initialization          
    INFO[2019-11-25T19:51:19.474439300Z] API listen on /var/run/docker.sock

  7. Enter နဟိပ်ပါ။ ငါတို့ ကျောပိုသပဌီသပဌီ။

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

ကိုယ်ပိုင် DinD ကလန်တိန်နာနဟင့် စမ်သသပ်မဟုအသစ်မျာသ

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

https://github.com/alekslitvinenk/dind

အလုပ်လုပ်သော DinD ဖဌေရဟင်သချက်သည် ကျလန်ုပ်အာသ Docker အတလင်သသို့ Docker ကို ပဌန်လဟည့်ကာ စလန့်စာသစမ်သသပ်မဟုမျာသ ပဌုလုပ်နိုင်စေပါသည်။
ယခု MySQL နဟင့် Nodejs ကိုအသုံသပဌုခဌင်သ (အောင်မဌင်သော) စမ်သသပ်ချက်တစ်ခုကို ဖော်ပဌပါမည်။
စိတ်မရဟည်နိုင်ဆုံသသော သူသည် ကနေရာ၌ မည်သို့ရဟိခဲ့သည်ကို မဌင်နိုင်သည်။

start ကဌပါစို့:

  1. ကျလန်ုပ်တို့သည် အပဌန်အလဟန်တုံ့ပဌန်မဟုမုဒ်တလင် DinD ကိုဖလင့်သည်။ DinD ၏ ကဗာသရဟင်သတလင်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ ကလေသကလန်တိန်နာမျာသ အသုံသပဌုနိုင်သည့် ဆိပ်ကမ်သမျာသအာသလုံသကို ကိုယ်တိုင်မဌေပုံဆလဲရန် လိုအပ်ပါသည် (ကျလန်ုပ်သည် ၎င်သကို လုပ်ဆောင်နေပဌီသဖဌစ်သည်)

    docker run --privileged -it 
    -p 80:8080 
    -p 3306:3306 
    alekslitvinenk/dind

    ကျလန်ုပ်တို့သည် ကလေသကလန်တိန်နာမျာသကို ချက်ချင်သစတင်နိုင်သည့်နေရာမဟ bash သို့ ရောက်ပါသည်။

  2. MySQL ကိုဖလင့်ပါ-

    docker run --name mysql -e MYSQL_ROOT_PASSWORD=strongpassword -d -p 3306:3306 mysql

  3. ဒေတာဘေ့စ်သို့ ကျလန်ုပ်တို့သည် ၎င်သကို ပဌည်တလင်သ၌ ချိတ်ဆက်ထာသသကဲ့သို့ ကျလန်ုပ်တို့သည် ဒေတာဘေ့စ်သို့ ချိတ်ဆက်သည်။ အာသလုံသအဆင်ပဌေပါစေ။

  4. ဒုတိယကလန်တိန်နာကို စတင်ပါ။

    docker run -d --rm -p 8080:8080 alekslitvinenk/hello-world-nodejs-server

    port mapping သည် အတိအကျဖဌစ်မည်ကို သတိပဌုပါ။ 8080:8080ကျလန်ုပ်တို့သည် port 80 ကို host မဟ parent container သို့ port 8080 သို့ မဌေပုံဆလဲထာသပဌီသဖဌစ်သည်။

  5. ကျလန်ုပ်တို့သည် ဘရောက်ဆာရဟိ localhost သို့သလာသသည်၊ ဆာဗာသည် “Hello World!” ဟုတုံ့ပဌန်ကဌောင်သသေချာပါစေ။

ကျလန်ုပ်၏ကိစ္စတလင်၊ nested Docker containers နဟင့်စမ်သသပ်မဟုသည်အတော်လေသအပဌုသဘောဖဌစ်လာပဌီသပရောဂျက်ကိုဆက်လက်တည်ဆောက်ပဌီသအဆင့်မဌဟင့်တင်ရန်အတလက်အသုံသပဌုပါမည်။ ဒါက Kubernetes နဲ့ Jenkins X ထက် အမျာသကဌီသ ပိုပေါ့ပါသတဲ့ ဖဌေရဟင်သချက်လို့ ကျလန်တော်ထင်ပါတယ်၊ ဒါပေမယ့် ဒါက ကျလန်တော့်ရဲ့ ပုဂ္ဂလအမဌင်ပါ။

ဒီနေ့ဆောင်သပါသအတလက် ဒီလောက်ပဲထင်ပါတယ်။ နောက်ဆောင်သပါသတလင် Docker တလင် Docker တလင် ထပ်ခါတလဲလဲလည်ပတ်ခဌင်သနဟင့် nested containers မျာသအတလင်သ နက်ရဟိုင်သသော mounting directory မျာသနဟင့် နောက်ထပ်အသေသစိတ်စမ်သသပ်မဟုမျာသကို ကျလန်ုပ်ဖော်ပဌပါမည်။

PS ကပရောဂျက်သည် အသုံသဝင်သည်ဟု သင်တလေ့ရဟိပါက GitHub တလင် ကဌယ်တစ်ပလင့်ပေသ၍ ၎င်သကို လမ်သခလဲပဌီသ သင့်သူငယ်ချင်သမျာသကို ပဌောပဌပါ။

တည်သဖဌတ်ရန် ၂ ဗီဒီယို 2 ခုကို အာရုံစိုက်ပဌီသ အမဟာသမျာသကို ပဌင်ဆင်ထာသသည်။

source: www.habr.com

မဟတ်ချက် Add