څنګه ما د ډاکر دننه ډاکر واخیست او له هغې څخه څه راوتل

سلام و ټولو ته! په هغه کې پخوانۍ مقاله، ما ژمنه وکړه چې په ډاکر کې د ډاکر چلولو او د دې درس کارولو عملي اړخونو په اړه وغږیږم. دا د خپلې ژمنې د ساتلو وخت دی. یو تجربه لرونکی ډیوپرسر به شاید اعتراض وکړي چې هغه څوک چې د ډاکر دننه ډاکر ته اړتیا لري په ساده ډول د ډاکر ډیمون ساکټ له کوربه څخه کانټینر ته لیږدوي او دا به په 99٪ قضیو کې کافي وي. مګر په ما باندې د کوکیز اچولو لپاره بیړه مه کوئ ، ځکه چې موږ به په حقیقت کې د ډاکر دننه د ډاکر چلولو په اړه وغږیږو. دا حل ډیری ممکنه غوښتنلیکونه لري او دا مقاله د دوی څخه د یوې په اړه ده، نو شاته کښینئ او خپل لاسونه ستاسو په مخ کې سیده کړئ.

څنګه ما د ډاکر دننه ډاکر واخیست او له هغې څخه څه راوتل

پیل

دا ټول د سپتمبر په یوه باراني ماښام کې پیل شول کله چې ما هغه ماشین پاکاوه چې ما په ډیجیټل بحر کې د $ 5 لپاره کرایه کړی و ، کوم چې د دې حقیقت له امله کنګل شوی و چې ډاکر ټول 24 ګیګابایټ موجود ډیسک ځای د خپلو عکسونو او کانټینرونو سره ډک کړی و. عجیبه خبره دا وه چې دا ټول عکسونه او کانټینرونه لنډمهاله وو او یوازې زما د غوښتنلیک فعالیت ازموینې ته اړتیا درلوده هرکله چې د کتابتون یا چوکاټ نوې نسخه خپره شي. ما د شیل سکریپټونو لیکلو او د کثافاتو پاکولو لپاره د کرون مهالویش ترتیب کولو هڅه وکړه ، مګر دا مرسته ونه کړه: هرکله چې دا په لازمي ډول زما د سرور ډیسک ځای خوړلو او سرور ځړول (په غوره توګه) سره پای ته ورسید. په یو وخت کې ، ما په یوه کانټینر کې د جینکنز چلولو څرنګوالي په اړه یوه مقاله ولیده او دا څنګه کولی شي د ډاکر ډیمون ساکټ له لارې د ساختمان پایپ لاینونه رامینځته او حذف کړي. ما دا نظر خوښ کړ، مګر ما پریکړه وکړه چې نور لاړ شم او هڅه وکړم چې د ډاکر دننه د مستقیم چلولو تجربه وکړم. په هغه وخت کې ، دا ماته د ډاکر عکسونو ډاونلوډ کولو لپاره په بشپړ ډول منطقي حل ښکاري او د ټولو غوښتنلیکونو لپاره کانټینرونه رامینځته کړي چې ما په بل کانټینر کې دننه ازموینې لپاره ورته اړتیا درلوده (راځئ چې دا د سټینګ کانټینر ووایو). نظر دا و چې د -rm بیرغ سره د سټینګ کانټینر پیل کړئ ، کوم چې په اوتومات ډول ټول کانټینر او د هغې ټول مینځپانګې حذف کوي کله چې ودریږي. ما پخپله د ډاکر عکس سره ټینکر وکړ (https://hub.docker.com/_/docker)، مګر دا خورا پیچلي وګرځید او ما هیڅکله ونه توانید چې دا په هغه طریقه کار وکړي چې ورته اړتیا وه او ما غوښتل چې پخپله ټوله لاره لاړ شم.

تمرین. مخروط

ما د کانټینر د کار کولو لپاره لاره هواره کړه لکه څنګه چې زه ورته اړتیا لرم او خپلو تجربو ته یې دوام ورکړ، چې په پایله کې یې بې شمیره جواني رامینځته شول. زما د ځان ځورونې پایله لاندې الګوریتم وه:

  1. موږ د ډاکر کانټینر په متقابل حالت کې لانچ کوو.

    docker run --privileged -it docker:18.09.6

    د کانټینر نسخې ته پام وکړئ، ښي یا کیڼ ګام پورته کړئ او ستاسو DinD په کدو بدل شي. په حقیقت کې ، شیان ډیری وختونه ماتیږي کله چې نوې نسخه خپره شي.
    موږ باید سمدستي شیل ته ورسیږو.

  2. موږ هڅه کوو چې معلومه کړو چې کوم کانټینرونه روان دي (ځواب: هیڅ نه)، مګر راځئ چې په هرصورت کمانډ چلوو:

    docker ps

    تاسو به یو څه حیران شئ، مګر دا معلومه شوه چې د ډاکر ډیمون حتی نه روان دی:

    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 په پرتله په باش کې کار کولو لپاره خورا خوښ دی):

    apk add --no-cache iptables bash

  5. راځئ چې bash پیل کړو. په نهایت کې موږ بیرته عادي خولۍ ته یو

  6. راځئ چې د ډاکر بیا پیل کولو هڅه وکړو:

    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 فشار ورکړئ. موږ بیرته په باش کې یو.

له اوس څخه ، موږ کولی شو هڅه وکړو چې زموږ د ډاکر کانټینر دننه نور کانټینرونه لانچ کړو ، مګر که موږ غواړو زموږ د ډاکر کانټینر دننه بل ډاکر کانټینر لانچ کړو یا یو څه غلط شي او کانټینر غورځیږي؟ ټول بیا پیل کړئ.

د DinD کانټینر او نوي تجربې پخپله

څنګه ما د ډاکر دننه ډاکر واخیست او له هغې څخه څه راوتل
د دې لپاره چې پورتنۍ مرحلې په تکرار سره تکرار نه شي، ما خپل د DinD کانټینر جوړ کړ:

https://github.com/alekslitvinenk/dind

د DinD کاري حل ما ته دا وړتیا راکړه چې د ډاکر دننه ډاکر په تکراري ډول پرمخ بوځم او ډیرې زړه راښکونکې تجربې ترسره کړم.
زه اوس د MySQL او Nodejs چلولو سره یو داسې (بریالی) تجربه تشریح کوم.
خورا بې صبره کولی شي وګوري چې دا دلته څنګه و

نو ، راځئ چې پیل وکړو:

  1. موږ DinD په متقابل حالت کې پیل کوو. د DinD په دې نسخه کې، موږ اړتیا لرو په لاسي ډول ټول هغه بندرونه نقشه کړو چې زموږ د ماشوم کانټینرونه یې کارولی شي (زه دمخه په دې کار کوم)

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

    موږ باش ته ورسیږو، له هغه ځایه موږ کولی شو سمدلاسه د ماشومانو کانټینرونه پیل کړو.

  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

    مهرباني وکړئ په یاد ولرئ چې د بندر نقشه به په سمه توګه وي 8080:8080، ځکه چې موږ دمخه د کوربه څخه د اصلي کانټینر څخه پورټ 80 ته پورټ 8080 نقشه کړې.

  5. موږ په براوزر کې لوکل هوسټ ته ځو، ډاډ ترلاسه کړئ چې سرور ځواب ورکوي "هیلو ورلډ!"

زما په قضیه کې، د نیست شوي ډاکر کانټینرونو تجربه خورا مثبته وه او زه به د پروژې پراختیا ته دوام ورکړم او د سټینګ لپاره به یې وکاروم. ماته داسې ښکاري چې دا د کبرنیټس او جینکنز ایکس په پرتله خورا لږ وزن لرونکي حل دی مګر دا زما موضوعي نظر دی.

زما په اند دا ټول د نن ورځې مقالې لپاره دي. په راتلونکې مقاله کې به زه په ډاکر کې په تکراري ډول د ډاکر چلولو او په نیست شوي کانټینرونو کې ژور لارښودونو نصبولو سره په ډیر تفصیل سره تجربې بیان کړم.

PS که تاسو دا پروژه ګټوره ومومئ، مهرباني وکړئ دا په GitHub کې یو ستوری ورکړئ، دا یې وخورئ او خپلو ملګرو ته یې ووایاست.

ایډیټ 1 سمې شوې غلطۍ، په 2 ویډیوګانو تمرکز

سرچینه: www.habr.com

Add a comment